<?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=Groux</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=Groux"/>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php/Sp%C3%A9cial:Contributions/Groux"/>
		<updated>2026-05-14T02:17:09Z</updated>
		<subtitle>Contributions de l’utilisateur</subtitle>
		<generator>MediaWiki 1.29.2</generator>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2017/2018_EC5&amp;diff=47169</id>
		<title>IMA4 2017/2018 EC5</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2017/2018_EC5&amp;diff=47169"/>
				<updated>2018-06-14T14:13:19Z</updated>
		
		<summary type="html">&lt;p&gt;Groux : /* Documents */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Présentation du projet ==&lt;br /&gt;
&lt;br /&gt;
=== Contexte ===&lt;br /&gt;
&lt;br /&gt;
L'élève continue son semestre S8 à l'école.&lt;br /&gt;
&lt;br /&gt;
=== Objectif ===&lt;br /&gt;
&lt;br /&gt;
Il vous est demandé d'écrire un programme C permettant de simuler l'ordonnancement de processus avec gestion de ressources communes suivant les algorithmes tourniquet et priorité avec préemption.&lt;br /&gt;
&lt;br /&gt;
=== Description du projet ===&lt;br /&gt;
&lt;br /&gt;
Vous commencerez par créer les structures de données pour pouvoir décrire, dans le code C, les processus que votre ordonnanceur va devoir gérer.&lt;br /&gt;
&lt;br /&gt;
Les caractéristiques des processus à prendre en compte sont :&lt;br /&gt;
* un numéro permettant d'identifier les processus ;&lt;br /&gt;
* une date de départ du processus par rapport à une horloge globale ;&lt;br /&gt;
* les divers événements du processus par rapport à son horloge interne correspondant au temps passé en exécution :&lt;br /&gt;
** réclamation d'une ressource commune ;&lt;br /&gt;
** libération d'une ressource commune ;&lt;br /&gt;
** terminaison du processus.&lt;br /&gt;
&lt;br /&gt;
Un exemple de description de processus est donné ci-après.&lt;br /&gt;
&lt;br /&gt;
 int nb_procs=4;&lt;br /&gt;
 struct event p1_events[]={ {30,OP_CLAIM,R1}, {70,OP_RELEASE,R1}, {100,OP_STOP} };&lt;br /&gt;
 struct event p2_events[]={ {80,OP_CLAIM,R1}, {180,OP_RELEASE,R1}, {200,OP_STOP} };&lt;br /&gt;
 struct event p3_events[]={ {40,OP_CLAIM,R1}, {160,OP_RELEASE,R1}, {300,OP_STOP} };&lt;br /&gt;
 struct event p4_events[]={ {400,OP_STOP} };&lt;br /&gt;
 struct process procs[]={&lt;br /&gt;
  {.number=1,.start=150,.priority=1,.events=p1_events},&lt;br /&gt;
  {.number=2,.start=100,.priority=2,.events=p2_events},&lt;br /&gt;
  {.number=3,.start=50,.priority=3,.events=p3_events},&lt;br /&gt;
  {.number=4,.start=0,.priority=4,.events=p4_events}&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
Les caractéristiques des ressources à prendre en compte sont :&lt;br /&gt;
* un numéro permettant d'identifier les ressources ;&lt;br /&gt;
* le nombre d'occurrences de la ressource disponibles.&lt;br /&gt;
&lt;br /&gt;
Pour simuler les deux algorithmes d'ordonnancement, vous utiliserez un algorithme &amp;quot;intelligent&amp;quot; :&lt;br /&gt;
* faites partir le temps de zéro puis rentrez dans une boucle infinie où le temps saute directement à l'événement suivant (arrivé d'un processus, événement pour le processus courant, fin du quantum de temps, etc) ;&lt;br /&gt;
* voyez si un nouvel événement se traduit par un changement d'état du processus courant et l'activation d'un autre processus ;&lt;br /&gt;
* si tous les processus sont terminés, sortez de la boucle.&lt;br /&gt;
&lt;br /&gt;
A chaque événement imprimez un code permettant de suivre l'exécution :&lt;br /&gt;
* pour la réclamation ou la libération d'une ressource affichez le temps global, le caractére &amp;lt;code&amp;gt;R&amp;lt;/code&amp;gt; comme ressource, son numéro et &amp;lt;code&amp;gt;+&amp;lt;/code&amp;gt; ou &amp;lt;code&amp;gt;-&amp;lt;/code&amp;gt; suivant qu'il s'agit d'une réclamation ou d'une libération ;&lt;br /&gt;
* pour le changement d'état d'un processus, affichez le temps global, le caractére &amp;lt;code&amp;gt;P&amp;lt;/code&amp;gt; comme processus, son numéro et &amp;lt;code&amp;gt;[&amp;lt;/code&amp;gt; ou &amp;lt;code&amp;gt;]&amp;lt;/code&amp;gt; suivant qu'il s'agit de l'activation ou de la mise en sommeil du processus.&lt;br /&gt;
&lt;br /&gt;
Pour chaque simulation lancez les deux algorithmes d'ordonnancement. Vérifiez votre programme avec les différents exercices d'ordonnancement des DS de système des années passées.&lt;br /&gt;
&lt;br /&gt;
Une fois le programme fonctionnel étudiez les différentes variantes possibles pour les deux algorithmes. Par exemple pour le tourniquet, le quantum de temps est-il ou non prioritaire sur une opération sur une ressource qui est programmée au même instant ? Par exemple pour la priorité avec préemption, comment choisir entre des processus avec la même priorité ?&lt;br /&gt;
&lt;br /&gt;
=== Planning prévisionnel ===&lt;br /&gt;
&lt;br /&gt;
== Travail effectué ==&lt;br /&gt;
Le début de travail à été de créer les différentes structures afin de pouvoir construire l'ordonnancement.&lt;br /&gt;
&lt;br /&gt;
On a pu différencier 3 structures différentes : Celle de la ressource, celle du processus et celle d'un événement.&lt;br /&gt;
&lt;br /&gt;
Les structures sont les suivantes : &lt;br /&gt;
&lt;br /&gt;
 struct ressource&lt;br /&gt;
 {&lt;br /&gt;
    int num_ressource;&lt;br /&gt;
    int nb_occurence;&lt;br /&gt;
 };&lt;br /&gt;
 typedef struct ressource Ressource;&lt;br /&gt;
&lt;br /&gt;
 struct event&lt;br /&gt;
 {&lt;br /&gt;
    int demande;&lt;br /&gt;
    int action;&lt;br /&gt;
    Ressource R;&lt;br /&gt;
 };&lt;br /&gt;
 typedef struct event Event;&lt;br /&gt;
&lt;br /&gt;
 struct process&lt;br /&gt;
 {&lt;br /&gt;
    int number;&lt;br /&gt;
    int start;&lt;br /&gt;
    int priority;&lt;br /&gt;
    int nbEvent;&lt;br /&gt;
    Event* event;&lt;br /&gt;
 };&lt;br /&gt;
 typedef struct process Process;&lt;br /&gt;
&lt;br /&gt;
Une fois celle ci définit, il a donc fallu créer un ordonnancement par tourniquet dans un premier temps, puis dans un second temps par priorité avec préemption.&lt;br /&gt;
&lt;br /&gt;
Afin de réaliser ces ordonnancement, j'ai repris les événements et les processus du Ds du 6 janvier 2017.&lt;br /&gt;
&lt;br /&gt;
Une fois cette étapes de retranscription finie il a fallu créer les fonctions utile au déroulement de l'ordonnancement : afin que celui ci se rapproche au plus près de la réalité, j'ai établie les règles suivantes : &lt;br /&gt;
         -Un temps de switch era mis en place afin qu'il existe un temps de battement entre les changements de processus&lt;br /&gt;
         -Si deux processus démarre en même temps, c'est le premier arrivé dans le programme qui s'exécutera&lt;br /&gt;
         -Un temps de switch et de quantum sera demandé au début du programme&lt;br /&gt;
&lt;br /&gt;
Pour le second, si un processus en cours, demande de prendre la main alors qu'il a une priorité égale, la demande sera rejetée.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Réponse aux questions : &lt;br /&gt;
Le quantum de temps est-il ou non prioritaire sur une opération sur une ressource qui est programmée au même instant ? &lt;br /&gt;
Dans mon programme, avant de commencer une opération qui demandera une ressource quelconque il est observé si le quantum de temps se termine. En effet si l'inverse était fait, un processus pourrait prendre un ressource sans l'utiliser. Si celle est demandé dans le future elle ne pourra pas être utilisé. Je pense donc que la priorité doit être donné au quantum et non à l'opération.&lt;br /&gt;
&lt;br /&gt;
Pour la priorité avec préemption, comment choisir entre des processus avec la même priorité ?&lt;br /&gt;
&lt;br /&gt;
Pour choisir entre deux processus ayant la même priorité, il existe plusieurs solution : soit le premier arrivé reste tant qu'il n'est pas fini, soit on compare le temps restant pour chacun d'entre eux et l'on prend celui dont le temps restant est le plus court afin de libérer au plus vite les ressources.&lt;br /&gt;
&lt;br /&gt;
== Sources ==&lt;br /&gt;
Les principales sources ont été celles données au début du rattrapage ainsi que le cours de système et de temps réel du semestre 7.&lt;br /&gt;
&lt;br /&gt;
== Documents ==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Rattrapage_système.zip]]&lt;/div&gt;</summary>
		<author><name>Groux</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Rattrapage_syst%C3%A8me.zip&amp;diff=47168</id>
		<title>Fichier:Rattrapage système.zip</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Rattrapage_syst%C3%A8me.zip&amp;diff=47168"/>
				<updated>2018-06-14T14:11:15Z</updated>
		
		<summary type="html">&lt;p&gt;Groux : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Groux</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2017/2018_EC5&amp;diff=47159</id>
		<title>IMA4 2017/2018 EC5</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2017/2018_EC5&amp;diff=47159"/>
				<updated>2018-06-12T07:25:57Z</updated>
		
		<summary type="html">&lt;p&gt;Groux : /* Travail effectué */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Présentation du projet ==&lt;br /&gt;
&lt;br /&gt;
=== Contexte ===&lt;br /&gt;
&lt;br /&gt;
L'élève continue son semestre S8 à l'école.&lt;br /&gt;
&lt;br /&gt;
=== Objectif ===&lt;br /&gt;
&lt;br /&gt;
Il vous est demandé d'écrire un programme C permettant de simuler l'ordonnancement de processus avec gestion de ressources communes suivant les algorithmes tourniquet et priorité avec préemption.&lt;br /&gt;
&lt;br /&gt;
=== Description du projet ===&lt;br /&gt;
&lt;br /&gt;
Vous commencerez par créer les structures de données pour pouvoir décrire, dans le code C, les processus que votre ordonnanceur va devoir gérer.&lt;br /&gt;
&lt;br /&gt;
Les caractéristiques des processus à prendre en compte sont :&lt;br /&gt;
* un numéro permettant d'identifier les processus ;&lt;br /&gt;
* une date de départ du processus par rapport à une horloge globale ;&lt;br /&gt;
* les divers événements du processus par rapport à son horloge interne correspondant au temps passé en exécution :&lt;br /&gt;
** réclamation d'une ressource commune ;&lt;br /&gt;
** libération d'une ressource commune ;&lt;br /&gt;
** terminaison du processus.&lt;br /&gt;
&lt;br /&gt;
Un exemple de description de processus est donné ci-après.&lt;br /&gt;
&lt;br /&gt;
 int nb_procs=4;&lt;br /&gt;
 struct event p1_events[]={ {30,OP_CLAIM,R1}, {70,OP_RELEASE,R1}, {100,OP_STOP} };&lt;br /&gt;
 struct event p2_events[]={ {80,OP_CLAIM,R1}, {180,OP_RELEASE,R1}, {200,OP_STOP} };&lt;br /&gt;
 struct event p3_events[]={ {40,OP_CLAIM,R1}, {160,OP_RELEASE,R1}, {300,OP_STOP} };&lt;br /&gt;
 struct event p4_events[]={ {400,OP_STOP} };&lt;br /&gt;
 struct process procs[]={&lt;br /&gt;
  {.number=1,.start=150,.priority=1,.events=p1_events},&lt;br /&gt;
  {.number=2,.start=100,.priority=2,.events=p2_events},&lt;br /&gt;
  {.number=3,.start=50,.priority=3,.events=p3_events},&lt;br /&gt;
  {.number=4,.start=0,.priority=4,.events=p4_events}&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
Les caractéristiques des ressources à prendre en compte sont :&lt;br /&gt;
* un numéro permettant d'identifier les ressources ;&lt;br /&gt;
* le nombre d'occurrences de la ressource disponibles.&lt;br /&gt;
&lt;br /&gt;
Pour simuler les deux algorithmes d'ordonnancement, vous utiliserez un algorithme &amp;quot;intelligent&amp;quot; :&lt;br /&gt;
* faites partir le temps de zéro puis rentrez dans une boucle infinie où le temps saute directement à l'événement suivant (arrivé d'un processus, événement pour le processus courant, fin du quantum de temps, etc) ;&lt;br /&gt;
* voyez si un nouvel événement se traduit par un changement d'état du processus courant et l'activation d'un autre processus ;&lt;br /&gt;
* si tous les processus sont terminés, sortez de la boucle.&lt;br /&gt;
&lt;br /&gt;
A chaque événement imprimez un code permettant de suivre l'exécution :&lt;br /&gt;
* pour la réclamation ou la libération d'une ressource affichez le temps global, le caractére &amp;lt;code&amp;gt;R&amp;lt;/code&amp;gt; comme ressource, son numéro et &amp;lt;code&amp;gt;+&amp;lt;/code&amp;gt; ou &amp;lt;code&amp;gt;-&amp;lt;/code&amp;gt; suivant qu'il s'agit d'une réclamation ou d'une libération ;&lt;br /&gt;
* pour le changement d'état d'un processus, affichez le temps global, le caractére &amp;lt;code&amp;gt;P&amp;lt;/code&amp;gt; comme processus, son numéro et &amp;lt;code&amp;gt;[&amp;lt;/code&amp;gt; ou &amp;lt;code&amp;gt;]&amp;lt;/code&amp;gt; suivant qu'il s'agit de l'activation ou de la mise en sommeil du processus.&lt;br /&gt;
&lt;br /&gt;
Pour chaque simulation lancez les deux algorithmes d'ordonnancement. Vérifiez votre programme avec les différents exercices d'ordonnancement des DS de système des années passées.&lt;br /&gt;
&lt;br /&gt;
Une fois le programme fonctionnel étudiez les différentes variantes possibles pour les deux algorithmes. Par exemple pour le tourniquet, le quantum de temps est-il ou non prioritaire sur une opération sur une ressource qui est programmée au même instant ? Par exemple pour la priorité avec préemption, comment choisir entre des processus avec la même priorité ?&lt;br /&gt;
&lt;br /&gt;
=== Planning prévisionnel ===&lt;br /&gt;
&lt;br /&gt;
== Travail effectué ==&lt;br /&gt;
Le début de travail à été de créer les différentes structures afin de pouvoir construire l'ordonnancement.&lt;br /&gt;
&lt;br /&gt;
On a pu différencier 3 structures différentes : Celle de la ressource, celle du processus et celle d'un événement.&lt;br /&gt;
&lt;br /&gt;
Les structures sont les suivantes : &lt;br /&gt;
&lt;br /&gt;
 struct ressource&lt;br /&gt;
 {&lt;br /&gt;
    int num_ressource;&lt;br /&gt;
    int nb_occurence;&lt;br /&gt;
 };&lt;br /&gt;
 typedef struct ressource Ressource;&lt;br /&gt;
&lt;br /&gt;
 struct event&lt;br /&gt;
 {&lt;br /&gt;
    int demande;&lt;br /&gt;
    int action;&lt;br /&gt;
    Ressource R;&lt;br /&gt;
 };&lt;br /&gt;
 typedef struct event Event;&lt;br /&gt;
&lt;br /&gt;
 struct process&lt;br /&gt;
 {&lt;br /&gt;
    int number;&lt;br /&gt;
    int start;&lt;br /&gt;
    int priority;&lt;br /&gt;
    int nbEvent;&lt;br /&gt;
    Event* event;&lt;br /&gt;
 };&lt;br /&gt;
 typedef struct process Process;&lt;br /&gt;
&lt;br /&gt;
Une fois celle ci définit, il a donc fallu créer un ordonnancement par tourniquet dans un premier temps, puis dans un second temps par priorité avec préemption.&lt;br /&gt;
&lt;br /&gt;
Afin de réaliser ces ordonnancement, j'ai repris les événements et les processus du Ds du 6 janvier 2017.&lt;br /&gt;
&lt;br /&gt;
Une fois cette étapes de retranscription finie il a fallu créer les fonctions utile au déroulement de l'ordonnancement : afin que celui ci se rapproche au plus près de la réalité, j'ai établie les règles suivantes : &lt;br /&gt;
         -Un temps de switch era mis en place afin qu'il existe un temps de battement entre les changements de processus&lt;br /&gt;
         -Si deux processus démarre en même temps, c'est le premier arrivé dans le programme qui s'exécutera&lt;br /&gt;
         -Un temps de switch et de quantum sera demandé au début du programme&lt;br /&gt;
&lt;br /&gt;
Pour le second, si un processus en cours, demande de prendre la main alors qu'il a une priorité égale, la demande sera rejetée.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Réponse aux questions : &lt;br /&gt;
Le quantum de temps est-il ou non prioritaire sur une opération sur une ressource qui est programmée au même instant ? &lt;br /&gt;
Dans mon programme, avant de commencer une opération qui demandera une ressource quelconque il est observé si le quantum de temps se termine. En effet si l'inverse était fait, un processus pourrait prendre un ressource sans l'utiliser. Si celle est demandé dans le future elle ne pourra pas être utilisé. Je pense donc que la priorité doit être donné au quantum et non à l'opération.&lt;br /&gt;
&lt;br /&gt;
Pour la priorité avec préemption, comment choisir entre des processus avec la même priorité ?&lt;br /&gt;
&lt;br /&gt;
Pour choisir entre deux processus ayant la même priorité, il existe plusieurs solution : soit le premier arrivé reste tant qu'il n'est pas fini, soit on compare le temps restant pour chacun d'entre eux et l'on prend celui dont le temps restant est le plus court afin de libérer au plus vite les ressources.&lt;br /&gt;
&lt;br /&gt;
== Sources ==&lt;br /&gt;
Les principales sources ont été celles données au début du rattrapage ainsi que le cours de système et de temps réel du semestre 7.&lt;br /&gt;
&lt;br /&gt;
== Documents ==&lt;/div&gt;</summary>
		<author><name>Groux</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2017/2018_EC5&amp;diff=47158</id>
		<title>IMA4 2017/2018 EC5</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2017/2018_EC5&amp;diff=47158"/>
				<updated>2018-06-12T07:05:04Z</updated>
		
		<summary type="html">&lt;p&gt;Groux : /* Sources */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Présentation du projet ==&lt;br /&gt;
&lt;br /&gt;
=== Contexte ===&lt;br /&gt;
&lt;br /&gt;
L'élève continue son semestre S8 à l'école.&lt;br /&gt;
&lt;br /&gt;
=== Objectif ===&lt;br /&gt;
&lt;br /&gt;
Il vous est demandé d'écrire un programme C permettant de simuler l'ordonnancement de processus avec gestion de ressources communes suivant les algorithmes tourniquet et priorité avec préemption.&lt;br /&gt;
&lt;br /&gt;
=== Description du projet ===&lt;br /&gt;
&lt;br /&gt;
Vous commencerez par créer les structures de données pour pouvoir décrire, dans le code C, les processus que votre ordonnanceur va devoir gérer.&lt;br /&gt;
&lt;br /&gt;
Les caractéristiques des processus à prendre en compte sont :&lt;br /&gt;
* un numéro permettant d'identifier les processus ;&lt;br /&gt;
* une date de départ du processus par rapport à une horloge globale ;&lt;br /&gt;
* les divers événements du processus par rapport à son horloge interne correspondant au temps passé en exécution :&lt;br /&gt;
** réclamation d'une ressource commune ;&lt;br /&gt;
** libération d'une ressource commune ;&lt;br /&gt;
** terminaison du processus.&lt;br /&gt;
&lt;br /&gt;
Un exemple de description de processus est donné ci-après.&lt;br /&gt;
&lt;br /&gt;
 int nb_procs=4;&lt;br /&gt;
 struct event p1_events[]={ {30,OP_CLAIM,R1}, {70,OP_RELEASE,R1}, {100,OP_STOP} };&lt;br /&gt;
 struct event p2_events[]={ {80,OP_CLAIM,R1}, {180,OP_RELEASE,R1}, {200,OP_STOP} };&lt;br /&gt;
 struct event p3_events[]={ {40,OP_CLAIM,R1}, {160,OP_RELEASE,R1}, {300,OP_STOP} };&lt;br /&gt;
 struct event p4_events[]={ {400,OP_STOP} };&lt;br /&gt;
 struct process procs[]={&lt;br /&gt;
  {.number=1,.start=150,.priority=1,.events=p1_events},&lt;br /&gt;
  {.number=2,.start=100,.priority=2,.events=p2_events},&lt;br /&gt;
  {.number=3,.start=50,.priority=3,.events=p3_events},&lt;br /&gt;
  {.number=4,.start=0,.priority=4,.events=p4_events}&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
Les caractéristiques des ressources à prendre en compte sont :&lt;br /&gt;
* un numéro permettant d'identifier les ressources ;&lt;br /&gt;
* le nombre d'occurrences de la ressource disponibles.&lt;br /&gt;
&lt;br /&gt;
Pour simuler les deux algorithmes d'ordonnancement, vous utiliserez un algorithme &amp;quot;intelligent&amp;quot; :&lt;br /&gt;
* faites partir le temps de zéro puis rentrez dans une boucle infinie où le temps saute directement à l'événement suivant (arrivé d'un processus, événement pour le processus courant, fin du quantum de temps, etc) ;&lt;br /&gt;
* voyez si un nouvel événement se traduit par un changement d'état du processus courant et l'activation d'un autre processus ;&lt;br /&gt;
* si tous les processus sont terminés, sortez de la boucle.&lt;br /&gt;
&lt;br /&gt;
A chaque événement imprimez un code permettant de suivre l'exécution :&lt;br /&gt;
* pour la réclamation ou la libération d'une ressource affichez le temps global, le caractére &amp;lt;code&amp;gt;R&amp;lt;/code&amp;gt; comme ressource, son numéro et &amp;lt;code&amp;gt;+&amp;lt;/code&amp;gt; ou &amp;lt;code&amp;gt;-&amp;lt;/code&amp;gt; suivant qu'il s'agit d'une réclamation ou d'une libération ;&lt;br /&gt;
* pour le changement d'état d'un processus, affichez le temps global, le caractére &amp;lt;code&amp;gt;P&amp;lt;/code&amp;gt; comme processus, son numéro et &amp;lt;code&amp;gt;[&amp;lt;/code&amp;gt; ou &amp;lt;code&amp;gt;]&amp;lt;/code&amp;gt; suivant qu'il s'agit de l'activation ou de la mise en sommeil du processus.&lt;br /&gt;
&lt;br /&gt;
Pour chaque simulation lancez les deux algorithmes d'ordonnancement. Vérifiez votre programme avec les différents exercices d'ordonnancement des DS de système des années passées.&lt;br /&gt;
&lt;br /&gt;
Une fois le programme fonctionnel étudiez les différentes variantes possibles pour les deux algorithmes. Par exemple pour le tourniquet, le quantum de temps est-il ou non prioritaire sur une opération sur une ressource qui est programmée au même instant ? Par exemple pour la priorité avec préemption, comment choisir entre des processus avec la même priorité ?&lt;br /&gt;
&lt;br /&gt;
=== Planning prévisionnel ===&lt;br /&gt;
&lt;br /&gt;
== Travail effectué ==&lt;br /&gt;
Le début de travail à été de créer les différentes structures afin de pouvoir construire l'ordonnancement.&lt;br /&gt;
&lt;br /&gt;
On a pu différencier 3 structures différentes : Celle de la ressource, celle du processus et celle d'un événement.&lt;br /&gt;
&lt;br /&gt;
Les structures sont les suivantes : &lt;br /&gt;
&lt;br /&gt;
 struct ressource&lt;br /&gt;
 {&lt;br /&gt;
    int num_ressource;&lt;br /&gt;
    int nb_occurence;&lt;br /&gt;
 };&lt;br /&gt;
 typedef struct ressource Ressource;&lt;br /&gt;
&lt;br /&gt;
 struct event&lt;br /&gt;
 {&lt;br /&gt;
    int demande;&lt;br /&gt;
    int action;&lt;br /&gt;
    Ressource R;&lt;br /&gt;
 };&lt;br /&gt;
 typedef struct event Event;&lt;br /&gt;
&lt;br /&gt;
 struct process&lt;br /&gt;
 {&lt;br /&gt;
    int number;&lt;br /&gt;
    int start;&lt;br /&gt;
    int priority;&lt;br /&gt;
    int nbEvent;&lt;br /&gt;
    Event* event;&lt;br /&gt;
 };&lt;br /&gt;
 typedef struct process Process;&lt;br /&gt;
&lt;br /&gt;
Une fois celle ci définit, il a donc fallu créer un ordonnancement par tourniquet dans un premier temps, puis dans un second temps par priorité avec préemption.&lt;br /&gt;
&lt;br /&gt;
Afin de réaliser ces ordonnancement, j'ai repris les événements et les processus du Ds du 6 janvier 2017.&lt;br /&gt;
&lt;br /&gt;
Une fois cette étapes de retranscription finie il a fallu créer les fonctions utile au déroulement de l'ordonnancement : afin que celui ci se rapproche au plus près de la réalité, j'ai établie les règles suivantes : &lt;br /&gt;
         -Un temps de switch era mis en place afin qu'il existe un temps de battement entre les changements de processus&lt;br /&gt;
         -Si deux processus démarre en même temps, c'est le premier arrivé dans le programme qui s'exécutera&lt;br /&gt;
         -Un temps de switch et de quantum sera demandé au début du programme&lt;br /&gt;
&lt;br /&gt;
Pour le second, si un processus en cours, demande de prendre la main alors qu'il a une priorité égale, la demande sera rejetée.&lt;br /&gt;
&lt;br /&gt;
== Sources ==&lt;br /&gt;
Les principales sources ont été celles données au début du rattrapage ainsi que le cours de système et de temps réel du semestre 7.&lt;br /&gt;
&lt;br /&gt;
== Documents ==&lt;/div&gt;</summary>
		<author><name>Groux</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2017/2018_EC5&amp;diff=47157</id>
		<title>IMA4 2017/2018 EC5</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2017/2018_EC5&amp;diff=47157"/>
				<updated>2018-06-12T07:03:48Z</updated>
		
		<summary type="html">&lt;p&gt;Groux : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Présentation du projet ==&lt;br /&gt;
&lt;br /&gt;
=== Contexte ===&lt;br /&gt;
&lt;br /&gt;
L'élève continue son semestre S8 à l'école.&lt;br /&gt;
&lt;br /&gt;
=== Objectif ===&lt;br /&gt;
&lt;br /&gt;
Il vous est demandé d'écrire un programme C permettant de simuler l'ordonnancement de processus avec gestion de ressources communes suivant les algorithmes tourniquet et priorité avec préemption.&lt;br /&gt;
&lt;br /&gt;
=== Description du projet ===&lt;br /&gt;
&lt;br /&gt;
Vous commencerez par créer les structures de données pour pouvoir décrire, dans le code C, les processus que votre ordonnanceur va devoir gérer.&lt;br /&gt;
&lt;br /&gt;
Les caractéristiques des processus à prendre en compte sont :&lt;br /&gt;
* un numéro permettant d'identifier les processus ;&lt;br /&gt;
* une date de départ du processus par rapport à une horloge globale ;&lt;br /&gt;
* les divers événements du processus par rapport à son horloge interne correspondant au temps passé en exécution :&lt;br /&gt;
** réclamation d'une ressource commune ;&lt;br /&gt;
** libération d'une ressource commune ;&lt;br /&gt;
** terminaison du processus.&lt;br /&gt;
&lt;br /&gt;
Un exemple de description de processus est donné ci-après.&lt;br /&gt;
&lt;br /&gt;
 int nb_procs=4;&lt;br /&gt;
 struct event p1_events[]={ {30,OP_CLAIM,R1}, {70,OP_RELEASE,R1}, {100,OP_STOP} };&lt;br /&gt;
 struct event p2_events[]={ {80,OP_CLAIM,R1}, {180,OP_RELEASE,R1}, {200,OP_STOP} };&lt;br /&gt;
 struct event p3_events[]={ {40,OP_CLAIM,R1}, {160,OP_RELEASE,R1}, {300,OP_STOP} };&lt;br /&gt;
 struct event p4_events[]={ {400,OP_STOP} };&lt;br /&gt;
 struct process procs[]={&lt;br /&gt;
  {.number=1,.start=150,.priority=1,.events=p1_events},&lt;br /&gt;
  {.number=2,.start=100,.priority=2,.events=p2_events},&lt;br /&gt;
  {.number=3,.start=50,.priority=3,.events=p3_events},&lt;br /&gt;
  {.number=4,.start=0,.priority=4,.events=p4_events}&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
Les caractéristiques des ressources à prendre en compte sont :&lt;br /&gt;
* un numéro permettant d'identifier les ressources ;&lt;br /&gt;
* le nombre d'occurrences de la ressource disponibles.&lt;br /&gt;
&lt;br /&gt;
Pour simuler les deux algorithmes d'ordonnancement, vous utiliserez un algorithme &amp;quot;intelligent&amp;quot; :&lt;br /&gt;
* faites partir le temps de zéro puis rentrez dans une boucle infinie où le temps saute directement à l'événement suivant (arrivé d'un processus, événement pour le processus courant, fin du quantum de temps, etc) ;&lt;br /&gt;
* voyez si un nouvel événement se traduit par un changement d'état du processus courant et l'activation d'un autre processus ;&lt;br /&gt;
* si tous les processus sont terminés, sortez de la boucle.&lt;br /&gt;
&lt;br /&gt;
A chaque événement imprimez un code permettant de suivre l'exécution :&lt;br /&gt;
* pour la réclamation ou la libération d'une ressource affichez le temps global, le caractére &amp;lt;code&amp;gt;R&amp;lt;/code&amp;gt; comme ressource, son numéro et &amp;lt;code&amp;gt;+&amp;lt;/code&amp;gt; ou &amp;lt;code&amp;gt;-&amp;lt;/code&amp;gt; suivant qu'il s'agit d'une réclamation ou d'une libération ;&lt;br /&gt;
* pour le changement d'état d'un processus, affichez le temps global, le caractére &amp;lt;code&amp;gt;P&amp;lt;/code&amp;gt; comme processus, son numéro et &amp;lt;code&amp;gt;[&amp;lt;/code&amp;gt; ou &amp;lt;code&amp;gt;]&amp;lt;/code&amp;gt; suivant qu'il s'agit de l'activation ou de la mise en sommeil du processus.&lt;br /&gt;
&lt;br /&gt;
Pour chaque simulation lancez les deux algorithmes d'ordonnancement. Vérifiez votre programme avec les différents exercices d'ordonnancement des DS de système des années passées.&lt;br /&gt;
&lt;br /&gt;
Une fois le programme fonctionnel étudiez les différentes variantes possibles pour les deux algorithmes. Par exemple pour le tourniquet, le quantum de temps est-il ou non prioritaire sur une opération sur une ressource qui est programmée au même instant ? Par exemple pour la priorité avec préemption, comment choisir entre des processus avec la même priorité ?&lt;br /&gt;
&lt;br /&gt;
=== Planning prévisionnel ===&lt;br /&gt;
&lt;br /&gt;
== Travail effectué ==&lt;br /&gt;
Le début de travail à été de créer les différentes structures afin de pouvoir construire l'ordonnancement.&lt;br /&gt;
&lt;br /&gt;
On a pu différencier 3 structures différentes : Celle de la ressource, celle du processus et celle d'un événement.&lt;br /&gt;
&lt;br /&gt;
Les structures sont les suivantes : &lt;br /&gt;
&lt;br /&gt;
 struct ressource&lt;br /&gt;
 {&lt;br /&gt;
    int num_ressource;&lt;br /&gt;
    int nb_occurence;&lt;br /&gt;
 };&lt;br /&gt;
 typedef struct ressource Ressource;&lt;br /&gt;
&lt;br /&gt;
 struct event&lt;br /&gt;
 {&lt;br /&gt;
    int demande;&lt;br /&gt;
    int action;&lt;br /&gt;
    Ressource R;&lt;br /&gt;
 };&lt;br /&gt;
 typedef struct event Event;&lt;br /&gt;
&lt;br /&gt;
 struct process&lt;br /&gt;
 {&lt;br /&gt;
    int number;&lt;br /&gt;
    int start;&lt;br /&gt;
    int priority;&lt;br /&gt;
    int nbEvent;&lt;br /&gt;
    Event* event;&lt;br /&gt;
 };&lt;br /&gt;
 typedef struct process Process;&lt;br /&gt;
&lt;br /&gt;
Une fois celle ci définit, il a donc fallu créer un ordonnancement par tourniquet dans un premier temps, puis dans un second temps par priorité avec préemption.&lt;br /&gt;
&lt;br /&gt;
Afin de réaliser ces ordonnancement, j'ai repris les événements et les processus du Ds du 6 janvier 2017.&lt;br /&gt;
&lt;br /&gt;
Une fois cette étapes de retranscription finie il a fallu créer les fonctions utile au déroulement de l'ordonnancement : afin que celui ci se rapproche au plus près de la réalité, j'ai établie les règles suivantes : &lt;br /&gt;
         -Un temps de switch era mis en place afin qu'il existe un temps de battement entre les changements de processus&lt;br /&gt;
         -Si deux processus démarre en même temps, c'est le premier arrivé dans le programme qui s'exécutera&lt;br /&gt;
         -Un temps de switch et de quantum sera demandé au début du programme&lt;br /&gt;
&lt;br /&gt;
Pour le second, si un processus en cours, demande de prendre la main alors qu'il a une priorité égale, la demande sera rejetée.&lt;br /&gt;
&lt;br /&gt;
== Sources == &lt;br /&gt;
&lt;br /&gt;
== Documents ==&lt;/div&gt;</summary>
		<author><name>Groux</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2017/2018_EC5&amp;diff=47156</id>
		<title>IMA4 2017/2018 EC5</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2017/2018_EC5&amp;diff=47156"/>
				<updated>2018-06-12T06:56:58Z</updated>
		
		<summary type="html">&lt;p&gt;Groux : /* Travail effectué */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Présentation du projet ==&lt;br /&gt;
&lt;br /&gt;
=== Contexte ===&lt;br /&gt;
&lt;br /&gt;
L'élève continue son semestre S8 à l'école.&lt;br /&gt;
&lt;br /&gt;
=== Objectif ===&lt;br /&gt;
&lt;br /&gt;
Il vous est demandé d'écrire un programme C permettant de simuler l'ordonnancement de processus avec gestion de ressources communes suivant les algorithmes tourniquet et priorité avec préemption.&lt;br /&gt;
&lt;br /&gt;
=== Description du projet ===&lt;br /&gt;
&lt;br /&gt;
Vous commencerez par créer les structures de données pour pouvoir décrire, dans le code C, les processus que votre ordonnanceur va devoir gérer.&lt;br /&gt;
&lt;br /&gt;
Les caractéristiques des processus à prendre en compte sont :&lt;br /&gt;
* un numéro permettant d'identifier les processus ;&lt;br /&gt;
* une date de départ du processus par rapport à une horloge globale ;&lt;br /&gt;
* les divers événements du processus par rapport à son horloge interne correspondant au temps passé en exécution :&lt;br /&gt;
** réclamation d'une ressource commune ;&lt;br /&gt;
** libération d'une ressource commune ;&lt;br /&gt;
** terminaison du processus.&lt;br /&gt;
&lt;br /&gt;
Un exemple de description de processus est donné ci-après.&lt;br /&gt;
&lt;br /&gt;
 int nb_procs=4;&lt;br /&gt;
 struct event p1_events[]={ {30,OP_CLAIM,R1}, {70,OP_RELEASE,R1}, {100,OP_STOP} };&lt;br /&gt;
 struct event p2_events[]={ {80,OP_CLAIM,R1}, {180,OP_RELEASE,R1}, {200,OP_STOP} };&lt;br /&gt;
 struct event p3_events[]={ {40,OP_CLAIM,R1}, {160,OP_RELEASE,R1}, {300,OP_STOP} };&lt;br /&gt;
 struct event p4_events[]={ {400,OP_STOP} };&lt;br /&gt;
 struct process procs[]={&lt;br /&gt;
  {.number=1,.start=150,.priority=1,.events=p1_events},&lt;br /&gt;
  {.number=2,.start=100,.priority=2,.events=p2_events},&lt;br /&gt;
  {.number=3,.start=50,.priority=3,.events=p3_events},&lt;br /&gt;
  {.number=4,.start=0,.priority=4,.events=p4_events}&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
Les caractéristiques des ressources à prendre en compte sont :&lt;br /&gt;
* un numéro permettant d'identifier les ressources ;&lt;br /&gt;
* le nombre d'occurrences de la ressource disponibles.&lt;br /&gt;
&lt;br /&gt;
Pour simuler les deux algorithmes d'ordonnancement, vous utiliserez un algorithme &amp;quot;intelligent&amp;quot; :&lt;br /&gt;
* faites partir le temps de zéro puis rentrez dans une boucle infinie où le temps saute directement à l'événement suivant (arrivé d'un processus, événement pour le processus courant, fin du quantum de temps, etc) ;&lt;br /&gt;
* voyez si un nouvel événement se traduit par un changement d'état du processus courant et l'activation d'un autre processus ;&lt;br /&gt;
* si tous les processus sont terminés, sortez de la boucle.&lt;br /&gt;
&lt;br /&gt;
A chaque événement imprimez un code permettant de suivre l'exécution :&lt;br /&gt;
* pour la réclamation ou la libération d'une ressource affichez le temps global, le caractére &amp;lt;code&amp;gt;R&amp;lt;/code&amp;gt; comme ressource, son numéro et &amp;lt;code&amp;gt;+&amp;lt;/code&amp;gt; ou &amp;lt;code&amp;gt;-&amp;lt;/code&amp;gt; suivant qu'il s'agit d'une réclamation ou d'une libération ;&lt;br /&gt;
* pour le changement d'état d'un processus, affichez le temps global, le caractére &amp;lt;code&amp;gt;P&amp;lt;/code&amp;gt; comme processus, son numéro et &amp;lt;code&amp;gt;[&amp;lt;/code&amp;gt; ou &amp;lt;code&amp;gt;]&amp;lt;/code&amp;gt; suivant qu'il s'agit de l'activation ou de la mise en sommeil du processus.&lt;br /&gt;
&lt;br /&gt;
Pour chaque simulation lancez les deux algorithmes d'ordonnancement. Vérifiez votre programme avec les différents exercices d'ordonnancement des DS de système des années passées.&lt;br /&gt;
&lt;br /&gt;
Une fois le programme fonctionnel étudiez les différentes variantes possibles pour les deux algorithmes. Par exemple pour le tourniquet, le quantum de temps est-il ou non prioritaire sur une opération sur une ressource qui est programmée au même instant ? Par exemple pour la priorité avec préemption, comment choisir entre des processus avec la même priorité ?&lt;br /&gt;
&lt;br /&gt;
=== Planning prévisionnel ===&lt;br /&gt;
&lt;br /&gt;
== Travail effectué ==&lt;br /&gt;
Le début de travail à été de créer les différentes structures afin de pouvoir construire l'ordonnancement.&lt;br /&gt;
&lt;br /&gt;
On a pu différencier 3 structures différentes : Celle de la ressource, celle du processus et celle d'un événement.&lt;br /&gt;
&lt;br /&gt;
Les structures sont les suivantes : &lt;br /&gt;
&lt;br /&gt;
 struct ressource&lt;br /&gt;
 {&lt;br /&gt;
    int num_ressource;&lt;br /&gt;
    int nb_occurence;&lt;br /&gt;
 };&lt;br /&gt;
 typedef struct ressource Ressource;&lt;br /&gt;
&lt;br /&gt;
 struct event&lt;br /&gt;
 {&lt;br /&gt;
    int demande;&lt;br /&gt;
    int action;&lt;br /&gt;
    Ressource R;&lt;br /&gt;
 };&lt;br /&gt;
 typedef struct event Event;&lt;br /&gt;
&lt;br /&gt;
 struct process&lt;br /&gt;
 {&lt;br /&gt;
    int number;&lt;br /&gt;
    int start;&lt;br /&gt;
    int priority;&lt;br /&gt;
    int nbEvent;&lt;br /&gt;
    Event* event;&lt;br /&gt;
 };&lt;br /&gt;
 typedef struct process Process;&lt;br /&gt;
&lt;br /&gt;
Une fois celle ci définit, il a donc fallu créer un ordonnancement par tourniquet dans un premier temps, puis dans un second temps par priorité avec préemption.&lt;br /&gt;
&lt;br /&gt;
Afin de réaliser ces ordonnancement, j'ai repris les evenements et les processus du Ds du 6 janvier 2017.&lt;br /&gt;
&lt;br /&gt;
== Sources == &lt;br /&gt;
&lt;br /&gt;
== Documents ==&lt;/div&gt;</summary>
		<author><name>Groux</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2017/2018_EC5&amp;diff=47155</id>
		<title>IMA4 2017/2018 EC5</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2017/2018_EC5&amp;diff=47155"/>
				<updated>2018-06-12T06:37:01Z</updated>
		
		<summary type="html">&lt;p&gt;Groux : /* Travail effectué */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Présentation du projet ==&lt;br /&gt;
&lt;br /&gt;
=== Contexte ===&lt;br /&gt;
&lt;br /&gt;
L'élève continue son semestre S8 à l'école.&lt;br /&gt;
&lt;br /&gt;
=== Objectif ===&lt;br /&gt;
&lt;br /&gt;
Il vous est demandé d'écrire un programme C permettant de simuler l'ordonnancement de processus avec gestion de ressources communes suivant les algorithmes tourniquet et priorité avec préemption.&lt;br /&gt;
&lt;br /&gt;
=== Description du projet ===&lt;br /&gt;
&lt;br /&gt;
Vous commencerez par créer les structures de données pour pouvoir décrire, dans le code C, les processus que votre ordonnanceur va devoir gérer.&lt;br /&gt;
&lt;br /&gt;
Les caractéristiques des processus à prendre en compte sont :&lt;br /&gt;
* un numéro permettant d'identifier les processus ;&lt;br /&gt;
* une date de départ du processus par rapport à une horloge globale ;&lt;br /&gt;
* les divers événements du processus par rapport à son horloge interne correspondant au temps passé en exécution :&lt;br /&gt;
** réclamation d'une ressource commune ;&lt;br /&gt;
** libération d'une ressource commune ;&lt;br /&gt;
** terminaison du processus.&lt;br /&gt;
&lt;br /&gt;
Un exemple de description de processus est donné ci-après.&lt;br /&gt;
&lt;br /&gt;
 int nb_procs=4;&lt;br /&gt;
 struct event p1_events[]={ {30,OP_CLAIM,R1}, {70,OP_RELEASE,R1}, {100,OP_STOP} };&lt;br /&gt;
 struct event p2_events[]={ {80,OP_CLAIM,R1}, {180,OP_RELEASE,R1}, {200,OP_STOP} };&lt;br /&gt;
 struct event p3_events[]={ {40,OP_CLAIM,R1}, {160,OP_RELEASE,R1}, {300,OP_STOP} };&lt;br /&gt;
 struct event p4_events[]={ {400,OP_STOP} };&lt;br /&gt;
 struct process procs[]={&lt;br /&gt;
  {.number=1,.start=150,.priority=1,.events=p1_events},&lt;br /&gt;
  {.number=2,.start=100,.priority=2,.events=p2_events},&lt;br /&gt;
  {.number=3,.start=50,.priority=3,.events=p3_events},&lt;br /&gt;
  {.number=4,.start=0,.priority=4,.events=p4_events}&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
Les caractéristiques des ressources à prendre en compte sont :&lt;br /&gt;
* un numéro permettant d'identifier les ressources ;&lt;br /&gt;
* le nombre d'occurrences de la ressource disponibles.&lt;br /&gt;
&lt;br /&gt;
Pour simuler les deux algorithmes d'ordonnancement, vous utiliserez un algorithme &amp;quot;intelligent&amp;quot; :&lt;br /&gt;
* faites partir le temps de zéro puis rentrez dans une boucle infinie où le temps saute directement à l'événement suivant (arrivé d'un processus, événement pour le processus courant, fin du quantum de temps, etc) ;&lt;br /&gt;
* voyez si un nouvel événement se traduit par un changement d'état du processus courant et l'activation d'un autre processus ;&lt;br /&gt;
* si tous les processus sont terminés, sortez de la boucle.&lt;br /&gt;
&lt;br /&gt;
A chaque événement imprimez un code permettant de suivre l'exécution :&lt;br /&gt;
* pour la réclamation ou la libération d'une ressource affichez le temps global, le caractére &amp;lt;code&amp;gt;R&amp;lt;/code&amp;gt; comme ressource, son numéro et &amp;lt;code&amp;gt;+&amp;lt;/code&amp;gt; ou &amp;lt;code&amp;gt;-&amp;lt;/code&amp;gt; suivant qu'il s'agit d'une réclamation ou d'une libération ;&lt;br /&gt;
* pour le changement d'état d'un processus, affichez le temps global, le caractére &amp;lt;code&amp;gt;P&amp;lt;/code&amp;gt; comme processus, son numéro et &amp;lt;code&amp;gt;[&amp;lt;/code&amp;gt; ou &amp;lt;code&amp;gt;]&amp;lt;/code&amp;gt; suivant qu'il s'agit de l'activation ou de la mise en sommeil du processus.&lt;br /&gt;
&lt;br /&gt;
Pour chaque simulation lancez les deux algorithmes d'ordonnancement. Vérifiez votre programme avec les différents exercices d'ordonnancement des DS de système des années passées.&lt;br /&gt;
&lt;br /&gt;
Une fois le programme fonctionnel étudiez les différentes variantes possibles pour les deux algorithmes. Par exemple pour le tourniquet, le quantum de temps est-il ou non prioritaire sur une opération sur une ressource qui est programmée au même instant ? Par exemple pour la priorité avec préemption, comment choisir entre des processus avec la même priorité ?&lt;br /&gt;
&lt;br /&gt;
=== Planning prévisionnel ===&lt;br /&gt;
&lt;br /&gt;
== Travail effectué ==&lt;br /&gt;
Le début de travail à été de créer les différentes structures afin de pouvoir construire l'ordonnancement.&lt;br /&gt;
&lt;br /&gt;
On a pu différencier 3 structures différentes : Celle de la ressource, celle du processus et celle d'un événement.&lt;br /&gt;
&lt;br /&gt;
Les structures sont les suivantes : &lt;br /&gt;
&lt;br /&gt;
 struct ressource&lt;br /&gt;
 {&lt;br /&gt;
    int num_ressource;&lt;br /&gt;
    int nb_occurence;&lt;br /&gt;
 };&lt;br /&gt;
 typedef struct ressource Ressource;&lt;br /&gt;
&lt;br /&gt;
 struct event&lt;br /&gt;
 {&lt;br /&gt;
    int demande;&lt;br /&gt;
    int action;&lt;br /&gt;
    Ressource R;&lt;br /&gt;
 };&lt;br /&gt;
 typedef struct event Event;&lt;br /&gt;
&lt;br /&gt;
 struct process&lt;br /&gt;
 {&lt;br /&gt;
    int number;&lt;br /&gt;
    int start;&lt;br /&gt;
    int priority;&lt;br /&gt;
    int nbEvent;&lt;br /&gt;
    Event* event;&lt;br /&gt;
 };&lt;br /&gt;
 typedef struct process Process;&lt;br /&gt;
&lt;br /&gt;
Une fois celle ci définit, il a donc fallu créer un ordonnancement avec quantum dans un premier temps, puis dans un second temps avec péremption et priorité.&lt;br /&gt;
&lt;br /&gt;
== Sources == &lt;br /&gt;
&lt;br /&gt;
== Documents ==&lt;/div&gt;</summary>
		<author><name>Groux</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Projet_IMA3_P7,_2016/2017,_TD2&amp;diff=44225</id>
		<title>Projet IMA3 P7, 2016/2017, TD2</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Projet_IMA3_P7,_2016/2017,_TD2&amp;diff=44225"/>
				<updated>2017-06-18T14:53:21Z</updated>
		
		<summary type="html">&lt;p&gt;Groux : /* Conclusion */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Projet IMA3-SC 2016/2017 : Station météo connectée =&lt;br /&gt;
&lt;br /&gt;
== Cahier des charges ==&lt;br /&gt;
&lt;br /&gt;
Pour notre projet Système Communicant, nous avons choisi de réaliser une station météo qui pourrait mesurer la température, l'humidité et la pression atmosphérique. Nous pourrions songer également à relever la luminosité, la quantité de précipitation etc mais il faut rester vigilent au nombre de pins de l'Arduino. Grâce à celui-ci, nous pourrons réaliser une application web qui afficherait en détails les grandeurs mesurées.&lt;br /&gt;
&lt;br /&gt;
'''=== Le matériel ==='''&lt;br /&gt;
&lt;br /&gt;
*Un capteur de pression (type BMP180)      &lt;br /&gt;
*Un capteur d'humidité (A0SONG AM2302)     &lt;br /&gt;
*Un capteur de température&lt;br /&gt;
*Un Raspberry Pi&lt;br /&gt;
*Une alimentation &lt;br /&gt;
*Un Arduino                                &lt;br /&gt;
*Une nanoboard                             &lt;br /&gt;
*Plaque d'essais                           &lt;br /&gt;
*Fils&lt;br /&gt;
&lt;br /&gt;
== Séance 1 ==&lt;br /&gt;
&lt;br /&gt;
=== Partie électronique ===&lt;br /&gt;
&lt;br /&gt;
Pour le capteur AM2302, on constate que la broche de sortie SDA est une broche complexe et bidirectionnelle.&lt;br /&gt;
On souhaite, grâce au FPGA, lire les informations envoyées par le capteur AM2302 toutes les n secondes.&lt;br /&gt;
Pour lire une mesure, il faut envoyer un front descendant sur SDA, puis le capteur envoie 5 octets :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:AM2302.jpeg]]&lt;br /&gt;
&lt;br /&gt;
Pour pouvoir gérer la bidirectionnalité de la broche SDA, on utilisera un composant spécifique de Altium : le IOBUF&lt;br /&gt;
&lt;br /&gt;
Voici les caractéristiques sensorielles du capteur de température et d'humidité&lt;br /&gt;
&lt;br /&gt;
[[Fichier:AM2302_sensor.jpeg]]&lt;br /&gt;
&lt;br /&gt;
=== Partie informatique ===&lt;br /&gt;
&lt;br /&gt;
Pour la programmation, nous avons décidé de ne pas utiliser la carte arduino mais plutôt un circuit logique programmable (puce FPGA). Cette puce servira à collecter les informations envoyées par les différents capteurs et les convertir en valeurs numériques pour pouvoir les afficher sur notre application web.&lt;br /&gt;
&lt;br /&gt;
== Séance 2 ==&lt;br /&gt;
&lt;br /&gt;
=== Partie électronique ===&lt;br /&gt;
&lt;br /&gt;
Etude de la transmission d’informations avec la sonde AM2302 :&lt;br /&gt;
Attendre la détection d’un front descendant (entre 0,8 et 20 ms) envoyé par l’utilisateur.&lt;br /&gt;
On reçoit ensuit un signal haut nommé Tgo qui correspond à la libération du bus de données compris entre 20 et 200 us&lt;br /&gt;
On recoit une réponse du signal bas et une réponse du signal haut compris tous les duex entre 75 et 85 µs&lt;br /&gt;
Ensuite, la transmission des 40 caractères de données commence. Pour chaque bit, le capteur envoie un signal bas puis un signal haut. Pour envoyer un 0 ou un 1, le temps du signal bas (TLOW) ne varie pas. C’est donc grâce au temps de signal haut que l’on va distinguer la reception d’un « 0 » ou d’un « 1 » &lt;br /&gt;
Pour compter le temps de signal haut et savoir si le capteur nous a envoyé un 1 ou un 0, il faut détecter le front montant, lancer un compteur toutes les 1 µs puis détecter  un front descendant pour arrêter le compteur. Si 48 &amp;lt; compteur &amp;lt; 55 µs, alors le capteur nous a envoyé un « 0 » Si 22 &amp;lt; compteur &amp;lt; 30 µs, alors le capteur nous a envoyé un « 1 »&lt;br /&gt;
Après avoir envoyé 40 bits de données à traiter, le capteur envoie un dernier signal bas compris entre 45 et 55 µs pour indiquer que la transmission est terminée&lt;br /&gt;
&lt;br /&gt;
[[Fichier:capture1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:capture2roux.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  [[Fichier:capture3.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:capture4.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Grâce à ce compteur, nous stockons chaque bit reçu grâce à des bascules D. Une fois les 5 octets de données récupérées, il suffit d’effectuer quelques opérations mathématiques pour récupérer les valeurs décimales du pourcentage d’Humidité et de la température.&lt;br /&gt;
Voici à quoi correspondent les 5 octets reçus :&lt;br /&gt;
Le temps maximum de réception est (55 + 75 µs) x 8 x 5 = 5,2 ms. C’est l’intervalle de temps minimum avec lequel on peut récupérer une nouvelle valeur de température et d’humidité. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:capture5.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour vérifier que les informations reçues sont correctes, on additionne les 4 premiers octets (HH + HL + TH + TL). Si cette somme est égale au dernier octet (Parity bit), alors la transmission est correcte.&lt;br /&gt;
Pour avoir la valeur décimale de l’hygrométrie (en %), on converti en décimal les deux octets HH et HL puis on divise cette valeur par 10. &lt;br /&gt;
On applique les mêmes manipulations pour la température en °C.&lt;br /&gt;
Exemple : 40 bits recus :&lt;br /&gt;
0000 0010	1001 0010	0000 0001	0000 1101	1010 0010 High Humidity	Low Humidity            High Temperature      Low Temperature	     Parity bit&lt;br /&gt;
Calculs :&lt;br /&gt;
0000 0010 + 1001 0010 + 0000 0001 + 0000 1101 = 1010 0010 Ici, cette égalité est vraie, donc la transmission est correcte.&lt;br /&gt;
Humidité : 	0000 0010	1001 0010 = 0292H = 2 x 256 + 9x16 + 2 = 658	 On divise cette valeur décimale par 10  Humidité = 65,8%RH&lt;br /&gt;
Température : 	0000 0001	0000 1101 = 010DH = 1 x 256 + 0 x x16 + 13 = 269 On divise cette valeur décimale par 10  Température = 26,9°C&lt;br /&gt;
&lt;br /&gt;
=== Partie informatique ===&lt;br /&gt;
Lors de cette deuxième séance nous nous sommes intéressé au programme arduino de nos deux capteurs : Le BMP180 et la sonde DHT22&lt;br /&gt;
&lt;br /&gt;
Voici donc leur code arduino :&lt;br /&gt;
BMP180 (on télécharge la librairie Adafruit_BMP085 préalablement)&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;Wire.h&amp;gt;&lt;br /&gt;
#include &amp;lt;Adafruit_BMP085.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Adafruit_BMP085 bmp;&lt;br /&gt;
  &lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin(9600);&lt;br /&gt;
  if (!bmp.begin()) {&lt;br /&gt;
    Serial.println(&amp;quot;Could not find a valid BMP085 sensor, check wiring!&amp;quot;);&lt;br /&gt;
    while (1) {}&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
  &lt;br /&gt;
void loop() {&lt;br /&gt;
    Serial.print(&amp;quot;Temperature = &amp;quot;);&lt;br /&gt;
    Serial.print(bmp.readTemperature());&lt;br /&gt;
    Serial.println(&amp;quot; *C&amp;quot;);  &lt;br /&gt;
    Serial.print(&amp;quot;Pressure = &amp;quot;);&lt;br /&gt;
    Serial.print(bmp.readPressure());&lt;br /&gt;
    Serial.println(&amp;quot; Pa&amp;quot;);&lt;br /&gt;
    &lt;br /&gt;
    // Calculate altitude assuming 'standard' barometric&lt;br /&gt;
    // pressure of 1013.25 millibar = 101325 Pascal&lt;br /&gt;
    Serial.print(&amp;quot;Altitude = &amp;quot;);&lt;br /&gt;
    Serial.print(bmp.readAltitude());&lt;br /&gt;
    Serial.println(&amp;quot; meters&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    Serial.print(&amp;quot;Real altitude = &amp;quot;);&lt;br /&gt;
    Serial.print(bmp.readAltitude(101500));&lt;br /&gt;
    Serial.println(&amp;quot; meters&amp;quot;);&lt;br /&gt;
    &lt;br /&gt;
    Serial.println();&lt;br /&gt;
    delay(500);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
''Pour le DHT22''&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
#include &amp;quot;DHT.h&amp;quot;&lt;br /&gt;
#define DHTPIN 2     &lt;br /&gt;
#define DHTTYPE DHT22  &lt;br /&gt;
DHT dht(DHTPIN, DHTTYPE);&lt;br /&gt;
&lt;br /&gt;
void setup()&lt;br /&gt;
 {&lt;br /&gt;
  Serial.begin(9600); &lt;br /&gt;
  Serial.println(&amp;quot;DHTxx test!&amp;quot;);&lt;br /&gt;
  dht.begin();&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
void loop() {&lt;br /&gt;
  float h = dht.readHumidity();&lt;br /&gt;
  float t = dht.readTemperature();&lt;br /&gt;
  if (isnan(t) || isnan(h)) {&lt;br /&gt;
  Serial.println(&amp;quot;Failed to read from DHT&amp;quot;);&lt;br /&gt;
  } &lt;br /&gt;
else {&lt;br /&gt;
    Serial.print(&amp;quot;Humidity: &amp;quot;); &lt;br /&gt;
    Serial.print(h);&lt;br /&gt;
    Serial.print(&amp;quot; %\t&amp;quot;);&lt;br /&gt;
    Serial.print(&amp;quot;Temperature: &amp;quot;); &lt;br /&gt;
    Serial.print(t);&lt;br /&gt;
    Serial.println(&amp;quot; *C&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
== Séance 3 ==&lt;br /&gt;
&lt;br /&gt;
=== Partie électronique ===&lt;br /&gt;
Lors de la troisième séance nous avons décider de créer la partie FPGA de notre système.&lt;br /&gt;
Après avoir réaliser le tutoriel proposé nous avons essayé de comprendre la façon dont fonctionne nos capteurs afin de réaliser au mieux l'interface FPGA afin de réussir a lire les informations envoyé par les capteurs.&lt;br /&gt;
Malgré de nombreux essais et de nombreuse recherche sur internet nous n'avons pas réussi a aboutir a un sytème concret afin de lire les information.&lt;br /&gt;
&lt;br /&gt;
Voici les différent lien qui nous nt aidé dans la réalisation de notre projet :&lt;br /&gt;
&lt;br /&gt;
[https://cdn.sparkfun.com/datasheets/Sensors/Pressure/BMP180%20breakout.pdf BMP180]&lt;br /&gt;
[https://cdn.sparkfun.com/datasheets/Sensors/Pressure/BMP180.pdf Datasheet BMP180]&lt;br /&gt;
&lt;br /&gt;
Et pour le DHT22 nous avons trouvé ce model : &lt;br /&gt;
[[Fichier:DHT22.png]]&lt;br /&gt;
&lt;br /&gt;
=== Partie informatique ===&lt;br /&gt;
Pour cette partie informatique nous avons suivi quelque tutoriel afin de créer une page HTML qui nous servira d'application WEB. &lt;br /&gt;
Voici le code HTML : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
	&amp;lt;meta charset=&amp;quot;UTF-8&amp;quot;&amp;gt; &lt;br /&gt;
	&amp;lt;title&amp;gt;Station météo&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
	&amp;lt;div id=&amp;quot;corps&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;h1&amp;gt;Station météo&amp;lt;/h1&amp;gt;&lt;br /&gt;
		&amp;lt;h2&amp;gt;Roux-Mairesse&amp;lt;/h2&amp;gt;&lt;br /&gt;
		&amp;lt;p&amp;gt;Bienvenue sur notre station météo connectée&amp;lt;/p&amp;gt;&lt;br /&gt;
		&amp;lt;div id=&amp;quot;relevesMeteo&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;button onclick=&amp;quot;requeteEnvoi();&amp;quot;&amp;gt;Affichage des données&amp;lt;/button&amp;gt;&lt;br /&gt;
		&amp;lt;table&amp;gt;&lt;br /&gt;
			&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;th&amp;gt;Température DHT122&amp;lt;/th&amp;gt;&lt;br /&gt;
		&amp;lt;th&amp;gt;Température BMP180&amp;lt;/th&amp;gt;&lt;br /&gt;
		&amp;lt;th&amp;gt;Humidité&amp;lt;/th&amp;gt;&lt;br /&gt;
	        &amp;lt;th&amp;gt;Pression&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;td class=&amp;quot;temperature DHT122&amp;quot;&amp;gt;0 °C&amp;lt;/td&amp;gt;&lt;br /&gt;
			&amp;lt;td class=&amp;quot;temperature BMP180&amp;quot;&amp;gt;0 °C&amp;lt;/td&amp;gt;&lt;br /&gt;
			&amp;lt;td class=&amp;quot;humidite&amp;quot;&amp;gt;0 %&amp;lt;/td&amp;gt;&lt;br /&gt;
			&amp;lt;td class=&amp;quot;pression&amp;quot;&amp;gt;0 hPa&amp;lt;/td&amp;gt;&lt;br /&gt;
			&amp;lt;/tr&amp;gt;&lt;br /&gt;
	&amp;lt;/table&amp;gt;&lt;br /&gt;
	&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;	&lt;br /&gt;
&amp;lt;/html&amp;gt; &lt;br /&gt;
&lt;br /&gt;
[[Fichier:web2.png]]&lt;br /&gt;
&lt;br /&gt;
Cependant, après avoir réaliser cette partie nous ne savons pas comment obtenir les information des capteurs obtenu par arduino et les envoyer sur notre page web...&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
Pour conclure, ce projet n'est pas une grande réussite... Nous avons passé beaucoup de temps a essayer de comprendre le fonctionnement du FPGA afin de ne pas utiliser d'arduino comme on nous l'avais demandé. &lt;br /&gt;
La plus grosse Partei manquante du projet est la liaison entre l'application web et l'arduino. A ce jour, malgré les recherches et les séance de projet, nous manquons de compétences nécessaires a la bonne réalisation de notre projet. &lt;br /&gt;
Cependant, nous avons pu approcher la filière sc grâce a ce projet et cela a pu nous montrer ce que cette filière pourra nous apporter l'année prochaine.&lt;/div&gt;</summary>
		<author><name>Groux</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Projet_IMA3_P7,_2016/2017,_TD2&amp;diff=44220</id>
		<title>Projet IMA3 P7, 2016/2017, TD2</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Projet_IMA3_P7,_2016/2017,_TD2&amp;diff=44220"/>
				<updated>2017-06-18T14:43:26Z</updated>
		
		<summary type="html">&lt;p&gt;Groux : /* Séance supplémentaire 1 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Projet IMA3-SC 2016/2017 : Station météo connectée =&lt;br /&gt;
&lt;br /&gt;
== Cahier des charges ==&lt;br /&gt;
&lt;br /&gt;
Pour notre projet Système Communicant, nous avons choisi de réaliser une station météo qui pourrait mesurer la température, l'humidité et la pression atmosphérique. Nous pourrions songer également à relever la luminosité, la quantité de précipitation etc mais il faut rester vigilent au nombre de pins de l'Arduino. Grâce à celui-ci, nous pourrons réaliser une application web qui afficherait en détails les grandeurs mesurées.&lt;br /&gt;
&lt;br /&gt;
'''=== Le matériel ==='''&lt;br /&gt;
&lt;br /&gt;
*Un capteur de pression (type BMP180)      &lt;br /&gt;
*Un capteur d'humidité (A0SONG AM2302)     &lt;br /&gt;
*Un capteur de température&lt;br /&gt;
*Un Raspberry Pi&lt;br /&gt;
*Une alimentation &lt;br /&gt;
*Un Arduino                                &lt;br /&gt;
*Une nanoboard                             &lt;br /&gt;
*Plaque d'essais                           &lt;br /&gt;
*Fils&lt;br /&gt;
&lt;br /&gt;
== Séance 1 ==&lt;br /&gt;
&lt;br /&gt;
=== Partie électronique ===&lt;br /&gt;
&lt;br /&gt;
Pour le capteur AM2302, on constate que la broche de sortie SDA est une broche complexe et bidirectionnelle.&lt;br /&gt;
On souhaite, grâce au FPGA, lire les informations envoyées par le capteur AM2302 toutes les n secondes.&lt;br /&gt;
Pour lire une mesure, il faut envoyer un front descendant sur SDA, puis le capteur envoie 5 octets :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:AM2302.jpeg]]&lt;br /&gt;
&lt;br /&gt;
Pour pouvoir gérer la bidirectionnalité de la broche SDA, on utilisera un composant spécifique de Altium : le IOBUF&lt;br /&gt;
&lt;br /&gt;
Voici les caractéristiques sensorielles du capteur de température et d'humidité&lt;br /&gt;
&lt;br /&gt;
[[Fichier:AM2302_sensor.jpeg]]&lt;br /&gt;
&lt;br /&gt;
=== Partie informatique ===&lt;br /&gt;
&lt;br /&gt;
Pour la programmation, nous avons décidé de ne pas utiliser la carte arduino mais plutôt un circuit logique programmable (puce FPGA). Cette puce servira à collecter les informations envoyées par les différents capteurs et les convertir en valeurs numériques pour pouvoir les afficher sur notre application web.&lt;br /&gt;
&lt;br /&gt;
== Séance 2 ==&lt;br /&gt;
&lt;br /&gt;
=== Partie électronique ===&lt;br /&gt;
&lt;br /&gt;
Etude de la transmission d’informations avec la sonde AM2302 :&lt;br /&gt;
Attendre la détection d’un front descendant (entre 0,8 et 20 ms) envoyé par l’utilisateur.&lt;br /&gt;
On reçoit ensuit un signal haut nommé Tgo qui correspond à la libération du bus de données compris entre 20 et 200 us&lt;br /&gt;
On recoit une réponse du signal bas et une réponse du signal haut compris tous les duex entre 75 et 85 µs&lt;br /&gt;
Ensuite, la transmission des 40 caractères de données commence. Pour chaque bit, le capteur envoie un signal bas puis un signal haut. Pour envoyer un 0 ou un 1, le temps du signal bas (TLOW) ne varie pas. C’est donc grâce au temps de signal haut que l’on va distinguer la reception d’un « 0 » ou d’un « 1 » &lt;br /&gt;
Pour compter le temps de signal haut et savoir si le capteur nous a envoyé un 1 ou un 0, il faut détecter le front montant, lancer un compteur toutes les 1 µs puis détecter  un front descendant pour arrêter le compteur. Si 48 &amp;lt; compteur &amp;lt; 55 µs, alors le capteur nous a envoyé un « 0 » Si 22 &amp;lt; compteur &amp;lt; 30 µs, alors le capteur nous a envoyé un « 1 »&lt;br /&gt;
Après avoir envoyé 40 bits de données à traiter, le capteur envoie un dernier signal bas compris entre 45 et 55 µs pour indiquer que la transmission est terminée&lt;br /&gt;
&lt;br /&gt;
[[Fichier:capture1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:capture2roux.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  [[Fichier:capture3.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:capture4.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Grâce à ce compteur, nous stockons chaque bit reçu grâce à des bascules D. Une fois les 5 octets de données récupérées, il suffit d’effectuer quelques opérations mathématiques pour récupérer les valeurs décimales du pourcentage d’Humidité et de la température.&lt;br /&gt;
Voici à quoi correspondent les 5 octets reçus :&lt;br /&gt;
Le temps maximum de réception est (55 + 75 µs) x 8 x 5 = 5,2 ms. C’est l’intervalle de temps minimum avec lequel on peut récupérer une nouvelle valeur de température et d’humidité. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:capture5.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour vérifier que les informations reçues sont correctes, on additionne les 4 premiers octets (HH + HL + TH + TL). Si cette somme est égale au dernier octet (Parity bit), alors la transmission est correcte.&lt;br /&gt;
Pour avoir la valeur décimale de l’hygrométrie (en %), on converti en décimal les deux octets HH et HL puis on divise cette valeur par 10. &lt;br /&gt;
On applique les mêmes manipulations pour la température en °C.&lt;br /&gt;
Exemple : 40 bits recus :&lt;br /&gt;
0000 0010	1001 0010	0000 0001	0000 1101	1010 0010 High Humidity	Low Humidity            High Temperature      Low Temperature	     Parity bit&lt;br /&gt;
Calculs :&lt;br /&gt;
0000 0010 + 1001 0010 + 0000 0001 + 0000 1101 = 1010 0010 Ici, cette égalité est vraie, donc la transmission est correcte.&lt;br /&gt;
Humidité : 	0000 0010	1001 0010 = 0292H = 2 x 256 + 9x16 + 2 = 658	 On divise cette valeur décimale par 10  Humidité = 65,8%RH&lt;br /&gt;
Température : 	0000 0001	0000 1101 = 010DH = 1 x 256 + 0 x x16 + 13 = 269 On divise cette valeur décimale par 10  Température = 26,9°C&lt;br /&gt;
&lt;br /&gt;
=== Partie informatique ===&lt;br /&gt;
Lors de cette deuxième séance nous nous sommes intéressé au programme arduino de nos deux capteurs : Le BMP180 et la sonde DHT22&lt;br /&gt;
&lt;br /&gt;
Voici donc leur code arduino :&lt;br /&gt;
BMP180 (on télécharge la librairie Adafruit_BMP085 préalablement)&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;Wire.h&amp;gt;&lt;br /&gt;
#include &amp;lt;Adafruit_BMP085.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Adafruit_BMP085 bmp;&lt;br /&gt;
  &lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin(9600);&lt;br /&gt;
  if (!bmp.begin()) {&lt;br /&gt;
    Serial.println(&amp;quot;Could not find a valid BMP085 sensor, check wiring!&amp;quot;);&lt;br /&gt;
    while (1) {}&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
  &lt;br /&gt;
void loop() {&lt;br /&gt;
    Serial.print(&amp;quot;Temperature = &amp;quot;);&lt;br /&gt;
    Serial.print(bmp.readTemperature());&lt;br /&gt;
    Serial.println(&amp;quot; *C&amp;quot;);  &lt;br /&gt;
    Serial.print(&amp;quot;Pressure = &amp;quot;);&lt;br /&gt;
    Serial.print(bmp.readPressure());&lt;br /&gt;
    Serial.println(&amp;quot; Pa&amp;quot;);&lt;br /&gt;
    &lt;br /&gt;
    // Calculate altitude assuming 'standard' barometric&lt;br /&gt;
    // pressure of 1013.25 millibar = 101325 Pascal&lt;br /&gt;
    Serial.print(&amp;quot;Altitude = &amp;quot;);&lt;br /&gt;
    Serial.print(bmp.readAltitude());&lt;br /&gt;
    Serial.println(&amp;quot; meters&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    Serial.print(&amp;quot;Real altitude = &amp;quot;);&lt;br /&gt;
    Serial.print(bmp.readAltitude(101500));&lt;br /&gt;
    Serial.println(&amp;quot; meters&amp;quot;);&lt;br /&gt;
    &lt;br /&gt;
    Serial.println();&lt;br /&gt;
    delay(500);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
''Pour le DHT22''&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
#include &amp;quot;DHT.h&amp;quot;&lt;br /&gt;
#define DHTPIN 2     &lt;br /&gt;
#define DHTTYPE DHT22  &lt;br /&gt;
DHT dht(DHTPIN, DHTTYPE);&lt;br /&gt;
&lt;br /&gt;
void setup()&lt;br /&gt;
 {&lt;br /&gt;
  Serial.begin(9600); &lt;br /&gt;
  Serial.println(&amp;quot;DHTxx test!&amp;quot;);&lt;br /&gt;
  dht.begin();&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
void loop() {&lt;br /&gt;
  float h = dht.readHumidity();&lt;br /&gt;
  float t = dht.readTemperature();&lt;br /&gt;
  if (isnan(t) || isnan(h)) {&lt;br /&gt;
  Serial.println(&amp;quot;Failed to read from DHT&amp;quot;);&lt;br /&gt;
  } &lt;br /&gt;
else {&lt;br /&gt;
    Serial.print(&amp;quot;Humidity: &amp;quot;); &lt;br /&gt;
    Serial.print(h);&lt;br /&gt;
    Serial.print(&amp;quot; %\t&amp;quot;);&lt;br /&gt;
    Serial.print(&amp;quot;Temperature: &amp;quot;); &lt;br /&gt;
    Serial.print(t);&lt;br /&gt;
    Serial.println(&amp;quot; *C&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
== Séance 3 ==&lt;br /&gt;
&lt;br /&gt;
=== Partie électronique ===&lt;br /&gt;
Lors de la troisième séance nous avons décider de créer la partie FPGA de notre système.&lt;br /&gt;
Après avoir réaliser le tutoriel proposé nous avons essayé de comprendre la façon dont fonctionne nos capteurs afin de réaliser au mieux l'interface FPGA afin de réussir a lire les informations envoyé par les capteurs.&lt;br /&gt;
Malgré de nombreux essais et de nombreuse recherche sur internet nous n'avons pas réussi a aboutir a un sytème concret afin de lire les information.&lt;br /&gt;
&lt;br /&gt;
Voici les différent lien qui nous nt aidé dans la réalisation de notre projet :&lt;br /&gt;
&lt;br /&gt;
[https://cdn.sparkfun.com/datasheets/Sensors/Pressure/BMP180%20breakout.pdf BMP180]&lt;br /&gt;
[https://cdn.sparkfun.com/datasheets/Sensors/Pressure/BMP180.pdf Datasheet BMP180]&lt;br /&gt;
&lt;br /&gt;
Et pour le DHT22 nous avons trouvé ce model : &lt;br /&gt;
[[Fichier:DHT22.png]]&lt;br /&gt;
&lt;br /&gt;
=== Partie informatique ===&lt;br /&gt;
Pour cette partie informatique nous avons suivi quelque tutoriel afin de créer une page HTML qui nous servira d'application WEB. &lt;br /&gt;
Voici le code HTML : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
	&amp;lt;meta charset=&amp;quot;UTF-8&amp;quot;&amp;gt; &lt;br /&gt;
	&amp;lt;title&amp;gt;Station météo&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
	&amp;lt;div id=&amp;quot;corps&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;h1&amp;gt;Station météo&amp;lt;/h1&amp;gt;&lt;br /&gt;
		&amp;lt;h2&amp;gt;Roux-Mairesse&amp;lt;/h2&amp;gt;&lt;br /&gt;
		&amp;lt;p&amp;gt;Bienvenue sur notre station météo connectée&amp;lt;/p&amp;gt;&lt;br /&gt;
		&amp;lt;div id=&amp;quot;relevesMeteo&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;button onclick=&amp;quot;requeteEnvoi();&amp;quot;&amp;gt;Affichage des données&amp;lt;/button&amp;gt;&lt;br /&gt;
		&amp;lt;table&amp;gt;&lt;br /&gt;
			&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;th&amp;gt;Température DHT122&amp;lt;/th&amp;gt;&lt;br /&gt;
		&amp;lt;th&amp;gt;Température BMP180&amp;lt;/th&amp;gt;&lt;br /&gt;
		&amp;lt;th&amp;gt;Humidité&amp;lt;/th&amp;gt;&lt;br /&gt;
	        &amp;lt;th&amp;gt;Pression&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;td class=&amp;quot;temperature DHT122&amp;quot;&amp;gt;0 °C&amp;lt;/td&amp;gt;&lt;br /&gt;
			&amp;lt;td class=&amp;quot;temperature BMP180&amp;quot;&amp;gt;0 °C&amp;lt;/td&amp;gt;&lt;br /&gt;
			&amp;lt;td class=&amp;quot;humidite&amp;quot;&amp;gt;0 %&amp;lt;/td&amp;gt;&lt;br /&gt;
			&amp;lt;td class=&amp;quot;pression&amp;quot;&amp;gt;0 hPa&amp;lt;/td&amp;gt;&lt;br /&gt;
			&amp;lt;/tr&amp;gt;&lt;br /&gt;
	&amp;lt;/table&amp;gt;&lt;br /&gt;
	&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;	&lt;br /&gt;
&amp;lt;/html&amp;gt; &lt;br /&gt;
&lt;br /&gt;
[[Fichier:web2.png]]&lt;br /&gt;
&lt;br /&gt;
Cependant, après avoir réaliser cette partie nous ne savons pas comment obtenir les information des capteurs obtenu par arduino et les envoyer sur notre page web...&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;/div&gt;</summary>
		<author><name>Groux</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Web2.png&amp;diff=44216</id>
		<title>Fichier:Web2.png</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Web2.png&amp;diff=44216"/>
				<updated>2017-06-18T14:41:47Z</updated>
		
		<summary type="html">&lt;p&gt;Groux : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Groux</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Projet_IMA3_P7,_2016/2017,_TD2&amp;diff=44215</id>
		<title>Projet IMA3 P7, 2016/2017, TD2</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Projet_IMA3_P7,_2016/2017,_TD2&amp;diff=44215"/>
				<updated>2017-06-18T14:41:28Z</updated>
		
		<summary type="html">&lt;p&gt;Groux : /* Partie informatique */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Projet IMA3-SC 2016/2017 : Station météo connectée =&lt;br /&gt;
&lt;br /&gt;
== Cahier des charges ==&lt;br /&gt;
&lt;br /&gt;
Pour notre projet Système Communicant, nous avons choisi de réaliser une station météo qui pourrait mesurer la température, l'humidité et la pression atmosphérique. Nous pourrions songer également à relever la luminosité, la quantité de précipitation etc mais il faut rester vigilent au nombre de pins de l'Arduino. Grâce à celui-ci, nous pourrons réaliser une application web qui afficherait en détails les grandeurs mesurées.&lt;br /&gt;
&lt;br /&gt;
'''=== Le matériel ==='''&lt;br /&gt;
&lt;br /&gt;
*Un capteur de pression (type BMP180)      &lt;br /&gt;
*Un capteur d'humidité (A0SONG AM2302)     &lt;br /&gt;
*Un capteur de température&lt;br /&gt;
*Un Raspberry Pi&lt;br /&gt;
*Une alimentation &lt;br /&gt;
*Un Arduino                                &lt;br /&gt;
*Une nanoboard                             &lt;br /&gt;
*Plaque d'essais                           &lt;br /&gt;
*Fils&lt;br /&gt;
&lt;br /&gt;
== Séance 1 ==&lt;br /&gt;
&lt;br /&gt;
=== Partie électronique ===&lt;br /&gt;
&lt;br /&gt;
Pour le capteur AM2302, on constate que la broche de sortie SDA est une broche complexe et bidirectionnelle.&lt;br /&gt;
On souhaite, grâce au FPGA, lire les informations envoyées par le capteur AM2302 toutes les n secondes.&lt;br /&gt;
Pour lire une mesure, il faut envoyer un front descendant sur SDA, puis le capteur envoie 5 octets :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:AM2302.jpeg]]&lt;br /&gt;
&lt;br /&gt;
Pour pouvoir gérer la bidirectionnalité de la broche SDA, on utilisera un composant spécifique de Altium : le IOBUF&lt;br /&gt;
&lt;br /&gt;
Voici les caractéristiques sensorielles du capteur de température et d'humidité&lt;br /&gt;
&lt;br /&gt;
[[Fichier:AM2302_sensor.jpeg]]&lt;br /&gt;
&lt;br /&gt;
=== Partie informatique ===&lt;br /&gt;
&lt;br /&gt;
Pour la programmation, nous avons décidé de ne pas utiliser la carte arduino mais plutôt un circuit logique programmable (puce FPGA). Cette puce servira à collecter les informations envoyées par les différents capteurs et les convertir en valeurs numériques pour pouvoir les afficher sur notre application web.&lt;br /&gt;
&lt;br /&gt;
== Séance 2 ==&lt;br /&gt;
&lt;br /&gt;
=== Partie électronique ===&lt;br /&gt;
&lt;br /&gt;
Etude de la transmission d’informations avec la sonde AM2302 :&lt;br /&gt;
Attendre la détection d’un front descendant (entre 0,8 et 20 ms) envoyé par l’utilisateur.&lt;br /&gt;
On reçoit ensuit un signal haut nommé Tgo qui correspond à la libération du bus de données compris entre 20 et 200 us&lt;br /&gt;
On recoit une réponse du signal bas et une réponse du signal haut compris tous les duex entre 75 et 85 µs&lt;br /&gt;
Ensuite, la transmission des 40 caractères de données commence. Pour chaque bit, le capteur envoie un signal bas puis un signal haut. Pour envoyer un 0 ou un 1, le temps du signal bas (TLOW) ne varie pas. C’est donc grâce au temps de signal haut que l’on va distinguer la reception d’un « 0 » ou d’un « 1 » &lt;br /&gt;
Pour compter le temps de signal haut et savoir si le capteur nous a envoyé un 1 ou un 0, il faut détecter le front montant, lancer un compteur toutes les 1 µs puis détecter  un front descendant pour arrêter le compteur. Si 48 &amp;lt; compteur &amp;lt; 55 µs, alors le capteur nous a envoyé un « 0 » Si 22 &amp;lt; compteur &amp;lt; 30 µs, alors le capteur nous a envoyé un « 1 »&lt;br /&gt;
Après avoir envoyé 40 bits de données à traiter, le capteur envoie un dernier signal bas compris entre 45 et 55 µs pour indiquer que la transmission est terminée&lt;br /&gt;
&lt;br /&gt;
[[Fichier:capture1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:capture2roux.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  [[Fichier:capture3.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:capture4.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Grâce à ce compteur, nous stockons chaque bit reçu grâce à des bascules D. Une fois les 5 octets de données récupérées, il suffit d’effectuer quelques opérations mathématiques pour récupérer les valeurs décimales du pourcentage d’Humidité et de la température.&lt;br /&gt;
Voici à quoi correspondent les 5 octets reçus :&lt;br /&gt;
Le temps maximum de réception est (55 + 75 µs) x 8 x 5 = 5,2 ms. C’est l’intervalle de temps minimum avec lequel on peut récupérer une nouvelle valeur de température et d’humidité. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:capture5.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour vérifier que les informations reçues sont correctes, on additionne les 4 premiers octets (HH + HL + TH + TL). Si cette somme est égale au dernier octet (Parity bit), alors la transmission est correcte.&lt;br /&gt;
Pour avoir la valeur décimale de l’hygrométrie (en %), on converti en décimal les deux octets HH et HL puis on divise cette valeur par 10. &lt;br /&gt;
On applique les mêmes manipulations pour la température en °C.&lt;br /&gt;
Exemple : 40 bits recus :&lt;br /&gt;
0000 0010	1001 0010	0000 0001	0000 1101	1010 0010 High Humidity	Low Humidity            High Temperature      Low Temperature	     Parity bit&lt;br /&gt;
Calculs :&lt;br /&gt;
0000 0010 + 1001 0010 + 0000 0001 + 0000 1101 = 1010 0010 Ici, cette égalité est vraie, donc la transmission est correcte.&lt;br /&gt;
Humidité : 	0000 0010	1001 0010 = 0292H = 2 x 256 + 9x16 + 2 = 658	 On divise cette valeur décimale par 10  Humidité = 65,8%RH&lt;br /&gt;
Température : 	0000 0001	0000 1101 = 010DH = 1 x 256 + 0 x x16 + 13 = 269 On divise cette valeur décimale par 10  Température = 26,9°C&lt;br /&gt;
&lt;br /&gt;
=== Partie informatique ===&lt;br /&gt;
Lors de cette deuxième séance nous nous sommes intéressé au programme arduino de nos deux capteurs : Le BMP180 et la sonde DHT22&lt;br /&gt;
&lt;br /&gt;
Voici donc leur code arduino :&lt;br /&gt;
BMP180 (on télécharge la librairie Adafruit_BMP085 préalablement)&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;Wire.h&amp;gt;&lt;br /&gt;
#include &amp;lt;Adafruit_BMP085.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Adafruit_BMP085 bmp;&lt;br /&gt;
  &lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin(9600);&lt;br /&gt;
  if (!bmp.begin()) {&lt;br /&gt;
    Serial.println(&amp;quot;Could not find a valid BMP085 sensor, check wiring!&amp;quot;);&lt;br /&gt;
    while (1) {}&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
  &lt;br /&gt;
void loop() {&lt;br /&gt;
    Serial.print(&amp;quot;Temperature = &amp;quot;);&lt;br /&gt;
    Serial.print(bmp.readTemperature());&lt;br /&gt;
    Serial.println(&amp;quot; *C&amp;quot;);  &lt;br /&gt;
    Serial.print(&amp;quot;Pressure = &amp;quot;);&lt;br /&gt;
    Serial.print(bmp.readPressure());&lt;br /&gt;
    Serial.println(&amp;quot; Pa&amp;quot;);&lt;br /&gt;
    &lt;br /&gt;
    // Calculate altitude assuming 'standard' barometric&lt;br /&gt;
    // pressure of 1013.25 millibar = 101325 Pascal&lt;br /&gt;
    Serial.print(&amp;quot;Altitude = &amp;quot;);&lt;br /&gt;
    Serial.print(bmp.readAltitude());&lt;br /&gt;
    Serial.println(&amp;quot; meters&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    Serial.print(&amp;quot;Real altitude = &amp;quot;);&lt;br /&gt;
    Serial.print(bmp.readAltitude(101500));&lt;br /&gt;
    Serial.println(&amp;quot; meters&amp;quot;);&lt;br /&gt;
    &lt;br /&gt;
    Serial.println();&lt;br /&gt;
    delay(500);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
''Pour le DHT22''&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
#include &amp;quot;DHT.h&amp;quot;&lt;br /&gt;
#define DHTPIN 2     &lt;br /&gt;
#define DHTTYPE DHT22  &lt;br /&gt;
DHT dht(DHTPIN, DHTTYPE);&lt;br /&gt;
&lt;br /&gt;
void setup()&lt;br /&gt;
 {&lt;br /&gt;
  Serial.begin(9600); &lt;br /&gt;
  Serial.println(&amp;quot;DHTxx test!&amp;quot;);&lt;br /&gt;
  dht.begin();&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
void loop() {&lt;br /&gt;
  float h = dht.readHumidity();&lt;br /&gt;
  float t = dht.readTemperature();&lt;br /&gt;
  if (isnan(t) || isnan(h)) {&lt;br /&gt;
  Serial.println(&amp;quot;Failed to read from DHT&amp;quot;);&lt;br /&gt;
  } &lt;br /&gt;
else {&lt;br /&gt;
    Serial.print(&amp;quot;Humidity: &amp;quot;); &lt;br /&gt;
    Serial.print(h);&lt;br /&gt;
    Serial.print(&amp;quot; %\t&amp;quot;);&lt;br /&gt;
    Serial.print(&amp;quot;Temperature: &amp;quot;); &lt;br /&gt;
    Serial.print(t);&lt;br /&gt;
    Serial.println(&amp;quot; *C&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
== Séance 3 ==&lt;br /&gt;
&lt;br /&gt;
=== Partie électronique ===&lt;br /&gt;
Lors de la troisième séance nous avons décider de créer la partie FPGA de notre système.&lt;br /&gt;
Après avoir réaliser le tutoriel proposé nous avons essayé de comprendre la façon dont fonctionne nos capteurs afin de réaliser au mieux l'interface FPGA afin de réussir a lire les informations envoyé par les capteurs.&lt;br /&gt;
Malgré de nombreux essais et de nombreuse recherche sur internet nous n'avons pas réussi a aboutir a un sytème concret afin de lire les information.&lt;br /&gt;
&lt;br /&gt;
Voici les différent lien qui nous nt aidé dans la réalisation de notre projet :&lt;br /&gt;
&lt;br /&gt;
[https://cdn.sparkfun.com/datasheets/Sensors/Pressure/BMP180%20breakout.pdf BMP180]&lt;br /&gt;
[https://cdn.sparkfun.com/datasheets/Sensors/Pressure/BMP180.pdf Datasheet BMP180]&lt;br /&gt;
&lt;br /&gt;
Et pour le DHT22 nous avons trouvé ce model : &lt;br /&gt;
[[Fichier:DHT22.png]]&lt;br /&gt;
&lt;br /&gt;
=== Partie informatique ===&lt;br /&gt;
Pour cette partie informatique nous avons suivi quelque tutoriel afin de créer une page HTML qui nous servira d'application WEB. &lt;br /&gt;
Voici le code HTML : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
	&amp;lt;meta charset=&amp;quot;UTF-8&amp;quot;&amp;gt; &lt;br /&gt;
	&amp;lt;title&amp;gt;Station météo&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
	&amp;lt;div id=&amp;quot;corps&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;h1&amp;gt;Station météo&amp;lt;/h1&amp;gt;&lt;br /&gt;
		&amp;lt;h2&amp;gt;Roux-Mairesse&amp;lt;/h2&amp;gt;&lt;br /&gt;
		&amp;lt;p&amp;gt;Bienvenue sur notre station météo connectée&amp;lt;/p&amp;gt;&lt;br /&gt;
		&amp;lt;div id=&amp;quot;relevesMeteo&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;button onclick=&amp;quot;requeteEnvoi();&amp;quot;&amp;gt;Affichage des données&amp;lt;/button&amp;gt;&lt;br /&gt;
		&amp;lt;table&amp;gt;&lt;br /&gt;
			&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;th&amp;gt;Température DHT122&amp;lt;/th&amp;gt;&lt;br /&gt;
		&amp;lt;th&amp;gt;Température BMP180&amp;lt;/th&amp;gt;&lt;br /&gt;
		&amp;lt;th&amp;gt;Humidité&amp;lt;/th&amp;gt;&lt;br /&gt;
	        &amp;lt;th&amp;gt;Pression&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;td class=&amp;quot;temperature DHT122&amp;quot;&amp;gt;0 °C&amp;lt;/td&amp;gt;&lt;br /&gt;
			&amp;lt;td class=&amp;quot;temperature BMP180&amp;quot;&amp;gt;0 °C&amp;lt;/td&amp;gt;&lt;br /&gt;
			&amp;lt;td class=&amp;quot;humidite&amp;quot;&amp;gt;0 %&amp;lt;/td&amp;gt;&lt;br /&gt;
			&amp;lt;td class=&amp;quot;pression&amp;quot;&amp;gt;0 hPa&amp;lt;/td&amp;gt;&lt;br /&gt;
			&amp;lt;/tr&amp;gt;&lt;br /&gt;
	&amp;lt;/table&amp;gt;&lt;br /&gt;
	&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;	&lt;br /&gt;
&amp;lt;/html&amp;gt; &lt;br /&gt;
&lt;br /&gt;
[[Fichier:web2.png]]&lt;br /&gt;
&lt;br /&gt;
Cependant, après avoir réaliser cette partie nous ne savons pas comment obtenir les information des capteurs obtenu par arduino et les envoyer sur notre page web...&lt;br /&gt;
&lt;br /&gt;
== Séance supplémentaire 1 ==&lt;br /&gt;
&lt;br /&gt;
=== Partie électronique ===&lt;br /&gt;
&lt;br /&gt;
=== Partie informatique ===&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;/div&gt;</summary>
		<author><name>Groux</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Projet_IMA3_P7,_2016/2017,_TD2&amp;diff=44213</id>
		<title>Projet IMA3 P7, 2016/2017, TD2</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Projet_IMA3_P7,_2016/2017,_TD2&amp;diff=44213"/>
				<updated>2017-06-18T14:27:38Z</updated>
		
		<summary type="html">&lt;p&gt;Groux : /* Partie électronique */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Projet IMA3-SC 2016/2017 : Station météo connectée =&lt;br /&gt;
&lt;br /&gt;
== Cahier des charges ==&lt;br /&gt;
&lt;br /&gt;
Pour notre projet Système Communicant, nous avons choisi de réaliser une station météo qui pourrait mesurer la température, l'humidité et la pression atmosphérique. Nous pourrions songer également à relever la luminosité, la quantité de précipitation etc mais il faut rester vigilent au nombre de pins de l'Arduino. Grâce à celui-ci, nous pourrons réaliser une application web qui afficherait en détails les grandeurs mesurées.&lt;br /&gt;
&lt;br /&gt;
'''=== Le matériel ==='''&lt;br /&gt;
&lt;br /&gt;
*Un capteur de pression (type BMP180)      &lt;br /&gt;
*Un capteur d'humidité (A0SONG AM2302)     &lt;br /&gt;
*Un capteur de température&lt;br /&gt;
*Un Raspberry Pi&lt;br /&gt;
*Une alimentation &lt;br /&gt;
*Un Arduino                                &lt;br /&gt;
*Une nanoboard                             &lt;br /&gt;
*Plaque d'essais                           &lt;br /&gt;
*Fils&lt;br /&gt;
&lt;br /&gt;
== Séance 1 ==&lt;br /&gt;
&lt;br /&gt;
=== Partie électronique ===&lt;br /&gt;
&lt;br /&gt;
Pour le capteur AM2302, on constate que la broche de sortie SDA est une broche complexe et bidirectionnelle.&lt;br /&gt;
On souhaite, grâce au FPGA, lire les informations envoyées par le capteur AM2302 toutes les n secondes.&lt;br /&gt;
Pour lire une mesure, il faut envoyer un front descendant sur SDA, puis le capteur envoie 5 octets :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:AM2302.jpeg]]&lt;br /&gt;
&lt;br /&gt;
Pour pouvoir gérer la bidirectionnalité de la broche SDA, on utilisera un composant spécifique de Altium : le IOBUF&lt;br /&gt;
&lt;br /&gt;
Voici les caractéristiques sensorielles du capteur de température et d'humidité&lt;br /&gt;
&lt;br /&gt;
[[Fichier:AM2302_sensor.jpeg]]&lt;br /&gt;
&lt;br /&gt;
=== Partie informatique ===&lt;br /&gt;
&lt;br /&gt;
Pour la programmation, nous avons décidé de ne pas utiliser la carte arduino mais plutôt un circuit logique programmable (puce FPGA). Cette puce servira à collecter les informations envoyées par les différents capteurs et les convertir en valeurs numériques pour pouvoir les afficher sur notre application web.&lt;br /&gt;
&lt;br /&gt;
== Séance 2 ==&lt;br /&gt;
&lt;br /&gt;
=== Partie électronique ===&lt;br /&gt;
&lt;br /&gt;
Etude de la transmission d’informations avec la sonde AM2302 :&lt;br /&gt;
Attendre la détection d’un front descendant (entre 0,8 et 20 ms) envoyé par l’utilisateur.&lt;br /&gt;
On reçoit ensuit un signal haut nommé Tgo qui correspond à la libération du bus de données compris entre 20 et 200 us&lt;br /&gt;
On recoit une réponse du signal bas et une réponse du signal haut compris tous les duex entre 75 et 85 µs&lt;br /&gt;
Ensuite, la transmission des 40 caractères de données commence. Pour chaque bit, le capteur envoie un signal bas puis un signal haut. Pour envoyer un 0 ou un 1, le temps du signal bas (TLOW) ne varie pas. C’est donc grâce au temps de signal haut que l’on va distinguer la reception d’un « 0 » ou d’un « 1 » &lt;br /&gt;
Pour compter le temps de signal haut et savoir si le capteur nous a envoyé un 1 ou un 0, il faut détecter le front montant, lancer un compteur toutes les 1 µs puis détecter  un front descendant pour arrêter le compteur. Si 48 &amp;lt; compteur &amp;lt; 55 µs, alors le capteur nous a envoyé un « 0 » Si 22 &amp;lt; compteur &amp;lt; 30 µs, alors le capteur nous a envoyé un « 1 »&lt;br /&gt;
Après avoir envoyé 40 bits de données à traiter, le capteur envoie un dernier signal bas compris entre 45 et 55 µs pour indiquer que la transmission est terminée&lt;br /&gt;
&lt;br /&gt;
[[Fichier:capture1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:capture2roux.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  [[Fichier:capture3.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:capture4.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Grâce à ce compteur, nous stockons chaque bit reçu grâce à des bascules D. Une fois les 5 octets de données récupérées, il suffit d’effectuer quelques opérations mathématiques pour récupérer les valeurs décimales du pourcentage d’Humidité et de la température.&lt;br /&gt;
Voici à quoi correspondent les 5 octets reçus :&lt;br /&gt;
Le temps maximum de réception est (55 + 75 µs) x 8 x 5 = 5,2 ms. C’est l’intervalle de temps minimum avec lequel on peut récupérer une nouvelle valeur de température et d’humidité. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:capture5.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour vérifier que les informations reçues sont correctes, on additionne les 4 premiers octets (HH + HL + TH + TL). Si cette somme est égale au dernier octet (Parity bit), alors la transmission est correcte.&lt;br /&gt;
Pour avoir la valeur décimale de l’hygrométrie (en %), on converti en décimal les deux octets HH et HL puis on divise cette valeur par 10. &lt;br /&gt;
On applique les mêmes manipulations pour la température en °C.&lt;br /&gt;
Exemple : 40 bits recus :&lt;br /&gt;
0000 0010	1001 0010	0000 0001	0000 1101	1010 0010 High Humidity	Low Humidity            High Temperature      Low Temperature	     Parity bit&lt;br /&gt;
Calculs :&lt;br /&gt;
0000 0010 + 1001 0010 + 0000 0001 + 0000 1101 = 1010 0010 Ici, cette égalité est vraie, donc la transmission est correcte.&lt;br /&gt;
Humidité : 	0000 0010	1001 0010 = 0292H = 2 x 256 + 9x16 + 2 = 658	 On divise cette valeur décimale par 10  Humidité = 65,8%RH&lt;br /&gt;
Température : 	0000 0001	0000 1101 = 010DH = 1 x 256 + 0 x x16 + 13 = 269 On divise cette valeur décimale par 10  Température = 26,9°C&lt;br /&gt;
&lt;br /&gt;
=== Partie informatique ===&lt;br /&gt;
Lors de cette deuxième séance nous nous sommes intéressé au programme arduino de nos deux capteurs : Le BMP180 et la sonde DHT22&lt;br /&gt;
&lt;br /&gt;
Voici donc leur code arduino :&lt;br /&gt;
BMP180 (on télécharge la librairie Adafruit_BMP085 préalablement)&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;Wire.h&amp;gt;&lt;br /&gt;
#include &amp;lt;Adafruit_BMP085.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Adafruit_BMP085 bmp;&lt;br /&gt;
  &lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin(9600);&lt;br /&gt;
  if (!bmp.begin()) {&lt;br /&gt;
    Serial.println(&amp;quot;Could not find a valid BMP085 sensor, check wiring!&amp;quot;);&lt;br /&gt;
    while (1) {}&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
  &lt;br /&gt;
void loop() {&lt;br /&gt;
    Serial.print(&amp;quot;Temperature = &amp;quot;);&lt;br /&gt;
    Serial.print(bmp.readTemperature());&lt;br /&gt;
    Serial.println(&amp;quot; *C&amp;quot;);  &lt;br /&gt;
    Serial.print(&amp;quot;Pressure = &amp;quot;);&lt;br /&gt;
    Serial.print(bmp.readPressure());&lt;br /&gt;
    Serial.println(&amp;quot; Pa&amp;quot;);&lt;br /&gt;
    &lt;br /&gt;
    // Calculate altitude assuming 'standard' barometric&lt;br /&gt;
    // pressure of 1013.25 millibar = 101325 Pascal&lt;br /&gt;
    Serial.print(&amp;quot;Altitude = &amp;quot;);&lt;br /&gt;
    Serial.print(bmp.readAltitude());&lt;br /&gt;
    Serial.println(&amp;quot; meters&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    Serial.print(&amp;quot;Real altitude = &amp;quot;);&lt;br /&gt;
    Serial.print(bmp.readAltitude(101500));&lt;br /&gt;
    Serial.println(&amp;quot; meters&amp;quot;);&lt;br /&gt;
    &lt;br /&gt;
    Serial.println();&lt;br /&gt;
    delay(500);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
''Pour le DHT22''&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
#include &amp;quot;DHT.h&amp;quot;&lt;br /&gt;
#define DHTPIN 2     &lt;br /&gt;
#define DHTTYPE DHT22  &lt;br /&gt;
DHT dht(DHTPIN, DHTTYPE);&lt;br /&gt;
&lt;br /&gt;
void setup()&lt;br /&gt;
 {&lt;br /&gt;
  Serial.begin(9600); &lt;br /&gt;
  Serial.println(&amp;quot;DHTxx test!&amp;quot;);&lt;br /&gt;
  dht.begin();&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
void loop() {&lt;br /&gt;
  float h = dht.readHumidity();&lt;br /&gt;
  float t = dht.readTemperature();&lt;br /&gt;
  if (isnan(t) || isnan(h)) {&lt;br /&gt;
  Serial.println(&amp;quot;Failed to read from DHT&amp;quot;);&lt;br /&gt;
  } &lt;br /&gt;
else {&lt;br /&gt;
    Serial.print(&amp;quot;Humidity: &amp;quot;); &lt;br /&gt;
    Serial.print(h);&lt;br /&gt;
    Serial.print(&amp;quot; %\t&amp;quot;);&lt;br /&gt;
    Serial.print(&amp;quot;Temperature: &amp;quot;); &lt;br /&gt;
    Serial.print(t);&lt;br /&gt;
    Serial.println(&amp;quot; *C&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
== Séance 3 ==&lt;br /&gt;
&lt;br /&gt;
=== Partie électronique ===&lt;br /&gt;
Lors de la troisième séance nous avons décider de créer la partie FPGA de notre système.&lt;br /&gt;
Après avoir réaliser le tutoriel proposé nous avons essayé de comprendre la façon dont fonctionne nos capteurs afin de réaliser au mieux l'interface FPGA afin de réussir a lire les informations envoyé par les capteurs.&lt;br /&gt;
Malgré de nombreux essais et de nombreuse recherche sur internet nous n'avons pas réussi a aboutir a un sytème concret afin de lire les information.&lt;br /&gt;
&lt;br /&gt;
Voici les différent lien qui nous nt aidé dans la réalisation de notre projet :&lt;br /&gt;
&lt;br /&gt;
[https://cdn.sparkfun.com/datasheets/Sensors/Pressure/BMP180%20breakout.pdf BMP180]&lt;br /&gt;
[https://cdn.sparkfun.com/datasheets/Sensors/Pressure/BMP180.pdf Datasheet BMP180]&lt;br /&gt;
&lt;br /&gt;
Et pour le DHT22 nous avons trouvé ce model : &lt;br /&gt;
[[Fichier:DHT22.png]]&lt;br /&gt;
&lt;br /&gt;
=== Partie informatique ===&lt;br /&gt;
&lt;br /&gt;
== Séance supplémentaire 1 ==&lt;br /&gt;
&lt;br /&gt;
=== Partie électronique ===&lt;br /&gt;
&lt;br /&gt;
=== Partie informatique ===&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;/div&gt;</summary>
		<author><name>Groux</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:DHT22.png&amp;diff=44212</id>
		<title>Fichier:DHT22.png</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:DHT22.png&amp;diff=44212"/>
				<updated>2017-06-18T14:26:40Z</updated>
		
		<summary type="html">&lt;p&gt;Groux : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Groux</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Projet_IMA3_P7,_2016/2017,_TD2&amp;diff=44211</id>
		<title>Projet IMA3 P7, 2016/2017, TD2</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Projet_IMA3_P7,_2016/2017,_TD2&amp;diff=44211"/>
				<updated>2017-06-18T14:08:28Z</updated>
		
		<summary type="html">&lt;p&gt;Groux : /* Partie informatique */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Projet IMA3-SC 2016/2017 : Station météo connectée =&lt;br /&gt;
&lt;br /&gt;
== Cahier des charges ==&lt;br /&gt;
&lt;br /&gt;
Pour notre projet Système Communicant, nous avons choisi de réaliser une station météo qui pourrait mesurer la température, l'humidité et la pression atmosphérique. Nous pourrions songer également à relever la luminosité, la quantité de précipitation etc mais il faut rester vigilent au nombre de pins de l'Arduino. Grâce à celui-ci, nous pourrons réaliser une application web qui afficherait en détails les grandeurs mesurées.&lt;br /&gt;
&lt;br /&gt;
'''=== Le matériel ==='''&lt;br /&gt;
&lt;br /&gt;
*Un capteur de pression (type BMP180)      &lt;br /&gt;
*Un capteur d'humidité (A0SONG AM2302)     &lt;br /&gt;
*Un capteur de température&lt;br /&gt;
*Un Raspberry Pi&lt;br /&gt;
*Une alimentation &lt;br /&gt;
*Un Arduino                                &lt;br /&gt;
*Une nanoboard                             &lt;br /&gt;
*Plaque d'essais                           &lt;br /&gt;
*Fils&lt;br /&gt;
&lt;br /&gt;
== Séance 1 ==&lt;br /&gt;
&lt;br /&gt;
=== Partie électronique ===&lt;br /&gt;
&lt;br /&gt;
Pour le capteur AM2302, on constate que la broche de sortie SDA est une broche complexe et bidirectionnelle.&lt;br /&gt;
On souhaite, grâce au FPGA, lire les informations envoyées par le capteur AM2302 toutes les n secondes.&lt;br /&gt;
Pour lire une mesure, il faut envoyer un front descendant sur SDA, puis le capteur envoie 5 octets :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:AM2302.jpeg]]&lt;br /&gt;
&lt;br /&gt;
Pour pouvoir gérer la bidirectionnalité de la broche SDA, on utilisera un composant spécifique de Altium : le IOBUF&lt;br /&gt;
&lt;br /&gt;
Voici les caractéristiques sensorielles du capteur de température et d'humidité&lt;br /&gt;
&lt;br /&gt;
[[Fichier:AM2302_sensor.jpeg]]&lt;br /&gt;
&lt;br /&gt;
=== Partie informatique ===&lt;br /&gt;
&lt;br /&gt;
Pour la programmation, nous avons décidé de ne pas utiliser la carte arduino mais plutôt un circuit logique programmable (puce FPGA). Cette puce servira à collecter les informations envoyées par les différents capteurs et les convertir en valeurs numériques pour pouvoir les afficher sur notre application web.&lt;br /&gt;
&lt;br /&gt;
== Séance 2 ==&lt;br /&gt;
&lt;br /&gt;
=== Partie électronique ===&lt;br /&gt;
&lt;br /&gt;
Etude de la transmission d’informations avec la sonde AM2302 :&lt;br /&gt;
Attendre la détection d’un front descendant (entre 0,8 et 20 ms) envoyé par l’utilisateur.&lt;br /&gt;
On reçoit ensuit un signal haut nommé Tgo qui correspond à la libération du bus de données compris entre 20 et 200 us&lt;br /&gt;
On recoit une réponse du signal bas et une réponse du signal haut compris tous les duex entre 75 et 85 µs&lt;br /&gt;
Ensuite, la transmission des 40 caractères de données commence. Pour chaque bit, le capteur envoie un signal bas puis un signal haut. Pour envoyer un 0 ou un 1, le temps du signal bas (TLOW) ne varie pas. C’est donc grâce au temps de signal haut que l’on va distinguer la reception d’un « 0 » ou d’un « 1 » &lt;br /&gt;
Pour compter le temps de signal haut et savoir si le capteur nous a envoyé un 1 ou un 0, il faut détecter le front montant, lancer un compteur toutes les 1 µs puis détecter  un front descendant pour arrêter le compteur. Si 48 &amp;lt; compteur &amp;lt; 55 µs, alors le capteur nous a envoyé un « 0 » Si 22 &amp;lt; compteur &amp;lt; 30 µs, alors le capteur nous a envoyé un « 1 »&lt;br /&gt;
Après avoir envoyé 40 bits de données à traiter, le capteur envoie un dernier signal bas compris entre 45 et 55 µs pour indiquer que la transmission est terminée&lt;br /&gt;
&lt;br /&gt;
[[Fichier:capture1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:capture2roux.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  [[Fichier:capture3.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:capture4.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Grâce à ce compteur, nous stockons chaque bit reçu grâce à des bascules D. Une fois les 5 octets de données récupérées, il suffit d’effectuer quelques opérations mathématiques pour récupérer les valeurs décimales du pourcentage d’Humidité et de la température.&lt;br /&gt;
Voici à quoi correspondent les 5 octets reçus :&lt;br /&gt;
Le temps maximum de réception est (55 + 75 µs) x 8 x 5 = 5,2 ms. C’est l’intervalle de temps minimum avec lequel on peut récupérer une nouvelle valeur de température et d’humidité. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:capture5.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour vérifier que les informations reçues sont correctes, on additionne les 4 premiers octets (HH + HL + TH + TL). Si cette somme est égale au dernier octet (Parity bit), alors la transmission est correcte.&lt;br /&gt;
Pour avoir la valeur décimale de l’hygrométrie (en %), on converti en décimal les deux octets HH et HL puis on divise cette valeur par 10. &lt;br /&gt;
On applique les mêmes manipulations pour la température en °C.&lt;br /&gt;
Exemple : 40 bits recus :&lt;br /&gt;
0000 0010	1001 0010	0000 0001	0000 1101	1010 0010 High Humidity	Low Humidity            High Temperature      Low Temperature	     Parity bit&lt;br /&gt;
Calculs :&lt;br /&gt;
0000 0010 + 1001 0010 + 0000 0001 + 0000 1101 = 1010 0010 Ici, cette égalité est vraie, donc la transmission est correcte.&lt;br /&gt;
Humidité : 	0000 0010	1001 0010 = 0292H = 2 x 256 + 9x16 + 2 = 658	 On divise cette valeur décimale par 10  Humidité = 65,8%RH&lt;br /&gt;
Température : 	0000 0001	0000 1101 = 010DH = 1 x 256 + 0 x x16 + 13 = 269 On divise cette valeur décimale par 10  Température = 26,9°C&lt;br /&gt;
&lt;br /&gt;
=== Partie informatique ===&lt;br /&gt;
Lors de cette deuxième séance nous nous sommes intéressé au programme arduino de nos deux capteurs : Le BMP180 et la sonde DHT22&lt;br /&gt;
&lt;br /&gt;
Voici donc leur code arduino :&lt;br /&gt;
BMP180 (on télécharge la librairie Adafruit_BMP085 préalablement)&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;Wire.h&amp;gt;&lt;br /&gt;
#include &amp;lt;Adafruit_BMP085.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Adafruit_BMP085 bmp;&lt;br /&gt;
  &lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin(9600);&lt;br /&gt;
  if (!bmp.begin()) {&lt;br /&gt;
    Serial.println(&amp;quot;Could not find a valid BMP085 sensor, check wiring!&amp;quot;);&lt;br /&gt;
    while (1) {}&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
  &lt;br /&gt;
void loop() {&lt;br /&gt;
    Serial.print(&amp;quot;Temperature = &amp;quot;);&lt;br /&gt;
    Serial.print(bmp.readTemperature());&lt;br /&gt;
    Serial.println(&amp;quot; *C&amp;quot;);  &lt;br /&gt;
    Serial.print(&amp;quot;Pressure = &amp;quot;);&lt;br /&gt;
    Serial.print(bmp.readPressure());&lt;br /&gt;
    Serial.println(&amp;quot; Pa&amp;quot;);&lt;br /&gt;
    &lt;br /&gt;
    // Calculate altitude assuming 'standard' barometric&lt;br /&gt;
    // pressure of 1013.25 millibar = 101325 Pascal&lt;br /&gt;
    Serial.print(&amp;quot;Altitude = &amp;quot;);&lt;br /&gt;
    Serial.print(bmp.readAltitude());&lt;br /&gt;
    Serial.println(&amp;quot; meters&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    Serial.print(&amp;quot;Real altitude = &amp;quot;);&lt;br /&gt;
    Serial.print(bmp.readAltitude(101500));&lt;br /&gt;
    Serial.println(&amp;quot; meters&amp;quot;);&lt;br /&gt;
    &lt;br /&gt;
    Serial.println();&lt;br /&gt;
    delay(500);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
''Pour le DHT22''&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
#include &amp;quot;DHT.h&amp;quot;&lt;br /&gt;
#define DHTPIN 2     &lt;br /&gt;
#define DHTTYPE DHT22  &lt;br /&gt;
DHT dht(DHTPIN, DHTTYPE);&lt;br /&gt;
&lt;br /&gt;
void setup()&lt;br /&gt;
 {&lt;br /&gt;
  Serial.begin(9600); &lt;br /&gt;
  Serial.println(&amp;quot;DHTxx test!&amp;quot;);&lt;br /&gt;
  dht.begin();&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
void loop() {&lt;br /&gt;
  float h = dht.readHumidity();&lt;br /&gt;
  float t = dht.readTemperature();&lt;br /&gt;
  if (isnan(t) || isnan(h)) {&lt;br /&gt;
  Serial.println(&amp;quot;Failed to read from DHT&amp;quot;);&lt;br /&gt;
  } &lt;br /&gt;
else {&lt;br /&gt;
    Serial.print(&amp;quot;Humidity: &amp;quot;); &lt;br /&gt;
    Serial.print(h);&lt;br /&gt;
    Serial.print(&amp;quot; %\t&amp;quot;);&lt;br /&gt;
    Serial.print(&amp;quot;Temperature: &amp;quot;); &lt;br /&gt;
    Serial.print(t);&lt;br /&gt;
    Serial.println(&amp;quot; *C&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
== Séance 3 ==&lt;br /&gt;
&lt;br /&gt;
=== Partie électronique ===&lt;br /&gt;
&lt;br /&gt;
=== Partie informatique ===&lt;br /&gt;
&lt;br /&gt;
== Séance supplémentaire 1 ==&lt;br /&gt;
&lt;br /&gt;
=== Partie électronique ===&lt;br /&gt;
&lt;br /&gt;
=== Partie informatique ===&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;/div&gt;</summary>
		<author><name>Groux</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Projet_IMA3_P7,_2016/2017,_TD2&amp;diff=44205</id>
		<title>Projet IMA3 P7, 2016/2017, TD2</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Projet_IMA3_P7,_2016/2017,_TD2&amp;diff=44205"/>
				<updated>2017-06-18T13:58:06Z</updated>
		
		<summary type="html">&lt;p&gt;Groux : /* Cahier des charges */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Projet IMA3-SC 2016/2017 : Station météo connectée =&lt;br /&gt;
&lt;br /&gt;
== Cahier des charges ==&lt;br /&gt;
&lt;br /&gt;
Pour notre projet Système Communicant, nous avons choisi de réaliser une station météo qui pourrait mesurer la température, l'humidité et la pression atmosphérique. Nous pourrions songer également à relever la luminosité, la quantité de précipitation etc mais il faut rester vigilent au nombre de pins de l'Arduino. Grâce à celui-ci, nous pourrons réaliser une application web qui afficherait en détails les grandeurs mesurées.&lt;br /&gt;
&lt;br /&gt;
'''=== Le matériel ==='''&lt;br /&gt;
&lt;br /&gt;
*Un capteur de pression (type BMP180)      &lt;br /&gt;
*Un capteur d'humidité (A0SONG AM2302)     &lt;br /&gt;
*Un capteur de température&lt;br /&gt;
*Un Raspberry Pi&lt;br /&gt;
*Une alimentation &lt;br /&gt;
*Un Arduino                                &lt;br /&gt;
*Une nanoboard                             &lt;br /&gt;
*Plaque d'essais                           &lt;br /&gt;
*Fils&lt;br /&gt;
&lt;br /&gt;
== Séance 1 ==&lt;br /&gt;
&lt;br /&gt;
=== Partie électronique ===&lt;br /&gt;
&lt;br /&gt;
Pour le capteur AM2302, on constate que la broche de sortie SDA est une broche complexe et bidirectionnelle.&lt;br /&gt;
On souhaite, grâce au FPGA, lire les informations envoyées par le capteur AM2302 toutes les n secondes.&lt;br /&gt;
Pour lire une mesure, il faut envoyer un front descendant sur SDA, puis le capteur envoie 5 octets :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:AM2302.jpeg]]&lt;br /&gt;
&lt;br /&gt;
Pour pouvoir gérer la bidirectionnalité de la broche SDA, on utilisera un composant spécifique de Altium : le IOBUF&lt;br /&gt;
&lt;br /&gt;
Voici les caractéristiques sensorielles du capteur de température et d'humidité&lt;br /&gt;
&lt;br /&gt;
[[Fichier:AM2302_sensor.jpeg]]&lt;br /&gt;
&lt;br /&gt;
=== Partie informatique ===&lt;br /&gt;
&lt;br /&gt;
Pour la programmation, nous avons décidé de ne pas utiliser la carte arduino mais plutôt un circuit logique programmable (puce FPGA). Cette puce servira à collecter les informations envoyées par les différents capteurs et les convertir en valeurs numériques pour pouvoir les afficher sur notre application web.&lt;br /&gt;
&lt;br /&gt;
== Séance 2 ==&lt;br /&gt;
&lt;br /&gt;
=== Partie électronique ===&lt;br /&gt;
&lt;br /&gt;
Etude de la transmission d’informations avec la sonde AM2302 :&lt;br /&gt;
Attendre la détection d’un front descendant (entre 0,8 et 20 ms) envoyé par l’utilisateur.&lt;br /&gt;
On reçoit ensuit un signal haut nommé Tgo qui correspond à la libération du bus de données compris entre 20 et 200 us&lt;br /&gt;
On recoit une réponse du signal bas et une réponse du signal haut compris tous les duex entre 75 et 85 µs&lt;br /&gt;
Ensuite, la transmission des 40 caractères de données commence. Pour chaque bit, le capteur envoie un signal bas puis un signal haut. Pour envoyer un 0 ou un 1, le temps du signal bas (TLOW) ne varie pas. C’est donc grâce au temps de signal haut que l’on va distinguer la reception d’un « 0 » ou d’un « 1 » &lt;br /&gt;
Pour compter le temps de signal haut et savoir si le capteur nous a envoyé un 1 ou un 0, il faut détecter le front montant, lancer un compteur toutes les 1 µs puis détecter  un front descendant pour arrêter le compteur. Si 48 &amp;lt; compteur &amp;lt; 55 µs, alors le capteur nous a envoyé un « 0 » Si 22 &amp;lt; compteur &amp;lt; 30 µs, alors le capteur nous a envoyé un « 1 »&lt;br /&gt;
Après avoir envoyé 40 bits de données à traiter, le capteur envoie un dernier signal bas compris entre 45 et 55 µs pour indiquer que la transmission est terminée&lt;br /&gt;
&lt;br /&gt;
[[Fichier:capture1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:capture2roux.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  [[Fichier:capture3.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:capture4.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Grâce à ce compteur, nous stockons chaque bit reçu grâce à des bascules D. Une fois les 5 octets de données récupérées, il suffit d’effectuer quelques opérations mathématiques pour récupérer les valeurs décimales du pourcentage d’Humidité et de la température.&lt;br /&gt;
Voici à quoi correspondent les 5 octets reçus :&lt;br /&gt;
Le temps maximum de réception est (55 + 75 µs) x 8 x 5 = 5,2 ms. C’est l’intervalle de temps minimum avec lequel on peut récupérer une nouvelle valeur de température et d’humidité. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:capture5.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour vérifier que les informations reçues sont correctes, on additionne les 4 premiers octets (HH + HL + TH + TL). Si cette somme est égale au dernier octet (Parity bit), alors la transmission est correcte.&lt;br /&gt;
Pour avoir la valeur décimale de l’hygrométrie (en %), on converti en décimal les deux octets HH et HL puis on divise cette valeur par 10. &lt;br /&gt;
On applique les mêmes manipulations pour la température en °C.&lt;br /&gt;
Exemple : 40 bits recus :&lt;br /&gt;
0000 0010	1001 0010	0000 0001	0000 1101	1010 0010 High Humidity	Low Humidity            High Temperature      Low Temperature	     Parity bit&lt;br /&gt;
Calculs :&lt;br /&gt;
0000 0010 + 1001 0010 + 0000 0001 + 0000 1101 = 1010 0010 Ici, cette égalité est vraie, donc la transmission est correcte.&lt;br /&gt;
Humidité : 	0000 0010	1001 0010 = 0292H = 2 x 256 + 9x16 + 2 = 658	 On divise cette valeur décimale par 10  Humidité = 65,8%RH&lt;br /&gt;
Température : 	0000 0001	0000 1101 = 010DH = 1 x 256 + 0 x x16 + 13 = 269 On divise cette valeur décimale par 10  Température = 26,9°C&lt;br /&gt;
&lt;br /&gt;
=== Partie informatique ===&lt;br /&gt;
Lors de cette deuxième séance nous nous sommes intéressé au programme arduino de nos deux capteurs : Le BMP180 et la sonde DHT22&lt;br /&gt;
&lt;br /&gt;
Voici donc leur code arduino :&lt;br /&gt;
&lt;br /&gt;
== Séance 3 ==&lt;br /&gt;
&lt;br /&gt;
=== Partie électronique ===&lt;br /&gt;
&lt;br /&gt;
=== Partie informatique ===&lt;br /&gt;
&lt;br /&gt;
== Séance supplémentaire 1 ==&lt;br /&gt;
&lt;br /&gt;
=== Partie électronique ===&lt;br /&gt;
&lt;br /&gt;
=== Partie informatique ===&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;/div&gt;</summary>
		<author><name>Groux</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Projet_IMA3_P7,_2016/2017,_TD2&amp;diff=44204</id>
		<title>Projet IMA3 P7, 2016/2017, TD2</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Projet_IMA3_P7,_2016/2017,_TD2&amp;diff=44204"/>
				<updated>2017-06-18T13:56:58Z</updated>
		
		<summary type="html">&lt;p&gt;Groux : /* Partie informatique */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Projet IMA3-SC 2016/2017 : Station météo connectée =&lt;br /&gt;
&lt;br /&gt;
== Cahier des charges ==&lt;br /&gt;
&lt;br /&gt;
Pour notre projet Système Communicant, nous avons choisi de réaliser une station météo qui pourrait mesurer la température, l'humidité et la pression atmosphérique. Nous pourrions songer également à relever la luminosité, la quantité de précipitation etc mais il faut rester vigilent au nombre de pins de l'Arduino. Grâce à celui-ci, nous pourrons réaliser une application web qui afficherait en détails les grandeurs mesurées.&lt;br /&gt;
&lt;br /&gt;
'''=== Le matériel ==='''&lt;br /&gt;
&lt;br /&gt;
*Un capteur de pression (type BMP085)      &lt;br /&gt;
*Un capteur d'humidité (A0SONG AM2302)     &lt;br /&gt;
*Un capteur de température&lt;br /&gt;
*Un Raspberry Pi&lt;br /&gt;
*Une alimentation &lt;br /&gt;
*Un Arduino                                &lt;br /&gt;
*Une nanoboard                             &lt;br /&gt;
*Plaque d'essais                           &lt;br /&gt;
*Fils&lt;br /&gt;
&lt;br /&gt;
== Séance 1 ==&lt;br /&gt;
&lt;br /&gt;
=== Partie électronique ===&lt;br /&gt;
&lt;br /&gt;
Pour le capteur AM2302, on constate que la broche de sortie SDA est une broche complexe et bidirectionnelle.&lt;br /&gt;
On souhaite, grâce au FPGA, lire les informations envoyées par le capteur AM2302 toutes les n secondes.&lt;br /&gt;
Pour lire une mesure, il faut envoyer un front descendant sur SDA, puis le capteur envoie 5 octets :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:AM2302.jpeg]]&lt;br /&gt;
&lt;br /&gt;
Pour pouvoir gérer la bidirectionnalité de la broche SDA, on utilisera un composant spécifique de Altium : le IOBUF&lt;br /&gt;
&lt;br /&gt;
Voici les caractéristiques sensorielles du capteur de température et d'humidité&lt;br /&gt;
&lt;br /&gt;
[[Fichier:AM2302_sensor.jpeg]]&lt;br /&gt;
&lt;br /&gt;
=== Partie informatique ===&lt;br /&gt;
&lt;br /&gt;
Pour la programmation, nous avons décidé de ne pas utiliser la carte arduino mais plutôt un circuit logique programmable (puce FPGA). Cette puce servira à collecter les informations envoyées par les différents capteurs et les convertir en valeurs numériques pour pouvoir les afficher sur notre application web.&lt;br /&gt;
&lt;br /&gt;
== Séance 2 ==&lt;br /&gt;
&lt;br /&gt;
=== Partie électronique ===&lt;br /&gt;
&lt;br /&gt;
Etude de la transmission d’informations avec la sonde AM2302 :&lt;br /&gt;
Attendre la détection d’un front descendant (entre 0,8 et 20 ms) envoyé par l’utilisateur.&lt;br /&gt;
On reçoit ensuit un signal haut nommé Tgo qui correspond à la libération du bus de données compris entre 20 et 200 us&lt;br /&gt;
On recoit une réponse du signal bas et une réponse du signal haut compris tous les duex entre 75 et 85 µs&lt;br /&gt;
Ensuite, la transmission des 40 caractères de données commence. Pour chaque bit, le capteur envoie un signal bas puis un signal haut. Pour envoyer un 0 ou un 1, le temps du signal bas (TLOW) ne varie pas. C’est donc grâce au temps de signal haut que l’on va distinguer la reception d’un « 0 » ou d’un « 1 » &lt;br /&gt;
Pour compter le temps de signal haut et savoir si le capteur nous a envoyé un 1 ou un 0, il faut détecter le front montant, lancer un compteur toutes les 1 µs puis détecter  un front descendant pour arrêter le compteur. Si 48 &amp;lt; compteur &amp;lt; 55 µs, alors le capteur nous a envoyé un « 0 » Si 22 &amp;lt; compteur &amp;lt; 30 µs, alors le capteur nous a envoyé un « 1 »&lt;br /&gt;
Après avoir envoyé 40 bits de données à traiter, le capteur envoie un dernier signal bas compris entre 45 et 55 µs pour indiquer que la transmission est terminée&lt;br /&gt;
&lt;br /&gt;
[[Fichier:capture1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:capture2roux.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  [[Fichier:capture3.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:capture4.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Grâce à ce compteur, nous stockons chaque bit reçu grâce à des bascules D. Une fois les 5 octets de données récupérées, il suffit d’effectuer quelques opérations mathématiques pour récupérer les valeurs décimales du pourcentage d’Humidité et de la température.&lt;br /&gt;
Voici à quoi correspondent les 5 octets reçus :&lt;br /&gt;
Le temps maximum de réception est (55 + 75 µs) x 8 x 5 = 5,2 ms. C’est l’intervalle de temps minimum avec lequel on peut récupérer une nouvelle valeur de température et d’humidité. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:capture5.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour vérifier que les informations reçues sont correctes, on additionne les 4 premiers octets (HH + HL + TH + TL). Si cette somme est égale au dernier octet (Parity bit), alors la transmission est correcte.&lt;br /&gt;
Pour avoir la valeur décimale de l’hygrométrie (en %), on converti en décimal les deux octets HH et HL puis on divise cette valeur par 10. &lt;br /&gt;
On applique les mêmes manipulations pour la température en °C.&lt;br /&gt;
Exemple : 40 bits recus :&lt;br /&gt;
0000 0010	1001 0010	0000 0001	0000 1101	1010 0010 High Humidity	Low Humidity            High Temperature      Low Temperature	     Parity bit&lt;br /&gt;
Calculs :&lt;br /&gt;
0000 0010 + 1001 0010 + 0000 0001 + 0000 1101 = 1010 0010 Ici, cette égalité est vraie, donc la transmission est correcte.&lt;br /&gt;
Humidité : 	0000 0010	1001 0010 = 0292H = 2 x 256 + 9x16 + 2 = 658	 On divise cette valeur décimale par 10  Humidité = 65,8%RH&lt;br /&gt;
Température : 	0000 0001	0000 1101 = 010DH = 1 x 256 + 0 x x16 + 13 = 269 On divise cette valeur décimale par 10  Température = 26,9°C&lt;br /&gt;
&lt;br /&gt;
=== Partie informatique ===&lt;br /&gt;
Lors de cette deuxième séance nous nous sommes intéressé au programme arduino de nos deux capteurs : Le BMP180 et la sonde DHT22&lt;br /&gt;
&lt;br /&gt;
Voici donc leur code arduino :&lt;br /&gt;
&lt;br /&gt;
== Séance 3 ==&lt;br /&gt;
&lt;br /&gt;
=== Partie électronique ===&lt;br /&gt;
&lt;br /&gt;
=== Partie informatique ===&lt;br /&gt;
&lt;br /&gt;
== Séance supplémentaire 1 ==&lt;br /&gt;
&lt;br /&gt;
=== Partie électronique ===&lt;br /&gt;
&lt;br /&gt;
=== Partie informatique ===&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;/div&gt;</summary>
		<author><name>Groux</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Projet_IMA3_P7,_2016/2017,_TD2&amp;diff=44202</id>
		<title>Projet IMA3 P7, 2016/2017, TD2</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Projet_IMA3_P7,_2016/2017,_TD2&amp;diff=44202"/>
				<updated>2017-06-18T13:36:44Z</updated>
		
		<summary type="html">&lt;p&gt;Groux : /* Partie électronique */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Projet IMA3-SC 2016/2017 : Station météo connectée =&lt;br /&gt;
&lt;br /&gt;
== Cahier des charges ==&lt;br /&gt;
&lt;br /&gt;
Pour notre projet Système Communicant, nous avons choisi de réaliser une station météo qui pourrait mesurer la température, l'humidité et la pression atmosphérique. Nous pourrions songer également à relever la luminosité, la quantité de précipitation etc mais il faut rester vigilent au nombre de pins de l'Arduino. Grâce à celui-ci, nous pourrons réaliser une application web qui afficherait en détails les grandeurs mesurées.&lt;br /&gt;
&lt;br /&gt;
'''=== Le matériel ==='''&lt;br /&gt;
&lt;br /&gt;
*Un capteur de pression (type BMP085)      &lt;br /&gt;
*Un capteur d'humidité (A0SONG AM2302)     &lt;br /&gt;
*Un capteur de température&lt;br /&gt;
*Un Raspberry Pi&lt;br /&gt;
*Une alimentation &lt;br /&gt;
*Un Arduino                                &lt;br /&gt;
*Une nanoboard                             &lt;br /&gt;
*Plaque d'essais                           &lt;br /&gt;
*Fils&lt;br /&gt;
&lt;br /&gt;
== Séance 1 ==&lt;br /&gt;
&lt;br /&gt;
=== Partie électronique ===&lt;br /&gt;
&lt;br /&gt;
Pour le capteur AM2302, on constate que la broche de sortie SDA est une broche complexe et bidirectionnelle.&lt;br /&gt;
On souhaite, grâce au FPGA, lire les informations envoyées par le capteur AM2302 toutes les n secondes.&lt;br /&gt;
Pour lire une mesure, il faut envoyer un front descendant sur SDA, puis le capteur envoie 5 octets :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:AM2302.jpeg]]&lt;br /&gt;
&lt;br /&gt;
Pour pouvoir gérer la bidirectionnalité de la broche SDA, on utilisera un composant spécifique de Altium : le IOBUF&lt;br /&gt;
&lt;br /&gt;
Voici les caractéristiques sensorielles du capteur de température et d'humidité&lt;br /&gt;
&lt;br /&gt;
[[Fichier:AM2302_sensor.jpeg]]&lt;br /&gt;
&lt;br /&gt;
=== Partie informatique ===&lt;br /&gt;
&lt;br /&gt;
Pour la programmation, nous avons décidé de ne pas utiliser la carte arduino mais plutôt un circuit logique programmable (puce FPGA). Cette puce servira à collecter les informations envoyées par les différents capteurs et les convertir en valeurs numériques pour pouvoir les afficher sur notre application web.&lt;br /&gt;
&lt;br /&gt;
== Séance 2 ==&lt;br /&gt;
&lt;br /&gt;
=== Partie électronique ===&lt;br /&gt;
&lt;br /&gt;
Etude de la transmission d’informations avec la sonde AM2302 :&lt;br /&gt;
Attendre la détection d’un front descendant (entre 0,8 et 20 ms) envoyé par l’utilisateur.&lt;br /&gt;
On reçoit ensuit un signal haut nommé Tgo qui correspond à la libération du bus de données compris entre 20 et 200 us&lt;br /&gt;
On recoit une réponse du signal bas et une réponse du signal haut compris tous les duex entre 75 et 85 µs&lt;br /&gt;
Ensuite, la transmission des 40 caractères de données commence. Pour chaque bit, le capteur envoie un signal bas puis un signal haut. Pour envoyer un 0 ou un 1, le temps du signal bas (TLOW) ne varie pas. C’est donc grâce au temps de signal haut que l’on va distinguer la reception d’un « 0 » ou d’un « 1 » &lt;br /&gt;
Pour compter le temps de signal haut et savoir si le capteur nous a envoyé un 1 ou un 0, il faut détecter le front montant, lancer un compteur toutes les 1 µs puis détecter  un front descendant pour arrêter le compteur. Si 48 &amp;lt; compteur &amp;lt; 55 µs, alors le capteur nous a envoyé un « 0 » Si 22 &amp;lt; compteur &amp;lt; 30 µs, alors le capteur nous a envoyé un « 1 »&lt;br /&gt;
Après avoir envoyé 40 bits de données à traiter, le capteur envoie un dernier signal bas compris entre 45 et 55 µs pour indiquer que la transmission est terminée&lt;br /&gt;
&lt;br /&gt;
[[Fichier:capture1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:capture2roux.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  [[Fichier:capture3.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:capture4.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Grâce à ce compteur, nous stockons chaque bit reçu grâce à des bascules D. Une fois les 5 octets de données récupérées, il suffit d’effectuer quelques opérations mathématiques pour récupérer les valeurs décimales du pourcentage d’Humidité et de la température.&lt;br /&gt;
Voici à quoi correspondent les 5 octets reçus :&lt;br /&gt;
Le temps maximum de réception est (55 + 75 µs) x 8 x 5 = 5,2 ms. C’est l’intervalle de temps minimum avec lequel on peut récupérer une nouvelle valeur de température et d’humidité. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:capture5.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour vérifier que les informations reçues sont correctes, on additionne les 4 premiers octets (HH + HL + TH + TL). Si cette somme est égale au dernier octet (Parity bit), alors la transmission est correcte.&lt;br /&gt;
Pour avoir la valeur décimale de l’hygrométrie (en %), on converti en décimal les deux octets HH et HL puis on divise cette valeur par 10. &lt;br /&gt;
On applique les mêmes manipulations pour la température en °C.&lt;br /&gt;
Exemple : 40 bits recus :&lt;br /&gt;
0000 0010	1001 0010	0000 0001	0000 1101	1010 0010 High Humidity	Low Humidity            High Temperature      Low Temperature	     Parity bit&lt;br /&gt;
Calculs :&lt;br /&gt;
0000 0010 + 1001 0010 + 0000 0001 + 0000 1101 = 1010 0010 Ici, cette égalité est vraie, donc la transmission est correcte.&lt;br /&gt;
Humidité : 	0000 0010	1001 0010 = 0292H = 2 x 256 + 9x16 + 2 = 658	 On divise cette valeur décimale par 10  Humidité = 65,8%RH&lt;br /&gt;
Température : 	0000 0001	0000 1101 = 010DH = 1 x 256 + 0 x x16 + 13 = 269 On divise cette valeur décimale par 10  Température = 26,9°C&lt;br /&gt;
&lt;br /&gt;
=== Partie informatique ===&lt;br /&gt;
&lt;br /&gt;
== Séance 3 ==&lt;br /&gt;
&lt;br /&gt;
=== Partie électronique ===&lt;br /&gt;
&lt;br /&gt;
=== Partie informatique ===&lt;br /&gt;
&lt;br /&gt;
== Séance supplémentaire 1 ==&lt;br /&gt;
&lt;br /&gt;
=== Partie électronique ===&lt;br /&gt;
&lt;br /&gt;
=== Partie informatique ===&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;/div&gt;</summary>
		<author><name>Groux</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Capture5.png&amp;diff=44201</id>
		<title>Fichier:Capture5.png</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Capture5.png&amp;diff=44201"/>
				<updated>2017-06-18T13:29:08Z</updated>
		
		<summary type="html">&lt;p&gt;Groux : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Groux</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Capture4.png&amp;diff=44200</id>
		<title>Fichier:Capture4.png</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Capture4.png&amp;diff=44200"/>
				<updated>2017-06-18T13:28:28Z</updated>
		
		<summary type="html">&lt;p&gt;Groux : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Groux</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Capture3.png&amp;diff=44199</id>
		<title>Fichier:Capture3.png</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Capture3.png&amp;diff=44199"/>
				<updated>2017-06-18T13:27:58Z</updated>
		
		<summary type="html">&lt;p&gt;Groux : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Groux</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Capture2roux.png&amp;diff=44198</id>
		<title>Fichier:Capture2roux.png</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Capture2roux.png&amp;diff=44198"/>
				<updated>2017-06-18T13:27:32Z</updated>
		
		<summary type="html">&lt;p&gt;Groux : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Groux</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Capture1.png&amp;diff=44197</id>
		<title>Fichier:Capture1.png</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Capture1.png&amp;diff=44197"/>
				<updated>2017-06-18T13:26:37Z</updated>
		
		<summary type="html">&lt;p&gt;Groux : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Groux</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Projet_IMA3_P7,_2016/2017,_TD2&amp;diff=44194</id>
		<title>Projet IMA3 P7, 2016/2017, TD2</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Projet_IMA3_P7,_2016/2017,_TD2&amp;diff=44194"/>
				<updated>2017-06-18T12:50:50Z</updated>
		
		<summary type="html">&lt;p&gt;Groux : /* Partie électronique */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Projet IMA3-SC 2016/2017 : Station météo connectée =&lt;br /&gt;
&lt;br /&gt;
== Cahier des charges ==&lt;br /&gt;
&lt;br /&gt;
Pour notre projet Système Communicant, nous avons choisi de réaliser une station météo qui pourrait mesurer la température, l'humidité et la pression atmosphérique. Nous pourrions songer également à relever la luminosité, la quantité de précipitation etc mais il faut rester vigilent au nombre de pins de l'Arduino. Grâce à celui-ci, nous pourrons réaliser une application web qui afficherait en détails les grandeurs mesurées.&lt;br /&gt;
&lt;br /&gt;
'''=== Le matériel ==='''&lt;br /&gt;
&lt;br /&gt;
*Un capteur de pression (type BMP085)      &lt;br /&gt;
*Un capteur d'humidité (A0SONG AM2302)     &lt;br /&gt;
*Un capteur de température&lt;br /&gt;
*Un Raspberry Pi&lt;br /&gt;
*Une alimentation &lt;br /&gt;
*Un Arduino                                &lt;br /&gt;
*Une nanoboard                             &lt;br /&gt;
*Plaque d'essais                           &lt;br /&gt;
*Fils&lt;br /&gt;
&lt;br /&gt;
== Séance 1 ==&lt;br /&gt;
&lt;br /&gt;
=== Partie électronique ===&lt;br /&gt;
&lt;br /&gt;
Pour le capteur AM2302, on constate que la broche de sortie SDA est une broche complexe et bidirectionnelle.&lt;br /&gt;
On souhaite, grâce au FPGA, lire les informations envoyées par le capteur AM2302 toutes les n secondes.&lt;br /&gt;
Pour lire une mesure, il faut envoyer un front descendant sur SDA, puis le capteur envoie 5 octets :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:AM2302.jpeg]]&lt;br /&gt;
&lt;br /&gt;
Pour pouvoir gérer la bidirectionnalité de la broche SDA, on utilisera un composant spécifique de Altium : le IOBUF&lt;br /&gt;
&lt;br /&gt;
Voici les caractéristiques sensorielles du capteur de température et d'humidité&lt;br /&gt;
&lt;br /&gt;
[[Fichier:AM2302_sensor.jpeg]]&lt;br /&gt;
&lt;br /&gt;
=== Partie informatique ===&lt;br /&gt;
&lt;br /&gt;
Pour la programmation, nous avons décidé de ne pas utiliser la carte arduino mais plutôt un circuit logique programmable (puce FPGA). Cette puce servira à collecter les informations envoyées par les différents capteurs et les convertir en valeurs numériques pour pouvoir les afficher sur notre application web.&lt;br /&gt;
&lt;br /&gt;
== Séance 2 ==&lt;br /&gt;
&lt;br /&gt;
=== Partie électronique ===&lt;br /&gt;
&lt;br /&gt;
Etude de la transmission d’informations avec la sonde AM2302 :&lt;br /&gt;
Attendre la détection d’un front descendant (entre 0,8 et 20 ms) envoyé par l’utilisateur.&lt;br /&gt;
On reçoit ensuit un signal haut nommé Tgo qui correspond à la libération du bus de données compris entre 20 et 200 us&lt;br /&gt;
On recoit une réponse du signal bas et une réponse du signal haut compris tous les duex entre 75 et 85 µs&lt;br /&gt;
Ensuite, la transmission des 40 caractères de données commence. Pour chaque bit, le capteur envoie un signal bas puis un signal haut. Pour envoyer un 0 ou un 1, le temps du signal bas (TLOW) ne varie pas. C’est donc grâce au temps de signal haut que l’on va distinguer la reception d’un « 0 » ou d’un « 1 » &lt;br /&gt;
Pour compter le temps de signal haut et savoir si le capteur nous a envoyé un 1 ou un 0, il faut détecter le front montant, lancer un compteur toutes les 1 µs puis détecter  un front descendant pour arrêter le compteur. Si 48 &amp;lt; compteur &amp;lt; 55 µs, alors le capteur nous a envoyé un « 0 » Si 22 &amp;lt; compteur &amp;lt; 30 µs, alors le capteur nous a envoyé un « 1 »&lt;br /&gt;
Après avoir envoyé 40 bits de données à traiter, le capteur envoie un dernier signal bas compris entre 45 et 55 µs pour indiquer que la transmission est terminée&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  &lt;br /&gt;
THO = [48 ;55µs] et TH1 = [22 ;30µs]&lt;br /&gt;
&lt;br /&gt;
Grâce à ce compteur, nous stockons chaque bit reçu grâce à des bascules D. Une fois les 5 octets de données récupérées, il suffit d’effectuer quelques opérations mathématiques pour récupérer les valeurs décimales du pourcentage d’Humidité et de la température.&lt;br /&gt;
Voici à quoi correspondent les 5 octets reçus :&lt;br /&gt;
Le temps maximum de réception est (55 + 75 µs) x 8 x 5 = 5,2 ms. C’est l’intervalle de temps minimum avec lequel on peut récupérer une nouvelle valeur de température et d’humidité. &lt;br /&gt;
&lt;br /&gt;
Pour vérifier que les informations reçues sont correctes, on additionne les 4 premiers octets (HH + HL + TH + TL). Si cette somme est égale au dernier octet (Parity bit), alors la transmission est correcte.&lt;br /&gt;
Pour avoir la valeur décimale de l’hygrométrie (en %), on converti en décimal les deux octets HH et HL puis on divise cette valeur par 10. &lt;br /&gt;
On applique les mêmes manipulations pour la température en °C.&lt;br /&gt;
Exemple : 40 bits recus :&lt;br /&gt;
0000 0010	1001 0010	0000 0001	0000 1101	1010 0010 High Humidity	Low Humidity            High Temperature      Low Temperature	     Parity bit&lt;br /&gt;
Calculs :&lt;br /&gt;
0000 0010 + 1001 0010 + 0000 0001 + 0000 1101 = 1010 0010 Ici, cette égalité est vraie, donc la transmission est correcte.&lt;br /&gt;
Humidité : 	0000 0010	1001 0010 = 0292H = 2 x 256 + 9x16 + 2 = 658	 On divise cette valeur décimale par 10  Humidité = 65,8%RH&lt;br /&gt;
Température : 	0000 0001	0000 1101 = 010DH = 1 x 256 + 0 x x16 + 13 = 269 On divise cette valeur décimale par 10  Température = 26,9°C&lt;br /&gt;
&lt;br /&gt;
=== Partie informatique ===&lt;br /&gt;
&lt;br /&gt;
== Séance 3 ==&lt;br /&gt;
&lt;br /&gt;
=== Partie électronique ===&lt;br /&gt;
&lt;br /&gt;
=== Partie informatique ===&lt;br /&gt;
&lt;br /&gt;
== Séance supplémentaire 1 ==&lt;br /&gt;
&lt;br /&gt;
=== Partie électronique ===&lt;br /&gt;
&lt;br /&gt;
=== Partie informatique ===&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;/div&gt;</summary>
		<author><name>Groux</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Projets_troisi%C3%A8me_ann%C3%A9e,_2016/2017,_TD2&amp;diff=40034</id>
		<title>Projets troisième année, 2016/2017, TD2</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Projets_troisi%C3%A8me_ann%C3%A9e,_2016/2017,_TD2&amp;diff=40034"/>
				<updated>2017-03-07T09:05:13Z</updated>
		
		<summary type="html">&lt;p&gt;Groux : /* Répartition des binômes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Répartition des binômes ==&lt;br /&gt;
&lt;br /&gt;
Ecrivez vos noms sous le format exact &amp;quot;Prénom Nom&amp;quot;, séparez vos noms par des virgules.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Projet !! Elèves&lt;br /&gt;
|- &lt;br /&gt;
| [[Projet IMA3 P1, 2016/2017, TD2]] || Paul Ribeiro, Naif Mehanna, Alexis Viscogliosi, Maxime Créteur&lt;br /&gt;
|-&lt;br /&gt;
| [[Projet IMA3 P2, 2016/2017, TD2]] || Nicolas Havard, Transley Gracias, Amaury Knockaert, Keren Quiang&lt;br /&gt;
|-&lt;br /&gt;
| [[Projet IMA3 P3, 2016/2017, TD2]] || Fan Gao, Fabrice Taingland, Thibault Lepoivre, Antonin Lépolard&lt;br /&gt;
|-&lt;br /&gt;
| [[Projet IMA3 P4, 2016/2017, TD2]] || Briois Zoé, Untereiner Antoine, Narbais Damien, Watine Jean Baptiste&lt;br /&gt;
|-&lt;br /&gt;
| [[Projet IMA3 P5, 2016/2017, TD2]] || &lt;br /&gt;
Saad Camille, Senellart Justine, Vandamme Claire &lt;br /&gt;
|-&lt;br /&gt;
| [[Projet IMA3 P6, 2016/2017, TD2]] || Eloi Zalczer, Gabriel Waterlot, Lihe Zhang&lt;br /&gt;
|-&lt;br /&gt;
| [[Projet IMA3 P7, 2016/2017, TD2]] || Gustave ROUX, Rémi MAIRESSE&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Groux</name></author>	</entry>

	</feed>