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

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P5_IOT_2017&amp;diff=46990</id>
		<title>P5 IOT 2017</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P5_IOT_2017&amp;diff=46990"/>
				<updated>2018-01-29T02:49:52Z</updated>
		
		<summary type="html">&lt;p&gt;Mdiop : /* Détail du travail de la cinquième séance */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation du sujet =&lt;br /&gt;
&lt;br /&gt;
==Contexte==&lt;br /&gt;
&lt;br /&gt;
Nous effectuons ce projet dans le cadre du module internet des objets (Internet of things). &lt;br /&gt;
&lt;br /&gt;
L'objectif de ce module est de créer l'objet connecté de notre choix.&lt;br /&gt;
&lt;br /&gt;
Nous avons donc choisi de créer un objet en rapport avec la sécurité routière: le système Safe&amp;amp;Drive.&lt;br /&gt;
&lt;br /&gt;
==Description du projet==&lt;br /&gt;
&lt;br /&gt;
Pour veiller au respect des distances de sécurité, le système S&amp;amp;D va tout d'abord évaluer la distance entre votre voiture et celle qui vous suit. &lt;br /&gt;
&lt;br /&gt;
Grâce au GPS intégré, la distance de sécurité à respecter sera calculée en fonction de votre vitesse de circulation.&lt;br /&gt;
&lt;br /&gt;
Si cette distance de sécurité n'est pas respectée, un message de mise en garde sera affiché sur votre pare-brise arrière à destination du conducteur qui vous suit de trop prêt.&lt;br /&gt;
&lt;br /&gt;
Bien évidemment, ce message ne sera envoyé qu'après confirmation de l'utilisateur depuis l'application mobile du système Safe&amp;amp;Drive.&lt;br /&gt;
&lt;br /&gt;
En mode marche arrière, le système devient une aide à la manœuvre avec une caméra de recul et un détecteur d'obstacle.&lt;br /&gt;
&lt;br /&gt;
=Réalisation=&lt;br /&gt;
&lt;br /&gt;
==Matériel utilisé==&lt;br /&gt;
&lt;br /&gt;
* Raspberry Pi&lt;br /&gt;
* Arduino Uno&lt;br /&gt;
* Arduino Mega2560&lt;br /&gt;
* SparkFun GPS Shield&lt;br /&gt;
* Adafruit 64x32 RGB LED Matrix - 5mm pitch&lt;br /&gt;
* Garmin LIDAR-Lite v3&lt;br /&gt;
&lt;br /&gt;
==Suivi de réalisation==&lt;br /&gt;
 {| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 1 (08/01/2018)&lt;br /&gt;
 | Choix de l'objet + Choix du matériel&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 2 (09/01/2018)&lt;br /&gt;
 | Circuit shield pour la matrice LED + Test Li-DAR Lite&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 3 (16/01/2018)&lt;br /&gt;
 | Circuit shield pour la matrice LED + Test du shield GPS&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 4 (17/01/2018)&lt;br /&gt;
 | Circuit shield pour la matrice LED + Test Shield GPS&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 5 (22/01/2018)&lt;br /&gt;
 | Soudage circuit shield pour la matrice LED + Test LED Matrix + RaspberryPI + Application mobile&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 6 (24/01/2018)&lt;br /&gt;
 | Finitions + Resolutions des problèmes + Préparation orale (+poster)&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la première séance==&lt;br /&gt;
&lt;br /&gt;
Pour choisir notre projet nous avons débuté en faisant un pseudo-brainstorming duquel est ressorti 4 projets.&lt;br /&gt;
&lt;br /&gt;
Nous donc dû réduire notre choix à un seul de ces quatre possibilités.&lt;br /&gt;
&lt;br /&gt;
Notre choix final s'est donc porté sur le système Safe&amp;amp;Drive.&lt;br /&gt;
&lt;br /&gt;
Après avoir affiné les divers fonctionnalités de notre projet, nous avons commencé à réunir le matériel dont nous aurions besoin.&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la deuxième séance==&lt;br /&gt;
&lt;br /&gt;
* Début de la création du shield de la matrice de LED qui viendra se positionner sur l’Arduino Mega2560.&lt;br /&gt;
&lt;br /&gt;
* Test du capteur optique LI-DAR Lite et codage du programme pour le calcul de distance.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 LIDARLite Arduino Library&lt;br /&gt;
  GetDistanceI2c&lt;br /&gt;
&lt;br /&gt;
  This example shows how to initialize, configure, and read distance from a&lt;br /&gt;
  LIDAR-Lite connected over the I2C interface.&lt;br /&gt;
&lt;br /&gt;
  Connections:&lt;br /&gt;
  LIDAR-Lite 5 Vdc (red) to Arduino 5v&lt;br /&gt;
  LIDAR-Lite I2C SCL (green) to Arduino SCL&lt;br /&gt;
  LIDAR-Lite I2C SDA (blue) to Arduino SDA&lt;br /&gt;
  LIDAR-Lite Ground (black) to Arduino GND&lt;br /&gt;
  &lt;br /&gt;
  (Capacitor recommended to mitigate inrush current when device is enabled)&lt;br /&gt;
  680uF capacitor (+) to Arduino 5v&lt;br /&gt;
  680uF capacitor (-) to Arduino GND&lt;br /&gt;
&lt;br /&gt;
  See the Operation Manual for wiring diagrams and more information:&lt;br /&gt;
  http://www.robotshop.com/media/files/pdf2/pli-06-instruction.pdf&lt;br /&gt;
&lt;br /&gt;
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;Wire.h&amp;gt;&lt;br /&gt;
#include &amp;lt;LIDARLite.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
LIDARLite myLidarLite;&lt;br /&gt;
int distance_reelle ;&lt;br /&gt;
&lt;br /&gt;
void setup()&lt;br /&gt;
{&lt;br /&gt;
  Serial.begin(9600); // Initialize serial connection to display distance readings&lt;br /&gt;
&lt;br /&gt;
  myLidarLite.begin(0, true); // Set configuration to default and I2C to 400 kHz&lt;br /&gt;
&lt;br /&gt;
  myLidarLite.configure(0); // Change this number to try out alternate configurations&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop()&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
  // Take a measurement with receiver bias correction and print to serial terminal&lt;br /&gt;
  distance_reelle = (myLidarLite.distance());&lt;br /&gt;
  if(distance_reelle &amp;lt; 1)&lt;br /&gt;
  {&lt;br /&gt;
	Serial.println('O');&lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
	Serial.println('N');&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la troisième séance==&lt;br /&gt;
&lt;br /&gt;
* Poursuite de la création du circuit (shield) pour la matrice LED. &lt;br /&gt;
Cela n'a pas été une tâche facile en raison de la répartition des différentes pâtes dont nous avions besoin et des liaisons à effectuer.&lt;br /&gt;
&lt;br /&gt;
* Test du GPS et codage du programme de calcul de vitesse.&lt;br /&gt;
Nous avons rencontré des problèmes avec le GPS, celui-ci ne renvoyait des message d'erreurs &amp;quot;NO GPS DETECTED&amp;quot; ou bien des données nulles du type &amp;quot;Date: 00/00/0000&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la quatrième séance==&lt;br /&gt;
&lt;br /&gt;
* Finition du circuit (shield) pour la matrice LED et envoi de la demande de fabrication&lt;br /&gt;
&lt;br /&gt;
Nous avons rencontré un problème avec le logiciel nous avons donc dû refaire entièrement le circuit, cela nous a pas mal retardé dans notre projet.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Circuitp5.jpg|200px|]]&lt;br /&gt;
[[Fichier:circuit_bottom.jpg|200px|]]&lt;br /&gt;
&lt;br /&gt;
* Test du GPS et résolution des problèmes.&lt;br /&gt;
Nous avons rencontré beaucoup de problèmes avec le GPS, celui-ci se connectait bien aux satellites mais ne nous renvoyait que des données nulles ou bien un message d'erreur.&lt;br /&gt;
&lt;br /&gt;
Il s'est en faite avéré que selon la position du GPS receiver sur le shield celui-ci affichait ou non les données. &lt;br /&gt;
&lt;br /&gt;
Le problème a donc été résolu. Voici le code:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;}&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;TinyGPS++.h&amp;gt;&lt;br /&gt;
#include &amp;lt;SoftwareSerial.h&amp;gt;&lt;br /&gt;
#include &amp;lt;Wire.h&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
 This example uses software serial and the TinyGPS++ library by Mikal Hart&lt;br /&gt;
 Based on TinyGPSPlus/DeviceExample.ino by Mikal Hart&lt;br /&gt;
 Modified by acavis&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
// Choose two Arduino pins to use for software serial&lt;br /&gt;
// The GPS Shield uses D2 and D3 by default when in DLINE mode&lt;br /&gt;
int RXPin = 50;&lt;br /&gt;
int TXPin = 3; &lt;br /&gt;
&lt;br /&gt;
// The Skytaq EM-506 GPS module included in the GPS Shield Kit&lt;br /&gt;
// uses 4800 baud by default&lt;br /&gt;
int GPSBaud = 4800;&lt;br /&gt;
&lt;br /&gt;
// Create a TinyGPS++ object called &amp;quot;gps&amp;quot;&lt;br /&gt;
TinyGPSPlus gps;&lt;br /&gt;
&lt;br /&gt;
// Create a software serial port called &amp;quot;gpsSerial&amp;quot;&lt;br /&gt;
SoftwareSerial gpsSerial(RXPin, TXPin);&lt;br /&gt;
&lt;br /&gt;
void setup()&lt;br /&gt;
{&lt;br /&gt;
  // Start the Arduino hardware serial port at 9600 baud&lt;br /&gt;
  Serial.begin(9600);&lt;br /&gt;
&lt;br /&gt;
  // Start the software serial port at the GPS's default baud&lt;br /&gt;
  gpsSerial.begin(GPSBaud);&lt;br /&gt;
&lt;br /&gt;
  Serial.println(F(&amp;quot;DeviceExample.ino&amp;quot;));&lt;br /&gt;
  Serial.println(F(&amp;quot;A simple demonstration of TinyGPS++ with an attached GPS module&amp;quot;));&lt;br /&gt;
  Serial.print(F(&amp;quot;Testing TinyGPS++ library v. &amp;quot;)); Serial.println(TinyGPSPlus::libraryVersion());&lt;br /&gt;
  Serial.println(F(&amp;quot;by Mikal Hart&amp;quot;));&lt;br /&gt;
  Serial.println();&lt;br /&gt;
  &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop()&lt;br /&gt;
{&lt;br /&gt;
  // This sketch displays information every time a new sentence is correctly encoded.&lt;br /&gt;
  while (gpsSerial.available() &amp;gt; 0)&lt;br /&gt;
    if (gps.encode(gpsSerial.read()))&lt;br /&gt;
      displayInfo();&lt;br /&gt;
&lt;br /&gt;
  // If 5000 milliseconds pass and there are no characters coming in&lt;br /&gt;
  // over the software serial port, show a &amp;quot;No GPS detected&amp;quot; error&lt;br /&gt;
  if (millis() &amp;gt; 5000 &amp;amp;&amp;amp; gps.charsProcessed() &amp;lt; 10)&lt;br /&gt;
  {&lt;br /&gt;
    Serial.println(F(&amp;quot;No GPS detected&amp;quot;));&lt;br /&gt;
    while(true);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void displayInfo()&lt;br /&gt;
{&lt;br /&gt;
  Serial.print(F(&amp;quot;Speed: &amp;quot;)); &lt;br /&gt;
  if (gps.speed.isValid())&lt;br /&gt;
  {&lt;br /&gt;
    Serial.print(gps.speed.kmph(), 6);&lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
    Serial.print(F(&amp;quot;INVALID&amp;quot;));&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
  Serial.println();&lt;br /&gt;
&lt;br /&gt;
  secure_dist = (gps.speed.kmph()/10)*6; &lt;br /&gt;
  Serial.print(&amp;quot;distance de sécurite (en  m)= &amp;quot;);&lt;br /&gt;
  Serial.print(secure_dist);&lt;br /&gt;
  Serial.println();&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la cinquième séance==&lt;br /&gt;
* Soudage des barrettes et des ponts sur le circuit pour la Matrice LED (Shield)&lt;br /&gt;
&lt;br /&gt;
* Test de la matrice LED et codage du programme pour l'affichage d'un message personnalisé coloré&lt;br /&gt;
Message choisi: Ne me collez pas au cul, PUTAIN!!&lt;br /&gt;
Voici le code pour l'affichage du message. Celle-ci se fait grâce à un liaison série entre la raspberry Pi (RPI) et la matrice de de LED connectée à l’arduino Mega à travers le shield.&lt;br /&gt;
&lt;br /&gt;
Voici le résultat:&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Panneau.jpg|200px|]]&lt;br /&gt;
&lt;br /&gt;
* Configuartion de la RPI&lt;br /&gt;
&lt;br /&gt;
La raspberry pi (RPI) est chargé de recueillir la confirmation de l'utilisateur à travers l'application mobile, une fois ceci fait, elle lit les données envoyées provenant du traitement d'information sur la distance de sécurité et celle réelle avant de les envoyé vers le programme traitant de l'affichage du message. En fonction du message envoyé (dans notre cas c'est un caractère: 'O' ou 'o' si le message doit être envoyé et 'n' ou 'N' si c'est le contraire). Voici le code:&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
from bluetooth import *                                                         &lt;br /&gt;
import time                                                                     &lt;br /&gt;
import serial                                                                   &lt;br /&gt;
                                                                                &lt;br /&gt;
server_sock=BluetoothSocket( RFCOMM )                                           &lt;br /&gt;
server_sock.bind((&amp;quot;&amp;quot;,PORT_ANY))                                                 &lt;br /&gt;
server_sock.listen(1)                                                           &lt;br /&gt;
                                                                                &lt;br /&gt;
port = server_sock.getsockname()[1]                                             &lt;br /&gt;
                                                                                &lt;br /&gt;
uuid = &amp;quot;94f39d29-7d6d-437d-973b-fba39e49d4ee&amp;quot;                                   &lt;br /&gt;
                                                                                &lt;br /&gt;
advertise_service( server_sock, &amp;quot;SampleServer&amp;quot;,                                 &lt;br /&gt;
                   service_id = uuid,                                           &lt;br /&gt;
                   service_classes = [ uuid, SERIAL_PORT_CLASS ],               &lt;br /&gt;
                   profiles = [ SERIAL_PORT_PROFILE ],                          &lt;br /&gt;
#                   protocols = [ OBEX_UUID ]                                   &lt;br /&gt;
                    )                                                           &lt;br /&gt;
                                                                                &lt;br /&gt;
print(&amp;quot;Waiting for connection on RFCOMM channel %d&amp;quot; % port)                     &lt;br /&gt;
                                                                                &lt;br /&gt;
client_sock, client_info = server_sock.accept()                                 &lt;br /&gt;
print(&amp;quot;Accepted connection from &amp;quot;, client_info)&lt;br /&gt;
                                 &lt;br /&gt;
ser0 = serial.Serial('/dev/ttyACM0')       &lt;br /&gt;
Ser1 = serial.SERIAL('/dev/ttyACM1')                                      &lt;br /&gt;
                                                                                &lt;br /&gt;
try:                                                                            &lt;br /&gt;
    while True:                                                                 &lt;br /&gt;
        data = &amp;quot;&amp;quot;                                                                                           &lt;br /&gt;
        client_sock.recv(data)    &lt;br /&gt;
		data2 = ser1.read();&lt;br /&gt;
		if data2 == 'O'&lt;br /&gt;
			ser0.write('o')&lt;br /&gt;
		if data2 == 'N'&lt;br /&gt;
			ser0.write('n')&lt;br /&gt;
except IOError:                                                                 &lt;br /&gt;
    pass                                                                        &lt;br /&gt;
                                                                                &lt;br /&gt;
print(&amp;quot;disconnected&amp;quot;)                                                           &lt;br /&gt;
                                                                                &lt;br /&gt;
client_sock.close()                                                             &lt;br /&gt;
server_sock.close()                                                             &lt;br /&gt;
print(&amp;quot;all done&amp;quot;) &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Codage de l'application Mobile &lt;br /&gt;
Elle a pour but de permettre à l'utilisateur de se connecter, via bluetooth, à la RPI et de lui envoyer sa confirmation. Celui-ci peut également se déconnecter, s'il le souhaite.&lt;br /&gt;
[[Fichier:Appli iot.PNG|200px|]]&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la sixième séance==&lt;br /&gt;
* Test du fonctionnement du système complet&lt;br /&gt;
Problèmes rencontrés:&lt;br /&gt;
on a eu plusieurs bugs sur la partie RPI. On a eu du mal à faire les liaisons série entre les deux arduino.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Préparation de l'oral et finition du poster&lt;br /&gt;
&lt;br /&gt;
=Rendu=&lt;br /&gt;
&lt;br /&gt;
==Poster==&lt;br /&gt;
Version électronique du poster :&lt;br /&gt;
[[Fichier:2017_IOT_P5_poster.png|center|500px]]&lt;br /&gt;
&lt;br /&gt;
==Fichiers rendus==&lt;br /&gt;
&lt;br /&gt;
Notre application : [[Media:Rendu.zip]]&lt;/div&gt;</summary>
		<author><name>Mdiop</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P5_IOT_2017&amp;diff=46989</id>
		<title>P5 IOT 2017</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P5_IOT_2017&amp;diff=46989"/>
				<updated>2018-01-29T02:48:10Z</updated>
		
		<summary type="html">&lt;p&gt;Mdiop : /* Détail du travail de la sixième séance */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation du sujet =&lt;br /&gt;
&lt;br /&gt;
==Contexte==&lt;br /&gt;
&lt;br /&gt;
Nous effectuons ce projet dans le cadre du module internet des objets (Internet of things). &lt;br /&gt;
&lt;br /&gt;
L'objectif de ce module est de créer l'objet connecté de notre choix.&lt;br /&gt;
&lt;br /&gt;
Nous avons donc choisi de créer un objet en rapport avec la sécurité routière: le système Safe&amp;amp;Drive.&lt;br /&gt;
&lt;br /&gt;
==Description du projet==&lt;br /&gt;
&lt;br /&gt;
Pour veiller au respect des distances de sécurité, le système S&amp;amp;D va tout d'abord évaluer la distance entre votre voiture et celle qui vous suit. &lt;br /&gt;
&lt;br /&gt;
Grâce au GPS intégré, la distance de sécurité à respecter sera calculée en fonction de votre vitesse de circulation.&lt;br /&gt;
&lt;br /&gt;
Si cette distance de sécurité n'est pas respectée, un message de mise en garde sera affiché sur votre pare-brise arrière à destination du conducteur qui vous suit de trop prêt.&lt;br /&gt;
&lt;br /&gt;
Bien évidemment, ce message ne sera envoyé qu'après confirmation de l'utilisateur depuis l'application mobile du système Safe&amp;amp;Drive.&lt;br /&gt;
&lt;br /&gt;
En mode marche arrière, le système devient une aide à la manœuvre avec une caméra de recul et un détecteur d'obstacle.&lt;br /&gt;
&lt;br /&gt;
=Réalisation=&lt;br /&gt;
&lt;br /&gt;
==Matériel utilisé==&lt;br /&gt;
&lt;br /&gt;
* Raspberry Pi&lt;br /&gt;
* Arduino Uno&lt;br /&gt;
* Arduino Mega2560&lt;br /&gt;
* SparkFun GPS Shield&lt;br /&gt;
* Adafruit 64x32 RGB LED Matrix - 5mm pitch&lt;br /&gt;
* Garmin LIDAR-Lite v3&lt;br /&gt;
&lt;br /&gt;
==Suivi de réalisation==&lt;br /&gt;
 {| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 1 (08/01/2018)&lt;br /&gt;
 | Choix de l'objet + Choix du matériel&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 2 (09/01/2018)&lt;br /&gt;
 | Circuit shield pour la matrice LED + Test Li-DAR Lite&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 3 (16/01/2018)&lt;br /&gt;
 | Circuit shield pour la matrice LED + Test du shield GPS&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 4 (17/01/2018)&lt;br /&gt;
 | Circuit shield pour la matrice LED + Test Shield GPS&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 5 (22/01/2018)&lt;br /&gt;
 | Soudage circuit shield pour la matrice LED + Test LED Matrix + RaspberryPI + Application mobile&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 6 (24/01/2018)&lt;br /&gt;
 | Finitions + Resolutions des problèmes + Préparation orale (+poster)&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la première séance==&lt;br /&gt;
&lt;br /&gt;
Pour choisir notre projet nous avons débuté en faisant un pseudo-brainstorming duquel est ressorti 4 projets.&lt;br /&gt;
&lt;br /&gt;
Nous donc dû réduire notre choix à un seul de ces quatre possibilités.&lt;br /&gt;
&lt;br /&gt;
Notre choix final s'est donc porté sur le système Safe&amp;amp;Drive.&lt;br /&gt;
&lt;br /&gt;
Après avoir affiné les divers fonctionnalités de notre projet, nous avons commencé à réunir le matériel dont nous aurions besoin.&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la deuxième séance==&lt;br /&gt;
&lt;br /&gt;
* Début de la création du shield de la matrice de LED qui viendra se positionner sur l’Arduino Mega2560.&lt;br /&gt;
&lt;br /&gt;
* Test du capteur optique LI-DAR Lite et codage du programme pour le calcul de distance.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 LIDARLite Arduino Library&lt;br /&gt;
  GetDistanceI2c&lt;br /&gt;
&lt;br /&gt;
  This example shows how to initialize, configure, and read distance from a&lt;br /&gt;
  LIDAR-Lite connected over the I2C interface.&lt;br /&gt;
&lt;br /&gt;
  Connections:&lt;br /&gt;
  LIDAR-Lite 5 Vdc (red) to Arduino 5v&lt;br /&gt;
  LIDAR-Lite I2C SCL (green) to Arduino SCL&lt;br /&gt;
  LIDAR-Lite I2C SDA (blue) to Arduino SDA&lt;br /&gt;
  LIDAR-Lite Ground (black) to Arduino GND&lt;br /&gt;
  &lt;br /&gt;
  (Capacitor recommended to mitigate inrush current when device is enabled)&lt;br /&gt;
  680uF capacitor (+) to Arduino 5v&lt;br /&gt;
  680uF capacitor (-) to Arduino GND&lt;br /&gt;
&lt;br /&gt;
  See the Operation Manual for wiring diagrams and more information:&lt;br /&gt;
  http://www.robotshop.com/media/files/pdf2/pli-06-instruction.pdf&lt;br /&gt;
&lt;br /&gt;
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;Wire.h&amp;gt;&lt;br /&gt;
#include &amp;lt;LIDARLite.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
LIDARLite myLidarLite;&lt;br /&gt;
int distance_reelle ;&lt;br /&gt;
&lt;br /&gt;
void setup()&lt;br /&gt;
{&lt;br /&gt;
  Serial.begin(9600); // Initialize serial connection to display distance readings&lt;br /&gt;
&lt;br /&gt;
  myLidarLite.begin(0, true); // Set configuration to default and I2C to 400 kHz&lt;br /&gt;
&lt;br /&gt;
  myLidarLite.configure(0); // Change this number to try out alternate configurations&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop()&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
  // Take a measurement with receiver bias correction and print to serial terminal&lt;br /&gt;
  distance_reelle = (myLidarLite.distance());&lt;br /&gt;
  if(distance_reelle &amp;lt; 1)&lt;br /&gt;
  {&lt;br /&gt;
	Serial.println('O');&lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
	Serial.println('N');&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la troisième séance==&lt;br /&gt;
&lt;br /&gt;
* Poursuite de la création du circuit (shield) pour la matrice LED. &lt;br /&gt;
Cela n'a pas été une tâche facile en raison de la répartition des différentes pâtes dont nous avions besoin et des liaisons à effectuer.&lt;br /&gt;
&lt;br /&gt;
* Test du GPS et codage du programme de calcul de vitesse.&lt;br /&gt;
Nous avons rencontré des problèmes avec le GPS, celui-ci ne renvoyait des message d'erreurs &amp;quot;NO GPS DETECTED&amp;quot; ou bien des données nulles du type &amp;quot;Date: 00/00/0000&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la quatrième séance==&lt;br /&gt;
&lt;br /&gt;
* Finition du circuit (shield) pour la matrice LED et envoi de la demande de fabrication&lt;br /&gt;
&lt;br /&gt;
Nous avons rencontré un problème avec le logiciel nous avons donc dû refaire entièrement le circuit, cela nous a pas mal retardé dans notre projet.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Circuitp5.jpg|200px|]]&lt;br /&gt;
[[Fichier:circuit_bottom.jpg|200px|]]&lt;br /&gt;
&lt;br /&gt;
* Test du GPS et résolution des problèmes.&lt;br /&gt;
Nous avons rencontré beaucoup de problèmes avec le GPS, celui-ci se connectait bien aux satellites mais ne nous renvoyait que des données nulles ou bien un message d'erreur.&lt;br /&gt;
&lt;br /&gt;
Il s'est en faite avéré que selon la position du GPS receiver sur le shield celui-ci affichait ou non les données. &lt;br /&gt;
&lt;br /&gt;
Le problème a donc été résolu. Voici le code:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;}&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;TinyGPS++.h&amp;gt;&lt;br /&gt;
#include &amp;lt;SoftwareSerial.h&amp;gt;&lt;br /&gt;
#include &amp;lt;Wire.h&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
 This example uses software serial and the TinyGPS++ library by Mikal Hart&lt;br /&gt;
 Based on TinyGPSPlus/DeviceExample.ino by Mikal Hart&lt;br /&gt;
 Modified by acavis&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
// Choose two Arduino pins to use for software serial&lt;br /&gt;
// The GPS Shield uses D2 and D3 by default when in DLINE mode&lt;br /&gt;
int RXPin = 50;&lt;br /&gt;
int TXPin = 3; &lt;br /&gt;
&lt;br /&gt;
// The Skytaq EM-506 GPS module included in the GPS Shield Kit&lt;br /&gt;
// uses 4800 baud by default&lt;br /&gt;
int GPSBaud = 4800;&lt;br /&gt;
&lt;br /&gt;
// Create a TinyGPS++ object called &amp;quot;gps&amp;quot;&lt;br /&gt;
TinyGPSPlus gps;&lt;br /&gt;
&lt;br /&gt;
// Create a software serial port called &amp;quot;gpsSerial&amp;quot;&lt;br /&gt;
SoftwareSerial gpsSerial(RXPin, TXPin);&lt;br /&gt;
&lt;br /&gt;
void setup()&lt;br /&gt;
{&lt;br /&gt;
  // Start the Arduino hardware serial port at 9600 baud&lt;br /&gt;
  Serial.begin(9600);&lt;br /&gt;
&lt;br /&gt;
  // Start the software serial port at the GPS's default baud&lt;br /&gt;
  gpsSerial.begin(GPSBaud);&lt;br /&gt;
&lt;br /&gt;
  Serial.println(F(&amp;quot;DeviceExample.ino&amp;quot;));&lt;br /&gt;
  Serial.println(F(&amp;quot;A simple demonstration of TinyGPS++ with an attached GPS module&amp;quot;));&lt;br /&gt;
  Serial.print(F(&amp;quot;Testing TinyGPS++ library v. &amp;quot;)); Serial.println(TinyGPSPlus::libraryVersion());&lt;br /&gt;
  Serial.println(F(&amp;quot;by Mikal Hart&amp;quot;));&lt;br /&gt;
  Serial.println();&lt;br /&gt;
  &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop()&lt;br /&gt;
{&lt;br /&gt;
  // This sketch displays information every time a new sentence is correctly encoded.&lt;br /&gt;
  while (gpsSerial.available() &amp;gt; 0)&lt;br /&gt;
    if (gps.encode(gpsSerial.read()))&lt;br /&gt;
      displayInfo();&lt;br /&gt;
&lt;br /&gt;
  // If 5000 milliseconds pass and there are no characters coming in&lt;br /&gt;
  // over the software serial port, show a &amp;quot;No GPS detected&amp;quot; error&lt;br /&gt;
  if (millis() &amp;gt; 5000 &amp;amp;&amp;amp; gps.charsProcessed() &amp;lt; 10)&lt;br /&gt;
  {&lt;br /&gt;
    Serial.println(F(&amp;quot;No GPS detected&amp;quot;));&lt;br /&gt;
    while(true);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void displayInfo()&lt;br /&gt;
{&lt;br /&gt;
  Serial.print(F(&amp;quot;Speed: &amp;quot;)); &lt;br /&gt;
  if (gps.speed.isValid())&lt;br /&gt;
  {&lt;br /&gt;
    Serial.print(gps.speed.kmph(), 6);&lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
    Serial.print(F(&amp;quot;INVALID&amp;quot;));&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
  Serial.println();&lt;br /&gt;
&lt;br /&gt;
  secure_dist = (gps.speed.kmph()/10)*6; &lt;br /&gt;
  Serial.print(&amp;quot;distance de sécurite (en  m)= &amp;quot;);&lt;br /&gt;
  Serial.print(secure_dist);&lt;br /&gt;
  Serial.println();&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la cinquième séance==&lt;br /&gt;
* Soudage des barrettes et des ponts sur le circuit pour la Matrice LED (Shield)&lt;br /&gt;
&lt;br /&gt;
* Test de la matrice LED et codage du programme pour l'affichage d'un message personnalisé coloré&lt;br /&gt;
Message choisi: Ne me collez pas au cul, PUTAIN!!&lt;br /&gt;
Voici le code pour l'affichage du message. Celle-ci se fait grâce à un liaison série entre la raspberry Pi (RPI) et la matrice de de LED connectée à l’arduino Mega à travers le shield.&lt;br /&gt;
&lt;br /&gt;
Voici le code pour l'affichage:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/***************************************************&lt;br /&gt;
* &lt;br /&gt;
*NOTE THIS CAN ONLY BE USED ON A MEGA! NOT ENOUGH RAM ON UNO!&lt;br /&gt;
*&lt;br /&gt;
***************************************************&lt;br /&gt;
* 64x32 RGB LED Matrix - 4mm pitch&lt;br /&gt;
* ****************************************************&lt;br /&gt;
* testshapes demo for RGBmatrixPanel library.&lt;br /&gt;
* Demonstrates the drawing abilities of the RGBmatrixPanel library.&lt;br /&gt;
* For 32x64 RGB LED matrix.&lt;br /&gt;
 &lt;br /&gt;
* @author lg.gang(lg.gang@qq.com)&lt;br /&gt;
* @version  V1.0&lt;br /&gt;
* @date  2016-9-6&lt;br /&gt;
  &lt;br /&gt;
* GNU Lesser General Public License.&lt;br /&gt;
* See &amp;lt;http://www.gnu.org/licenses/&amp;gt; for details.&lt;br /&gt;
* All above must be included in any redistribution&lt;br /&gt;
* ****************************************************/ &lt;br /&gt;
#include &amp;lt;Adafruit_GFX.h&amp;gt;   // Core graphics library&lt;br /&gt;
#include &amp;lt;RGBmatrixPanel.h&amp;gt; // Hardware-specific library&lt;br /&gt;
&lt;br /&gt;
#define CLK 11  &lt;br /&gt;
#define OE  9&lt;br /&gt;
#define LAT 10&lt;br /&gt;
&lt;br /&gt;
#define A   A0&lt;br /&gt;
#define B   A1&lt;br /&gt;
#define C   A2&lt;br /&gt;
#define D   A3&lt;br /&gt;
&lt;br /&gt;
RGBmatrixPanel matrix(A, B, C, D, CLK, LAT, OE, false, 64);&lt;br /&gt;
char msg;&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin(9600);&lt;br /&gt;
  delay(1000);&lt;br /&gt;
  matrix.begin();&lt;br /&gt;
  &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
&lt;br /&gt;
  // draw a pixel in solid white&lt;br /&gt;
  //matrix.drawPixel(0, 0, matrix.Color333(7, 7, 7)); &lt;br /&gt;
  //delay(5000);&lt;br /&gt;
&lt;br /&gt;
  // fix the screen with green&lt;br /&gt;
  //matrix.fillRect(0, 0, matrix.width(), matrix.height(), matrix.Color333(0, 7, 0));&lt;br /&gt;
  //delay(5000);&lt;br /&gt;
  &lt;br /&gt;
  // fix the screen with white&lt;br /&gt;
  //matrix.fillRect(0, 0, matrix.width(), matrix.height(), matrix.Color333(7, 7, 7));&lt;br /&gt;
  //delay(5000);&lt;br /&gt;
  &lt;br /&gt;
  // fix the screen with red&lt;br /&gt;
  //matrix.fillRect(0, 0, matrix.width(), matrix.height(), matrix.Color333(7, 0, 0));&lt;br /&gt;
  //delay(5000);&lt;br /&gt;
  &lt;br /&gt;
  // fix the screen with blue&lt;br /&gt;
  //matrix.fillRect(0, 0, matrix.width(), matrix.height(), matrix.Color333(0, 0, 7));&lt;br /&gt;
  //delay(5000);&lt;br /&gt;
 // fill the screen with 'black'&lt;br /&gt;
  //matrix.fillScreen(matrix.Color333(0, 0, 0));&lt;br /&gt;
  &lt;br /&gt;
  // draw a box in yellow&lt;br /&gt;
  //matrix.drawRect(0, 0, matrix.width(), matrix.height(), matrix.Color333(7, 7, 0));&lt;br /&gt;
  //delay(5000);&lt;br /&gt;
  &lt;br /&gt;
  // draw a box in fuchsia&lt;br /&gt;
  //matrix.drawRect(5, 5, 53, 23, matrix.Color333(7, 0, 7));&lt;br /&gt;
  //delay(5000);&lt;br /&gt;
  &lt;br /&gt;
  // draw a box in yellow&lt;br /&gt;
  //matrix.drawRect(10, 10, 43, 13, matrix.Color333(7, 1, 3));&lt;br /&gt;
  //delay(5000);&lt;br /&gt;
  &lt;br /&gt;
  // draw an 'X' in red&lt;br /&gt;
  //matrix.drawLine(0, 0, matrix.width()-1, matrix.height()-1, matrix.Color333(7, 0, 0));&lt;br /&gt;
  //matrix.drawLine(matrix.width()-1, 0, 0, matrix.height()-1, matrix.Color333(7, 0, 0));&lt;br /&gt;
  //delay(5000);&lt;br /&gt;
  &lt;br /&gt;
  // draw a blue circle&lt;br /&gt;
  //matrix.drawCircle(10, 10, 10, matrix.Color333(0, 0, 7));&lt;br /&gt;
  //delay(5000);&lt;br /&gt;
  &lt;br /&gt;
  // fill a violet circle&lt;br /&gt;
  //matrix.fillCircle(40, 21, 10, matrix.Color333(7, 0, 7));&lt;br /&gt;
  //delay(5000);&lt;br /&gt;
  &lt;br /&gt;
   // fill the screen with 'black'&lt;br /&gt;
  //matrix.fillScreen(matrix.Color333(0, 0, 0));&lt;br /&gt;
&lt;br /&gt;
  while (Serial.available() &amp;gt; 0) {&lt;br /&gt;
&lt;br /&gt;
    //msg = Serial.read();&lt;br /&gt;
&lt;br /&gt;
    //Serial.print(msg);&lt;br /&gt;
   if(Serial.read() == 'o'){&lt;br /&gt;
  // draw some text!&lt;br /&gt;
  matrix.setTextSize(1);     // size 1 == 8 pixels high&lt;br /&gt;
  matrix.setTextWrap(false); // Don't wrap at end of line - will do ourselves&lt;br /&gt;
  matrix.setCursor(3, 0);  // start at top left, with 3 pixel of spacing&lt;br /&gt;
  uint8_t w = 0;&lt;br /&gt;
  char *str = &amp;quot;  Ne me   collez&amp;quot;;&lt;br /&gt;
  for (w=0; w&amp;lt;10; w++) {&lt;br /&gt;
    matrix.setTextColor(Wheel(w));&lt;br /&gt;
    matrix.print(str[w]);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  matrix.setCursor(13, 8);    // next line&lt;br /&gt;
  for (w=10; w&amp;lt;17; w++) {&lt;br /&gt;
    matrix.setTextColor(Wheel(w));&lt;br /&gt;
    matrix.print(str[w]);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  matrix.println();&lt;br /&gt;
  matrix.setCursor(2, 16);&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(7,1,0));&lt;br /&gt;
  matrix.print('p');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(7,3,0)); &lt;br /&gt;
  matrix.print('a');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(7,7,0));&lt;br /&gt;
  matrix.print('s');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(4,7,0)); &lt;br /&gt;
  matrix.print(' ');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(0,7,0));  &lt;br /&gt;
  matrix.print('a');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(0,7,7)); &lt;br /&gt;
  matrix.print('u');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(0,4,7)); &lt;br /&gt;
  matrix.print(' ');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(7,0,0));&lt;br /&gt;
  matrix.print('c');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(7,0,0)); &lt;br /&gt;
  matrix.print('u');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(7,0,0)); &lt;br /&gt;
  matrix.print('l');&lt;br /&gt;
  //matrix.setTextColor(matrix.Color333(7,7,7));&lt;br /&gt;
  //matrix.println(&amp;quot;pas au Cul&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  // print each letter with a rainbow color&lt;br /&gt;
  matrix.setCursor(3, 24);&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(7,0,0));&lt;br /&gt;
  matrix.print(' ');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(7,1,0)); &lt;br /&gt;
  matrix.print('P');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(7,3,0));&lt;br /&gt;
  matrix.print('U');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(4,7,0)); &lt;br /&gt;
  matrix.print('T');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(0,7,0));  &lt;br /&gt;
  matrix.print('A');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(0,7,7)); &lt;br /&gt;
  matrix.print('I');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(0,4,7)); &lt;br /&gt;
  matrix.print('N');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(0,0,7));&lt;br /&gt;
  matrix.print('!');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(4,0,7)); &lt;br /&gt;
  matrix.print('!');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(7,0,4)); &lt;br /&gt;
  matrix.println(' ');&lt;br /&gt;
  //delay(50000);&lt;br /&gt;
&lt;br /&gt;
} else {matrix.fillScreen(0);}&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
} &lt;br /&gt;
&lt;br /&gt;
// Input a value 0 to 24 to get a color value.&lt;br /&gt;
// The colours are a transition r - g - b - back to r.&lt;br /&gt;
uint16_t Wheel(byte WheelPos) {&lt;br /&gt;
  if(WheelPos &amp;lt; 8) {&lt;br /&gt;
   return matrix.Color333(7 - WheelPos, WheelPos, 0);&lt;br /&gt;
  } else if(WheelPos &amp;lt; 16) {&lt;br /&gt;
   WheelPos -= 8;&lt;br /&gt;
   return matrix.Color333(0, 7-WheelPos, WheelPos);&lt;br /&gt;
  } else {&lt;br /&gt;
   WheelPos -= 16;&lt;br /&gt;
   return matrix.Color333(0, WheelPos, 7 - WheelPos);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Configuartion de la RPI&lt;br /&gt;
&lt;br /&gt;
La raspberry pi (RPI) est chargé de recueillir la confirmation de l'utilisateur à travers l'application mobile, une fois ceci fait, elle lit les données envoyées provenant du traitement d'information sur la distance de sécurité et celle réelle avant de les envoyé vers le programme traitant de l'affichage du message. En fonction du message envoyé (dans notre cas c'est un caractère: 'O' ou 'o' si le message doit être envoyé et 'n' ou 'N' si c'est le contraire). Voici le code:&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
from bluetooth import *                                                         &lt;br /&gt;
import time                                                                     &lt;br /&gt;
import serial                                                                   &lt;br /&gt;
                                                                                &lt;br /&gt;
server_sock=BluetoothSocket( RFCOMM )                                           &lt;br /&gt;
server_sock.bind((&amp;quot;&amp;quot;,PORT_ANY))                                                 &lt;br /&gt;
server_sock.listen(1)                                                           &lt;br /&gt;
                                                                                &lt;br /&gt;
port = server_sock.getsockname()[1]                                             &lt;br /&gt;
                                                                                &lt;br /&gt;
uuid = &amp;quot;94f39d29-7d6d-437d-973b-fba39e49d4ee&amp;quot;                                   &lt;br /&gt;
                                                                                &lt;br /&gt;
advertise_service( server_sock, &amp;quot;SampleServer&amp;quot;,                                 &lt;br /&gt;
                   service_id = uuid,                                           &lt;br /&gt;
                   service_classes = [ uuid, SERIAL_PORT_CLASS ],               &lt;br /&gt;
                   profiles = [ SERIAL_PORT_PROFILE ],                          &lt;br /&gt;
#                   protocols = [ OBEX_UUID ]                                   &lt;br /&gt;
                    )                                                           &lt;br /&gt;
                                                                                &lt;br /&gt;
print(&amp;quot;Waiting for connection on RFCOMM channel %d&amp;quot; % port)                     &lt;br /&gt;
                                                                                &lt;br /&gt;
client_sock, client_info = server_sock.accept()                                 &lt;br /&gt;
print(&amp;quot;Accepted connection from &amp;quot;, client_info)&lt;br /&gt;
                                 &lt;br /&gt;
ser0 = serial.Serial('/dev/ttyACM0')       &lt;br /&gt;
Ser1 = serial.SERIAL('/dev/ttyACM1')                                      &lt;br /&gt;
                                                                                &lt;br /&gt;
try:                                                                            &lt;br /&gt;
    while True:                                                                 &lt;br /&gt;
        data = &amp;quot;&amp;quot;                                                                                           &lt;br /&gt;
        client_sock.recv(data)    &lt;br /&gt;
		data2 = ser1.read();&lt;br /&gt;
		if data2 == 'O'&lt;br /&gt;
			ser0.write('o')&lt;br /&gt;
		if data2 == 'N'&lt;br /&gt;
			ser0.write('n')&lt;br /&gt;
except IOError:                                                                 &lt;br /&gt;
    pass                                                                        &lt;br /&gt;
                                                                                &lt;br /&gt;
print(&amp;quot;disconnected&amp;quot;)                                                           &lt;br /&gt;
                                                                                &lt;br /&gt;
client_sock.close()                                                             &lt;br /&gt;
server_sock.close()                                                             &lt;br /&gt;
print(&amp;quot;all done&amp;quot;) &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Codage de l'application Mobile &lt;br /&gt;
Elle a pour but de permettre à l'utilisateur de se connecter, via bluetooth, à la RPI et de lui envoyer sa confirmation. Celui-ci peut également se déconnecter, s'il le souhaite.&lt;br /&gt;
[[Fichier:Appli iot.PNG|200px|]]&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la sixième séance==&lt;br /&gt;
* Test du fonctionnement du système complet&lt;br /&gt;
Problèmes rencontrés:&lt;br /&gt;
on a eu plusieurs bugs sur la partie RPI. On a eu du mal à faire les liaisons série entre les deux arduino.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Préparation de l'oral et finition du poster&lt;br /&gt;
&lt;br /&gt;
=Rendu=&lt;br /&gt;
&lt;br /&gt;
==Poster==&lt;br /&gt;
Version électronique du poster :&lt;br /&gt;
[[Fichier:2017_IOT_P5_poster.png|center|500px]]&lt;br /&gt;
&lt;br /&gt;
==Fichiers rendus==&lt;br /&gt;
&lt;br /&gt;
Notre application : [[Media:Rendu.zip]]&lt;/div&gt;</summary>
		<author><name>Mdiop</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P5_IOT_2017&amp;diff=46988</id>
		<title>P5 IOT 2017</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P5_IOT_2017&amp;diff=46988"/>
				<updated>2018-01-29T02:47:48Z</updated>
		
		<summary type="html">&lt;p&gt;Mdiop : /* Fichiers rendus */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation du sujet =&lt;br /&gt;
&lt;br /&gt;
==Contexte==&lt;br /&gt;
&lt;br /&gt;
Nous effectuons ce projet dans le cadre du module internet des objets (Internet of things). &lt;br /&gt;
&lt;br /&gt;
L'objectif de ce module est de créer l'objet connecté de notre choix.&lt;br /&gt;
&lt;br /&gt;
Nous avons donc choisi de créer un objet en rapport avec la sécurité routière: le système Safe&amp;amp;Drive.&lt;br /&gt;
&lt;br /&gt;
==Description du projet==&lt;br /&gt;
&lt;br /&gt;
Pour veiller au respect des distances de sécurité, le système S&amp;amp;D va tout d'abord évaluer la distance entre votre voiture et celle qui vous suit. &lt;br /&gt;
&lt;br /&gt;
Grâce au GPS intégré, la distance de sécurité à respecter sera calculée en fonction de votre vitesse de circulation.&lt;br /&gt;
&lt;br /&gt;
Si cette distance de sécurité n'est pas respectée, un message de mise en garde sera affiché sur votre pare-brise arrière à destination du conducteur qui vous suit de trop prêt.&lt;br /&gt;
&lt;br /&gt;
Bien évidemment, ce message ne sera envoyé qu'après confirmation de l'utilisateur depuis l'application mobile du système Safe&amp;amp;Drive.&lt;br /&gt;
&lt;br /&gt;
En mode marche arrière, le système devient une aide à la manœuvre avec une caméra de recul et un détecteur d'obstacle.&lt;br /&gt;
&lt;br /&gt;
=Réalisation=&lt;br /&gt;
&lt;br /&gt;
==Matériel utilisé==&lt;br /&gt;
&lt;br /&gt;
* Raspberry Pi&lt;br /&gt;
* Arduino Uno&lt;br /&gt;
* Arduino Mega2560&lt;br /&gt;
* SparkFun GPS Shield&lt;br /&gt;
* Adafruit 64x32 RGB LED Matrix - 5mm pitch&lt;br /&gt;
* Garmin LIDAR-Lite v3&lt;br /&gt;
&lt;br /&gt;
==Suivi de réalisation==&lt;br /&gt;
 {| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 1 (08/01/2018)&lt;br /&gt;
 | Choix de l'objet + Choix du matériel&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 2 (09/01/2018)&lt;br /&gt;
 | Circuit shield pour la matrice LED + Test Li-DAR Lite&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 3 (16/01/2018)&lt;br /&gt;
 | Circuit shield pour la matrice LED + Test du shield GPS&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 4 (17/01/2018)&lt;br /&gt;
 | Circuit shield pour la matrice LED + Test Shield GPS&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 5 (22/01/2018)&lt;br /&gt;
 | Soudage circuit shield pour la matrice LED + Test LED Matrix + RaspberryPI + Application mobile&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 6 (24/01/2018)&lt;br /&gt;
 | Finitions + Resolutions des problèmes + Préparation orale (+poster)&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la première séance==&lt;br /&gt;
&lt;br /&gt;
Pour choisir notre projet nous avons débuté en faisant un pseudo-brainstorming duquel est ressorti 4 projets.&lt;br /&gt;
&lt;br /&gt;
Nous donc dû réduire notre choix à un seul de ces quatre possibilités.&lt;br /&gt;
&lt;br /&gt;
Notre choix final s'est donc porté sur le système Safe&amp;amp;Drive.&lt;br /&gt;
&lt;br /&gt;
Après avoir affiné les divers fonctionnalités de notre projet, nous avons commencé à réunir le matériel dont nous aurions besoin.&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la deuxième séance==&lt;br /&gt;
&lt;br /&gt;
* Début de la création du shield de la matrice de LED qui viendra se positionner sur l’Arduino Mega2560.&lt;br /&gt;
&lt;br /&gt;
* Test du capteur optique LI-DAR Lite et codage du programme pour le calcul de distance.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 LIDARLite Arduino Library&lt;br /&gt;
  GetDistanceI2c&lt;br /&gt;
&lt;br /&gt;
  This example shows how to initialize, configure, and read distance from a&lt;br /&gt;
  LIDAR-Lite connected over the I2C interface.&lt;br /&gt;
&lt;br /&gt;
  Connections:&lt;br /&gt;
  LIDAR-Lite 5 Vdc (red) to Arduino 5v&lt;br /&gt;
  LIDAR-Lite I2C SCL (green) to Arduino SCL&lt;br /&gt;
  LIDAR-Lite I2C SDA (blue) to Arduino SDA&lt;br /&gt;
  LIDAR-Lite Ground (black) to Arduino GND&lt;br /&gt;
  &lt;br /&gt;
  (Capacitor recommended to mitigate inrush current when device is enabled)&lt;br /&gt;
  680uF capacitor (+) to Arduino 5v&lt;br /&gt;
  680uF capacitor (-) to Arduino GND&lt;br /&gt;
&lt;br /&gt;
  See the Operation Manual for wiring diagrams and more information:&lt;br /&gt;
  http://www.robotshop.com/media/files/pdf2/pli-06-instruction.pdf&lt;br /&gt;
&lt;br /&gt;
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;Wire.h&amp;gt;&lt;br /&gt;
#include &amp;lt;LIDARLite.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
LIDARLite myLidarLite;&lt;br /&gt;
int distance_reelle ;&lt;br /&gt;
&lt;br /&gt;
void setup()&lt;br /&gt;
{&lt;br /&gt;
  Serial.begin(9600); // Initialize serial connection to display distance readings&lt;br /&gt;
&lt;br /&gt;
  myLidarLite.begin(0, true); // Set configuration to default and I2C to 400 kHz&lt;br /&gt;
&lt;br /&gt;
  myLidarLite.configure(0); // Change this number to try out alternate configurations&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop()&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
  // Take a measurement with receiver bias correction and print to serial terminal&lt;br /&gt;
  distance_reelle = (myLidarLite.distance());&lt;br /&gt;
  if(distance_reelle &amp;lt; 1)&lt;br /&gt;
  {&lt;br /&gt;
	Serial.println('O');&lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
	Serial.println('N');&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la troisième séance==&lt;br /&gt;
&lt;br /&gt;
* Poursuite de la création du circuit (shield) pour la matrice LED. &lt;br /&gt;
Cela n'a pas été une tâche facile en raison de la répartition des différentes pâtes dont nous avions besoin et des liaisons à effectuer.&lt;br /&gt;
&lt;br /&gt;
* Test du GPS et codage du programme de calcul de vitesse.&lt;br /&gt;
Nous avons rencontré des problèmes avec le GPS, celui-ci ne renvoyait des message d'erreurs &amp;quot;NO GPS DETECTED&amp;quot; ou bien des données nulles du type &amp;quot;Date: 00/00/0000&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la quatrième séance==&lt;br /&gt;
&lt;br /&gt;
* Finition du circuit (shield) pour la matrice LED et envoi de la demande de fabrication&lt;br /&gt;
&lt;br /&gt;
Nous avons rencontré un problème avec le logiciel nous avons donc dû refaire entièrement le circuit, cela nous a pas mal retardé dans notre projet.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Circuitp5.jpg|200px|]]&lt;br /&gt;
[[Fichier:circuit_bottom.jpg|200px|]]&lt;br /&gt;
&lt;br /&gt;
* Test du GPS et résolution des problèmes.&lt;br /&gt;
Nous avons rencontré beaucoup de problèmes avec le GPS, celui-ci se connectait bien aux satellites mais ne nous renvoyait que des données nulles ou bien un message d'erreur.&lt;br /&gt;
&lt;br /&gt;
Il s'est en faite avéré que selon la position du GPS receiver sur le shield celui-ci affichait ou non les données. &lt;br /&gt;
&lt;br /&gt;
Le problème a donc été résolu. Voici le code:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;}&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;TinyGPS++.h&amp;gt;&lt;br /&gt;
#include &amp;lt;SoftwareSerial.h&amp;gt;&lt;br /&gt;
#include &amp;lt;Wire.h&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
 This example uses software serial and the TinyGPS++ library by Mikal Hart&lt;br /&gt;
 Based on TinyGPSPlus/DeviceExample.ino by Mikal Hart&lt;br /&gt;
 Modified by acavis&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
// Choose two Arduino pins to use for software serial&lt;br /&gt;
// The GPS Shield uses D2 and D3 by default when in DLINE mode&lt;br /&gt;
int RXPin = 50;&lt;br /&gt;
int TXPin = 3; &lt;br /&gt;
&lt;br /&gt;
// The Skytaq EM-506 GPS module included in the GPS Shield Kit&lt;br /&gt;
// uses 4800 baud by default&lt;br /&gt;
int GPSBaud = 4800;&lt;br /&gt;
&lt;br /&gt;
// Create a TinyGPS++ object called &amp;quot;gps&amp;quot;&lt;br /&gt;
TinyGPSPlus gps;&lt;br /&gt;
&lt;br /&gt;
// Create a software serial port called &amp;quot;gpsSerial&amp;quot;&lt;br /&gt;
SoftwareSerial gpsSerial(RXPin, TXPin);&lt;br /&gt;
&lt;br /&gt;
void setup()&lt;br /&gt;
{&lt;br /&gt;
  // Start the Arduino hardware serial port at 9600 baud&lt;br /&gt;
  Serial.begin(9600);&lt;br /&gt;
&lt;br /&gt;
  // Start the software serial port at the GPS's default baud&lt;br /&gt;
  gpsSerial.begin(GPSBaud);&lt;br /&gt;
&lt;br /&gt;
  Serial.println(F(&amp;quot;DeviceExample.ino&amp;quot;));&lt;br /&gt;
  Serial.println(F(&amp;quot;A simple demonstration of TinyGPS++ with an attached GPS module&amp;quot;));&lt;br /&gt;
  Serial.print(F(&amp;quot;Testing TinyGPS++ library v. &amp;quot;)); Serial.println(TinyGPSPlus::libraryVersion());&lt;br /&gt;
  Serial.println(F(&amp;quot;by Mikal Hart&amp;quot;));&lt;br /&gt;
  Serial.println();&lt;br /&gt;
  &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop()&lt;br /&gt;
{&lt;br /&gt;
  // This sketch displays information every time a new sentence is correctly encoded.&lt;br /&gt;
  while (gpsSerial.available() &amp;gt; 0)&lt;br /&gt;
    if (gps.encode(gpsSerial.read()))&lt;br /&gt;
      displayInfo();&lt;br /&gt;
&lt;br /&gt;
  // If 5000 milliseconds pass and there are no characters coming in&lt;br /&gt;
  // over the software serial port, show a &amp;quot;No GPS detected&amp;quot; error&lt;br /&gt;
  if (millis() &amp;gt; 5000 &amp;amp;&amp;amp; gps.charsProcessed() &amp;lt; 10)&lt;br /&gt;
  {&lt;br /&gt;
    Serial.println(F(&amp;quot;No GPS detected&amp;quot;));&lt;br /&gt;
    while(true);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void displayInfo()&lt;br /&gt;
{&lt;br /&gt;
  Serial.print(F(&amp;quot;Speed: &amp;quot;)); &lt;br /&gt;
  if (gps.speed.isValid())&lt;br /&gt;
  {&lt;br /&gt;
    Serial.print(gps.speed.kmph(), 6);&lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
    Serial.print(F(&amp;quot;INVALID&amp;quot;));&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
  Serial.println();&lt;br /&gt;
&lt;br /&gt;
  secure_dist = (gps.speed.kmph()/10)*6; &lt;br /&gt;
  Serial.print(&amp;quot;distance de sécurite (en  m)= &amp;quot;);&lt;br /&gt;
  Serial.print(secure_dist);&lt;br /&gt;
  Serial.println();&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la cinquième séance==&lt;br /&gt;
* Soudage des barrettes et des ponts sur le circuit pour la Matrice LED (Shield)&lt;br /&gt;
&lt;br /&gt;
* Test de la matrice LED et codage du programme pour l'affichage d'un message personnalisé coloré&lt;br /&gt;
Message choisi: Ne me collez pas au cul, PUTAIN!!&lt;br /&gt;
Voici le code pour l'affichage du message. Celle-ci se fait grâce à un liaison série entre la raspberry Pi (RPI) et la matrice de de LED connectée à l’arduino Mega à travers le shield.&lt;br /&gt;
&lt;br /&gt;
Voici le code pour l'affichage:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/***************************************************&lt;br /&gt;
* &lt;br /&gt;
*NOTE THIS CAN ONLY BE USED ON A MEGA! NOT ENOUGH RAM ON UNO!&lt;br /&gt;
*&lt;br /&gt;
***************************************************&lt;br /&gt;
* 64x32 RGB LED Matrix - 4mm pitch&lt;br /&gt;
* ****************************************************&lt;br /&gt;
* testshapes demo for RGBmatrixPanel library.&lt;br /&gt;
* Demonstrates the drawing abilities of the RGBmatrixPanel library.&lt;br /&gt;
* For 32x64 RGB LED matrix.&lt;br /&gt;
 &lt;br /&gt;
* @author lg.gang(lg.gang@qq.com)&lt;br /&gt;
* @version  V1.0&lt;br /&gt;
* @date  2016-9-6&lt;br /&gt;
  &lt;br /&gt;
* GNU Lesser General Public License.&lt;br /&gt;
* See &amp;lt;http://www.gnu.org/licenses/&amp;gt; for details.&lt;br /&gt;
* All above must be included in any redistribution&lt;br /&gt;
* ****************************************************/ &lt;br /&gt;
#include &amp;lt;Adafruit_GFX.h&amp;gt;   // Core graphics library&lt;br /&gt;
#include &amp;lt;RGBmatrixPanel.h&amp;gt; // Hardware-specific library&lt;br /&gt;
&lt;br /&gt;
#define CLK 11  &lt;br /&gt;
#define OE  9&lt;br /&gt;
#define LAT 10&lt;br /&gt;
&lt;br /&gt;
#define A   A0&lt;br /&gt;
#define B   A1&lt;br /&gt;
#define C   A2&lt;br /&gt;
#define D   A3&lt;br /&gt;
&lt;br /&gt;
RGBmatrixPanel matrix(A, B, C, D, CLK, LAT, OE, false, 64);&lt;br /&gt;
char msg;&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin(9600);&lt;br /&gt;
  delay(1000);&lt;br /&gt;
  matrix.begin();&lt;br /&gt;
  &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
&lt;br /&gt;
  // draw a pixel in solid white&lt;br /&gt;
  //matrix.drawPixel(0, 0, matrix.Color333(7, 7, 7)); &lt;br /&gt;
  //delay(5000);&lt;br /&gt;
&lt;br /&gt;
  // fix the screen with green&lt;br /&gt;
  //matrix.fillRect(0, 0, matrix.width(), matrix.height(), matrix.Color333(0, 7, 0));&lt;br /&gt;
  //delay(5000);&lt;br /&gt;
  &lt;br /&gt;
  // fix the screen with white&lt;br /&gt;
  //matrix.fillRect(0, 0, matrix.width(), matrix.height(), matrix.Color333(7, 7, 7));&lt;br /&gt;
  //delay(5000);&lt;br /&gt;
  &lt;br /&gt;
  // fix the screen with red&lt;br /&gt;
  //matrix.fillRect(0, 0, matrix.width(), matrix.height(), matrix.Color333(7, 0, 0));&lt;br /&gt;
  //delay(5000);&lt;br /&gt;
  &lt;br /&gt;
  // fix the screen with blue&lt;br /&gt;
  //matrix.fillRect(0, 0, matrix.width(), matrix.height(), matrix.Color333(0, 0, 7));&lt;br /&gt;
  //delay(5000);&lt;br /&gt;
 // fill the screen with 'black'&lt;br /&gt;
  //matrix.fillScreen(matrix.Color333(0, 0, 0));&lt;br /&gt;
  &lt;br /&gt;
  // draw a box in yellow&lt;br /&gt;
  //matrix.drawRect(0, 0, matrix.width(), matrix.height(), matrix.Color333(7, 7, 0));&lt;br /&gt;
  //delay(5000);&lt;br /&gt;
  &lt;br /&gt;
  // draw a box in fuchsia&lt;br /&gt;
  //matrix.drawRect(5, 5, 53, 23, matrix.Color333(7, 0, 7));&lt;br /&gt;
  //delay(5000);&lt;br /&gt;
  &lt;br /&gt;
  // draw a box in yellow&lt;br /&gt;
  //matrix.drawRect(10, 10, 43, 13, matrix.Color333(7, 1, 3));&lt;br /&gt;
  //delay(5000);&lt;br /&gt;
  &lt;br /&gt;
  // draw an 'X' in red&lt;br /&gt;
  //matrix.drawLine(0, 0, matrix.width()-1, matrix.height()-1, matrix.Color333(7, 0, 0));&lt;br /&gt;
  //matrix.drawLine(matrix.width()-1, 0, 0, matrix.height()-1, matrix.Color333(7, 0, 0));&lt;br /&gt;
  //delay(5000);&lt;br /&gt;
  &lt;br /&gt;
  // draw a blue circle&lt;br /&gt;
  //matrix.drawCircle(10, 10, 10, matrix.Color333(0, 0, 7));&lt;br /&gt;
  //delay(5000);&lt;br /&gt;
  &lt;br /&gt;
  // fill a violet circle&lt;br /&gt;
  //matrix.fillCircle(40, 21, 10, matrix.Color333(7, 0, 7));&lt;br /&gt;
  //delay(5000);&lt;br /&gt;
  &lt;br /&gt;
   // fill the screen with 'black'&lt;br /&gt;
  //matrix.fillScreen(matrix.Color333(0, 0, 0));&lt;br /&gt;
&lt;br /&gt;
  while (Serial.available() &amp;gt; 0) {&lt;br /&gt;
&lt;br /&gt;
    //msg = Serial.read();&lt;br /&gt;
&lt;br /&gt;
    //Serial.print(msg);&lt;br /&gt;
   if(Serial.read() == 'o'){&lt;br /&gt;
  // draw some text!&lt;br /&gt;
  matrix.setTextSize(1);     // size 1 == 8 pixels high&lt;br /&gt;
  matrix.setTextWrap(false); // Don't wrap at end of line - will do ourselves&lt;br /&gt;
  matrix.setCursor(3, 0);  // start at top left, with 3 pixel of spacing&lt;br /&gt;
  uint8_t w = 0;&lt;br /&gt;
  char *str = &amp;quot;  Ne me   collez&amp;quot;;&lt;br /&gt;
  for (w=0; w&amp;lt;10; w++) {&lt;br /&gt;
    matrix.setTextColor(Wheel(w));&lt;br /&gt;
    matrix.print(str[w]);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  matrix.setCursor(13, 8);    // next line&lt;br /&gt;
  for (w=10; w&amp;lt;17; w++) {&lt;br /&gt;
    matrix.setTextColor(Wheel(w));&lt;br /&gt;
    matrix.print(str[w]);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  matrix.println();&lt;br /&gt;
  matrix.setCursor(2, 16);&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(7,1,0));&lt;br /&gt;
  matrix.print('p');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(7,3,0)); &lt;br /&gt;
  matrix.print('a');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(7,7,0));&lt;br /&gt;
  matrix.print('s');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(4,7,0)); &lt;br /&gt;
  matrix.print(' ');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(0,7,0));  &lt;br /&gt;
  matrix.print('a');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(0,7,7)); &lt;br /&gt;
  matrix.print('u');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(0,4,7)); &lt;br /&gt;
  matrix.print(' ');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(7,0,0));&lt;br /&gt;
  matrix.print('c');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(7,0,0)); &lt;br /&gt;
  matrix.print('u');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(7,0,0)); &lt;br /&gt;
  matrix.print('l');&lt;br /&gt;
  //matrix.setTextColor(matrix.Color333(7,7,7));&lt;br /&gt;
  //matrix.println(&amp;quot;pas au Cul&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  // print each letter with a rainbow color&lt;br /&gt;
  matrix.setCursor(3, 24);&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(7,0,0));&lt;br /&gt;
  matrix.print(' ');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(7,1,0)); &lt;br /&gt;
  matrix.print('P');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(7,3,0));&lt;br /&gt;
  matrix.print('U');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(4,7,0)); &lt;br /&gt;
  matrix.print('T');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(0,7,0));  &lt;br /&gt;
  matrix.print('A');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(0,7,7)); &lt;br /&gt;
  matrix.print('I');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(0,4,7)); &lt;br /&gt;
  matrix.print('N');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(0,0,7));&lt;br /&gt;
  matrix.print('!');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(4,0,7)); &lt;br /&gt;
  matrix.print('!');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(7,0,4)); &lt;br /&gt;
  matrix.println(' ');&lt;br /&gt;
  //delay(50000);&lt;br /&gt;
&lt;br /&gt;
} else {matrix.fillScreen(0);}&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
} &lt;br /&gt;
&lt;br /&gt;
// Input a value 0 to 24 to get a color value.&lt;br /&gt;
// The colours are a transition r - g - b - back to r.&lt;br /&gt;
uint16_t Wheel(byte WheelPos) {&lt;br /&gt;
  if(WheelPos &amp;lt; 8) {&lt;br /&gt;
   return matrix.Color333(7 - WheelPos, WheelPos, 0);&lt;br /&gt;
  } else if(WheelPos &amp;lt; 16) {&lt;br /&gt;
   WheelPos -= 8;&lt;br /&gt;
   return matrix.Color333(0, 7-WheelPos, WheelPos);&lt;br /&gt;
  } else {&lt;br /&gt;
   WheelPos -= 16;&lt;br /&gt;
   return matrix.Color333(0, WheelPos, 7 - WheelPos);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Configuartion de la RPI&lt;br /&gt;
&lt;br /&gt;
La raspberry pi (RPI) est chargé de recueillir la confirmation de l'utilisateur à travers l'application mobile, une fois ceci fait, elle lit les données envoyées provenant du traitement d'information sur la distance de sécurité et celle réelle avant de les envoyé vers le programme traitant de l'affichage du message. En fonction du message envoyé (dans notre cas c'est un caractère: 'O' ou 'o' si le message doit être envoyé et 'n' ou 'N' si c'est le contraire). Voici le code:&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
from bluetooth import *                                                         &lt;br /&gt;
import time                                                                     &lt;br /&gt;
import serial                                                                   &lt;br /&gt;
                                                                                &lt;br /&gt;
server_sock=BluetoothSocket( RFCOMM )                                           &lt;br /&gt;
server_sock.bind((&amp;quot;&amp;quot;,PORT_ANY))                                                 &lt;br /&gt;
server_sock.listen(1)                                                           &lt;br /&gt;
                                                                                &lt;br /&gt;
port = server_sock.getsockname()[1]                                             &lt;br /&gt;
                                                                                &lt;br /&gt;
uuid = &amp;quot;94f39d29-7d6d-437d-973b-fba39e49d4ee&amp;quot;                                   &lt;br /&gt;
                                                                                &lt;br /&gt;
advertise_service( server_sock, &amp;quot;SampleServer&amp;quot;,                                 &lt;br /&gt;
                   service_id = uuid,                                           &lt;br /&gt;
                   service_classes = [ uuid, SERIAL_PORT_CLASS ],               &lt;br /&gt;
                   profiles = [ SERIAL_PORT_PROFILE ],                          &lt;br /&gt;
#                   protocols = [ OBEX_UUID ]                                   &lt;br /&gt;
                    )                                                           &lt;br /&gt;
                                                                                &lt;br /&gt;
print(&amp;quot;Waiting for connection on RFCOMM channel %d&amp;quot; % port)                     &lt;br /&gt;
                                                                                &lt;br /&gt;
client_sock, client_info = server_sock.accept()                                 &lt;br /&gt;
print(&amp;quot;Accepted connection from &amp;quot;, client_info)&lt;br /&gt;
                                 &lt;br /&gt;
ser0 = serial.Serial('/dev/ttyACM0')       &lt;br /&gt;
Ser1 = serial.SERIAL('/dev/ttyACM1')                                      &lt;br /&gt;
                                                                                &lt;br /&gt;
try:                                                                            &lt;br /&gt;
    while True:                                                                 &lt;br /&gt;
        data = &amp;quot;&amp;quot;                                                                                           &lt;br /&gt;
        client_sock.recv(data)    &lt;br /&gt;
		data2 = ser1.read();&lt;br /&gt;
		if data2 == 'O'&lt;br /&gt;
			ser0.write('o')&lt;br /&gt;
		if data2 == 'N'&lt;br /&gt;
			ser0.write('n')&lt;br /&gt;
except IOError:                                                                 &lt;br /&gt;
    pass                                                                        &lt;br /&gt;
                                                                                &lt;br /&gt;
print(&amp;quot;disconnected&amp;quot;)                                                           &lt;br /&gt;
                                                                                &lt;br /&gt;
client_sock.close()                                                             &lt;br /&gt;
server_sock.close()                                                             &lt;br /&gt;
print(&amp;quot;all done&amp;quot;) &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Codage de l'application Mobile &lt;br /&gt;
Elle a pour but de permettre à l'utilisateur de se connecter, via bluetooth, à la RPI et de lui envoyer sa confirmation. Celui-ci peut également se déconnecter, s'il le souhaite.&lt;br /&gt;
[[Fichier:Appli iot.PNG|200px|]]&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la sixième séance==&lt;br /&gt;
* Test du fonctionnement du système complet&lt;br /&gt;
Problèmes rencontrés:&lt;br /&gt;
on a eu plusieurs bug sur la partie RPI. On a eu du mal à faire les liaisons série entre les deux arduino.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Préparation de l'oral et finition du poster&lt;br /&gt;
&lt;br /&gt;
=Rendu=&lt;br /&gt;
&lt;br /&gt;
==Poster==&lt;br /&gt;
Version électronique du poster :&lt;br /&gt;
[[Fichier:2017_IOT_P5_poster.png|center|500px]]&lt;br /&gt;
&lt;br /&gt;
==Fichiers rendus==&lt;br /&gt;
&lt;br /&gt;
Notre application : [[Media:Rendu.zip]]&lt;/div&gt;</summary>
		<author><name>Mdiop</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Rendu.zip&amp;diff=46987</id>
		<title>Fichier:Rendu.zip</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Rendu.zip&amp;diff=46987"/>
				<updated>2018-01-29T02:47:15Z</updated>
		
		<summary type="html">&lt;p&gt;Mdiop : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Mdiop</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P5_IOT_2017&amp;diff=46986</id>
		<title>P5 IOT 2017</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P5_IOT_2017&amp;diff=46986"/>
				<updated>2018-01-29T02:40:27Z</updated>
		
		<summary type="html">&lt;p&gt;Mdiop : /* Détail du travail de la sixième séance */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation du sujet =&lt;br /&gt;
&lt;br /&gt;
==Contexte==&lt;br /&gt;
&lt;br /&gt;
Nous effectuons ce projet dans le cadre du module internet des objets (Internet of things). &lt;br /&gt;
&lt;br /&gt;
L'objectif de ce module est de créer l'objet connecté de notre choix.&lt;br /&gt;
&lt;br /&gt;
Nous avons donc choisi de créer un objet en rapport avec la sécurité routière: le système Safe&amp;amp;Drive.&lt;br /&gt;
&lt;br /&gt;
==Description du projet==&lt;br /&gt;
&lt;br /&gt;
Pour veiller au respect des distances de sécurité, le système S&amp;amp;D va tout d'abord évaluer la distance entre votre voiture et celle qui vous suit. &lt;br /&gt;
&lt;br /&gt;
Grâce au GPS intégré, la distance de sécurité à respecter sera calculée en fonction de votre vitesse de circulation.&lt;br /&gt;
&lt;br /&gt;
Si cette distance de sécurité n'est pas respectée, un message de mise en garde sera affiché sur votre pare-brise arrière à destination du conducteur qui vous suit de trop prêt.&lt;br /&gt;
&lt;br /&gt;
Bien évidemment, ce message ne sera envoyé qu'après confirmation de l'utilisateur depuis l'application mobile du système Safe&amp;amp;Drive.&lt;br /&gt;
&lt;br /&gt;
En mode marche arrière, le système devient une aide à la manœuvre avec une caméra de recul et un détecteur d'obstacle.&lt;br /&gt;
&lt;br /&gt;
=Réalisation=&lt;br /&gt;
&lt;br /&gt;
==Matériel utilisé==&lt;br /&gt;
&lt;br /&gt;
* Raspberry Pi&lt;br /&gt;
* Arduino Uno&lt;br /&gt;
* Arduino Mega2560&lt;br /&gt;
* SparkFun GPS Shield&lt;br /&gt;
* Adafruit 64x32 RGB LED Matrix - 5mm pitch&lt;br /&gt;
* Garmin LIDAR-Lite v3&lt;br /&gt;
&lt;br /&gt;
==Suivi de réalisation==&lt;br /&gt;
 {| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 1 (08/01/2018)&lt;br /&gt;
 | Choix de l'objet + Choix du matériel&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 2 (09/01/2018)&lt;br /&gt;
 | Circuit shield pour la matrice LED + Test Li-DAR Lite&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 3 (16/01/2018)&lt;br /&gt;
 | Circuit shield pour la matrice LED + Test du shield GPS&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 4 (17/01/2018)&lt;br /&gt;
 | Circuit shield pour la matrice LED + Test Shield GPS&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 5 (22/01/2018)&lt;br /&gt;
 | Soudage circuit shield pour la matrice LED + Test LED Matrix + RaspberryPI + Application mobile&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 6 (24/01/2018)&lt;br /&gt;
 | Finitions + Resolutions des problèmes + Préparation orale (+poster)&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la première séance==&lt;br /&gt;
&lt;br /&gt;
Pour choisir notre projet nous avons débuté en faisant un pseudo-brainstorming duquel est ressorti 4 projets.&lt;br /&gt;
&lt;br /&gt;
Nous donc dû réduire notre choix à un seul de ces quatre possibilités.&lt;br /&gt;
&lt;br /&gt;
Notre choix final s'est donc porté sur le système Safe&amp;amp;Drive.&lt;br /&gt;
&lt;br /&gt;
Après avoir affiné les divers fonctionnalités de notre projet, nous avons commencé à réunir le matériel dont nous aurions besoin.&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la deuxième séance==&lt;br /&gt;
&lt;br /&gt;
* Début de la création du shield de la matrice de LED qui viendra se positionner sur l’Arduino Mega2560.&lt;br /&gt;
&lt;br /&gt;
* Test du capteur optique LI-DAR Lite et codage du programme pour le calcul de distance.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 LIDARLite Arduino Library&lt;br /&gt;
  GetDistanceI2c&lt;br /&gt;
&lt;br /&gt;
  This example shows how to initialize, configure, and read distance from a&lt;br /&gt;
  LIDAR-Lite connected over the I2C interface.&lt;br /&gt;
&lt;br /&gt;
  Connections:&lt;br /&gt;
  LIDAR-Lite 5 Vdc (red) to Arduino 5v&lt;br /&gt;
  LIDAR-Lite I2C SCL (green) to Arduino SCL&lt;br /&gt;
  LIDAR-Lite I2C SDA (blue) to Arduino SDA&lt;br /&gt;
  LIDAR-Lite Ground (black) to Arduino GND&lt;br /&gt;
  &lt;br /&gt;
  (Capacitor recommended to mitigate inrush current when device is enabled)&lt;br /&gt;
  680uF capacitor (+) to Arduino 5v&lt;br /&gt;
  680uF capacitor (-) to Arduino GND&lt;br /&gt;
&lt;br /&gt;
  See the Operation Manual for wiring diagrams and more information:&lt;br /&gt;
  http://www.robotshop.com/media/files/pdf2/pli-06-instruction.pdf&lt;br /&gt;
&lt;br /&gt;
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;Wire.h&amp;gt;&lt;br /&gt;
#include &amp;lt;LIDARLite.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
LIDARLite myLidarLite;&lt;br /&gt;
int distance_reelle ;&lt;br /&gt;
&lt;br /&gt;
void setup()&lt;br /&gt;
{&lt;br /&gt;
  Serial.begin(9600); // Initialize serial connection to display distance readings&lt;br /&gt;
&lt;br /&gt;
  myLidarLite.begin(0, true); // Set configuration to default and I2C to 400 kHz&lt;br /&gt;
&lt;br /&gt;
  myLidarLite.configure(0); // Change this number to try out alternate configurations&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop()&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
  // Take a measurement with receiver bias correction and print to serial terminal&lt;br /&gt;
  distance_reelle = (myLidarLite.distance());&lt;br /&gt;
  if(distance_reelle &amp;lt; 1)&lt;br /&gt;
  {&lt;br /&gt;
	Serial.println('O');&lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
	Serial.println('N');&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la troisième séance==&lt;br /&gt;
&lt;br /&gt;
* Poursuite de la création du circuit (shield) pour la matrice LED. &lt;br /&gt;
Cela n'a pas été une tâche facile en raison de la répartition des différentes pâtes dont nous avions besoin et des liaisons à effectuer.&lt;br /&gt;
&lt;br /&gt;
* Test du GPS et codage du programme de calcul de vitesse.&lt;br /&gt;
Nous avons rencontré des problèmes avec le GPS, celui-ci ne renvoyait des message d'erreurs &amp;quot;NO GPS DETECTED&amp;quot; ou bien des données nulles du type &amp;quot;Date: 00/00/0000&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la quatrième séance==&lt;br /&gt;
&lt;br /&gt;
* Finition du circuit (shield) pour la matrice LED et envoi de la demande de fabrication&lt;br /&gt;
&lt;br /&gt;
Nous avons rencontré un problème avec le logiciel nous avons donc dû refaire entièrement le circuit, cela nous a pas mal retardé dans notre projet.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Circuitp5.jpg|200px|]]&lt;br /&gt;
[[Fichier:circuit_bottom.jpg|200px|]]&lt;br /&gt;
&lt;br /&gt;
* Test du GPS et résolution des problèmes.&lt;br /&gt;
Nous avons rencontré beaucoup de problèmes avec le GPS, celui-ci se connectait bien aux satellites mais ne nous renvoyait que des données nulles ou bien un message d'erreur.&lt;br /&gt;
&lt;br /&gt;
Il s'est en faite avéré que selon la position du GPS receiver sur le shield celui-ci affichait ou non les données. &lt;br /&gt;
&lt;br /&gt;
Le problème a donc été résolu. Voici le code:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;}&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;TinyGPS++.h&amp;gt;&lt;br /&gt;
#include &amp;lt;SoftwareSerial.h&amp;gt;&lt;br /&gt;
#include &amp;lt;Wire.h&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
 This example uses software serial and the TinyGPS++ library by Mikal Hart&lt;br /&gt;
 Based on TinyGPSPlus/DeviceExample.ino by Mikal Hart&lt;br /&gt;
 Modified by acavis&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
// Choose two Arduino pins to use for software serial&lt;br /&gt;
// The GPS Shield uses D2 and D3 by default when in DLINE mode&lt;br /&gt;
int RXPin = 50;&lt;br /&gt;
int TXPin = 3; &lt;br /&gt;
&lt;br /&gt;
// The Skytaq EM-506 GPS module included in the GPS Shield Kit&lt;br /&gt;
// uses 4800 baud by default&lt;br /&gt;
int GPSBaud = 4800;&lt;br /&gt;
&lt;br /&gt;
// Create a TinyGPS++ object called &amp;quot;gps&amp;quot;&lt;br /&gt;
TinyGPSPlus gps;&lt;br /&gt;
&lt;br /&gt;
// Create a software serial port called &amp;quot;gpsSerial&amp;quot;&lt;br /&gt;
SoftwareSerial gpsSerial(RXPin, TXPin);&lt;br /&gt;
&lt;br /&gt;
void setup()&lt;br /&gt;
{&lt;br /&gt;
  // Start the Arduino hardware serial port at 9600 baud&lt;br /&gt;
  Serial.begin(9600);&lt;br /&gt;
&lt;br /&gt;
  // Start the software serial port at the GPS's default baud&lt;br /&gt;
  gpsSerial.begin(GPSBaud);&lt;br /&gt;
&lt;br /&gt;
  Serial.println(F(&amp;quot;DeviceExample.ino&amp;quot;));&lt;br /&gt;
  Serial.println(F(&amp;quot;A simple demonstration of TinyGPS++ with an attached GPS module&amp;quot;));&lt;br /&gt;
  Serial.print(F(&amp;quot;Testing TinyGPS++ library v. &amp;quot;)); Serial.println(TinyGPSPlus::libraryVersion());&lt;br /&gt;
  Serial.println(F(&amp;quot;by Mikal Hart&amp;quot;));&lt;br /&gt;
  Serial.println();&lt;br /&gt;
  &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop()&lt;br /&gt;
{&lt;br /&gt;
  // This sketch displays information every time a new sentence is correctly encoded.&lt;br /&gt;
  while (gpsSerial.available() &amp;gt; 0)&lt;br /&gt;
    if (gps.encode(gpsSerial.read()))&lt;br /&gt;
      displayInfo();&lt;br /&gt;
&lt;br /&gt;
  // If 5000 milliseconds pass and there are no characters coming in&lt;br /&gt;
  // over the software serial port, show a &amp;quot;No GPS detected&amp;quot; error&lt;br /&gt;
  if (millis() &amp;gt; 5000 &amp;amp;&amp;amp; gps.charsProcessed() &amp;lt; 10)&lt;br /&gt;
  {&lt;br /&gt;
    Serial.println(F(&amp;quot;No GPS detected&amp;quot;));&lt;br /&gt;
    while(true);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void displayInfo()&lt;br /&gt;
{&lt;br /&gt;
  Serial.print(F(&amp;quot;Speed: &amp;quot;)); &lt;br /&gt;
  if (gps.speed.isValid())&lt;br /&gt;
  {&lt;br /&gt;
    Serial.print(gps.speed.kmph(), 6);&lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
    Serial.print(F(&amp;quot;INVALID&amp;quot;));&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
  Serial.println();&lt;br /&gt;
&lt;br /&gt;
  secure_dist = (gps.speed.kmph()/10)*6; &lt;br /&gt;
  Serial.print(&amp;quot;distance de sécurite (en  m)= &amp;quot;);&lt;br /&gt;
  Serial.print(secure_dist);&lt;br /&gt;
  Serial.println();&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la cinquième séance==&lt;br /&gt;
* Soudage des barrettes et des ponts sur le circuit pour la Matrice LED (Shield)&lt;br /&gt;
&lt;br /&gt;
* Test de la matrice LED et codage du programme pour l'affichage d'un message personnalisé coloré&lt;br /&gt;
Message choisi: Ne me collez pas au cul, PUTAIN!!&lt;br /&gt;
Voici le code pour l'affichage du message. Celle-ci se fait grâce à un liaison série entre la raspberry Pi (RPI) et la matrice de de LED connectée à l’arduino Mega à travers le shield.&lt;br /&gt;
&lt;br /&gt;
Voici le code pour l'affichage:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/***************************************************&lt;br /&gt;
* &lt;br /&gt;
*NOTE THIS CAN ONLY BE USED ON A MEGA! NOT ENOUGH RAM ON UNO!&lt;br /&gt;
*&lt;br /&gt;
***************************************************&lt;br /&gt;
* 64x32 RGB LED Matrix - 4mm pitch&lt;br /&gt;
* ****************************************************&lt;br /&gt;
* testshapes demo for RGBmatrixPanel library.&lt;br /&gt;
* Demonstrates the drawing abilities of the RGBmatrixPanel library.&lt;br /&gt;
* For 32x64 RGB LED matrix.&lt;br /&gt;
 &lt;br /&gt;
* @author lg.gang(lg.gang@qq.com)&lt;br /&gt;
* @version  V1.0&lt;br /&gt;
* @date  2016-9-6&lt;br /&gt;
  &lt;br /&gt;
* GNU Lesser General Public License.&lt;br /&gt;
* See &amp;lt;http://www.gnu.org/licenses/&amp;gt; for details.&lt;br /&gt;
* All above must be included in any redistribution&lt;br /&gt;
* ****************************************************/ &lt;br /&gt;
#include &amp;lt;Adafruit_GFX.h&amp;gt;   // Core graphics library&lt;br /&gt;
#include &amp;lt;RGBmatrixPanel.h&amp;gt; // Hardware-specific library&lt;br /&gt;
&lt;br /&gt;
#define CLK 11  &lt;br /&gt;
#define OE  9&lt;br /&gt;
#define LAT 10&lt;br /&gt;
&lt;br /&gt;
#define A   A0&lt;br /&gt;
#define B   A1&lt;br /&gt;
#define C   A2&lt;br /&gt;
#define D   A3&lt;br /&gt;
&lt;br /&gt;
RGBmatrixPanel matrix(A, B, C, D, CLK, LAT, OE, false, 64);&lt;br /&gt;
char msg;&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin(9600);&lt;br /&gt;
  delay(1000);&lt;br /&gt;
  matrix.begin();&lt;br /&gt;
  &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
&lt;br /&gt;
  // draw a pixel in solid white&lt;br /&gt;
  //matrix.drawPixel(0, 0, matrix.Color333(7, 7, 7)); &lt;br /&gt;
  //delay(5000);&lt;br /&gt;
&lt;br /&gt;
  // fix the screen with green&lt;br /&gt;
  //matrix.fillRect(0, 0, matrix.width(), matrix.height(), matrix.Color333(0, 7, 0));&lt;br /&gt;
  //delay(5000);&lt;br /&gt;
  &lt;br /&gt;
  // fix the screen with white&lt;br /&gt;
  //matrix.fillRect(0, 0, matrix.width(), matrix.height(), matrix.Color333(7, 7, 7));&lt;br /&gt;
  //delay(5000);&lt;br /&gt;
  &lt;br /&gt;
  // fix the screen with red&lt;br /&gt;
  //matrix.fillRect(0, 0, matrix.width(), matrix.height(), matrix.Color333(7, 0, 0));&lt;br /&gt;
  //delay(5000);&lt;br /&gt;
  &lt;br /&gt;
  // fix the screen with blue&lt;br /&gt;
  //matrix.fillRect(0, 0, matrix.width(), matrix.height(), matrix.Color333(0, 0, 7));&lt;br /&gt;
  //delay(5000);&lt;br /&gt;
 // fill the screen with 'black'&lt;br /&gt;
  //matrix.fillScreen(matrix.Color333(0, 0, 0));&lt;br /&gt;
  &lt;br /&gt;
  // draw a box in yellow&lt;br /&gt;
  //matrix.drawRect(0, 0, matrix.width(), matrix.height(), matrix.Color333(7, 7, 0));&lt;br /&gt;
  //delay(5000);&lt;br /&gt;
  &lt;br /&gt;
  // draw a box in fuchsia&lt;br /&gt;
  //matrix.drawRect(5, 5, 53, 23, matrix.Color333(7, 0, 7));&lt;br /&gt;
  //delay(5000);&lt;br /&gt;
  &lt;br /&gt;
  // draw a box in yellow&lt;br /&gt;
  //matrix.drawRect(10, 10, 43, 13, matrix.Color333(7, 1, 3));&lt;br /&gt;
  //delay(5000);&lt;br /&gt;
  &lt;br /&gt;
  // draw an 'X' in red&lt;br /&gt;
  //matrix.drawLine(0, 0, matrix.width()-1, matrix.height()-1, matrix.Color333(7, 0, 0));&lt;br /&gt;
  //matrix.drawLine(matrix.width()-1, 0, 0, matrix.height()-1, matrix.Color333(7, 0, 0));&lt;br /&gt;
  //delay(5000);&lt;br /&gt;
  &lt;br /&gt;
  // draw a blue circle&lt;br /&gt;
  //matrix.drawCircle(10, 10, 10, matrix.Color333(0, 0, 7));&lt;br /&gt;
  //delay(5000);&lt;br /&gt;
  &lt;br /&gt;
  // fill a violet circle&lt;br /&gt;
  //matrix.fillCircle(40, 21, 10, matrix.Color333(7, 0, 7));&lt;br /&gt;
  //delay(5000);&lt;br /&gt;
  &lt;br /&gt;
   // fill the screen with 'black'&lt;br /&gt;
  //matrix.fillScreen(matrix.Color333(0, 0, 0));&lt;br /&gt;
&lt;br /&gt;
  while (Serial.available() &amp;gt; 0) {&lt;br /&gt;
&lt;br /&gt;
    //msg = Serial.read();&lt;br /&gt;
&lt;br /&gt;
    //Serial.print(msg);&lt;br /&gt;
   if(Serial.read() == 'o'){&lt;br /&gt;
  // draw some text!&lt;br /&gt;
  matrix.setTextSize(1);     // size 1 == 8 pixels high&lt;br /&gt;
  matrix.setTextWrap(false); // Don't wrap at end of line - will do ourselves&lt;br /&gt;
  matrix.setCursor(3, 0);  // start at top left, with 3 pixel of spacing&lt;br /&gt;
  uint8_t w = 0;&lt;br /&gt;
  char *str = &amp;quot;  Ne me   collez&amp;quot;;&lt;br /&gt;
  for (w=0; w&amp;lt;10; w++) {&lt;br /&gt;
    matrix.setTextColor(Wheel(w));&lt;br /&gt;
    matrix.print(str[w]);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  matrix.setCursor(13, 8);    // next line&lt;br /&gt;
  for (w=10; w&amp;lt;17; w++) {&lt;br /&gt;
    matrix.setTextColor(Wheel(w));&lt;br /&gt;
    matrix.print(str[w]);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  matrix.println();&lt;br /&gt;
  matrix.setCursor(2, 16);&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(7,1,0));&lt;br /&gt;
  matrix.print('p');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(7,3,0)); &lt;br /&gt;
  matrix.print('a');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(7,7,0));&lt;br /&gt;
  matrix.print('s');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(4,7,0)); &lt;br /&gt;
  matrix.print(' ');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(0,7,0));  &lt;br /&gt;
  matrix.print('a');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(0,7,7)); &lt;br /&gt;
  matrix.print('u');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(0,4,7)); &lt;br /&gt;
  matrix.print(' ');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(7,0,0));&lt;br /&gt;
  matrix.print('c');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(7,0,0)); &lt;br /&gt;
  matrix.print('u');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(7,0,0)); &lt;br /&gt;
  matrix.print('l');&lt;br /&gt;
  //matrix.setTextColor(matrix.Color333(7,7,7));&lt;br /&gt;
  //matrix.println(&amp;quot;pas au Cul&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  // print each letter with a rainbow color&lt;br /&gt;
  matrix.setCursor(3, 24);&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(7,0,0));&lt;br /&gt;
  matrix.print(' ');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(7,1,0)); &lt;br /&gt;
  matrix.print('P');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(7,3,0));&lt;br /&gt;
  matrix.print('U');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(4,7,0)); &lt;br /&gt;
  matrix.print('T');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(0,7,0));  &lt;br /&gt;
  matrix.print('A');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(0,7,7)); &lt;br /&gt;
  matrix.print('I');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(0,4,7)); &lt;br /&gt;
  matrix.print('N');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(0,0,7));&lt;br /&gt;
  matrix.print('!');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(4,0,7)); &lt;br /&gt;
  matrix.print('!');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(7,0,4)); &lt;br /&gt;
  matrix.println(' ');&lt;br /&gt;
  //delay(50000);&lt;br /&gt;
&lt;br /&gt;
} else {matrix.fillScreen(0);}&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
} &lt;br /&gt;
&lt;br /&gt;
// Input a value 0 to 24 to get a color value.&lt;br /&gt;
// The colours are a transition r - g - b - back to r.&lt;br /&gt;
uint16_t Wheel(byte WheelPos) {&lt;br /&gt;
  if(WheelPos &amp;lt; 8) {&lt;br /&gt;
   return matrix.Color333(7 - WheelPos, WheelPos, 0);&lt;br /&gt;
  } else if(WheelPos &amp;lt; 16) {&lt;br /&gt;
   WheelPos -= 8;&lt;br /&gt;
   return matrix.Color333(0, 7-WheelPos, WheelPos);&lt;br /&gt;
  } else {&lt;br /&gt;
   WheelPos -= 16;&lt;br /&gt;
   return matrix.Color333(0, WheelPos, 7 - WheelPos);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Configuartion de la RPI&lt;br /&gt;
&lt;br /&gt;
La raspberry pi (RPI) est chargé de recueillir la confirmation de l'utilisateur à travers l'application mobile, une fois ceci fait, elle lit les données envoyées provenant du traitement d'information sur la distance de sécurité et celle réelle avant de les envoyé vers le programme traitant de l'affichage du message. En fonction du message envoyé (dans notre cas c'est un caractère: 'O' ou 'o' si le message doit être envoyé et 'n' ou 'N' si c'est le contraire). Voici le code:&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
from bluetooth import *                                                         &lt;br /&gt;
import time                                                                     &lt;br /&gt;
import serial                                                                   &lt;br /&gt;
                                                                                &lt;br /&gt;
server_sock=BluetoothSocket( RFCOMM )                                           &lt;br /&gt;
server_sock.bind((&amp;quot;&amp;quot;,PORT_ANY))                                                 &lt;br /&gt;
server_sock.listen(1)                                                           &lt;br /&gt;
                                                                                &lt;br /&gt;
port = server_sock.getsockname()[1]                                             &lt;br /&gt;
                                                                                &lt;br /&gt;
uuid = &amp;quot;94f39d29-7d6d-437d-973b-fba39e49d4ee&amp;quot;                                   &lt;br /&gt;
                                                                                &lt;br /&gt;
advertise_service( server_sock, &amp;quot;SampleServer&amp;quot;,                                 &lt;br /&gt;
                   service_id = uuid,                                           &lt;br /&gt;
                   service_classes = [ uuid, SERIAL_PORT_CLASS ],               &lt;br /&gt;
                   profiles = [ SERIAL_PORT_PROFILE ],                          &lt;br /&gt;
#                   protocols = [ OBEX_UUID ]                                   &lt;br /&gt;
                    )                                                           &lt;br /&gt;
                                                                                &lt;br /&gt;
print(&amp;quot;Waiting for connection on RFCOMM channel %d&amp;quot; % port)                     &lt;br /&gt;
                                                                                &lt;br /&gt;
client_sock, client_info = server_sock.accept()                                 &lt;br /&gt;
print(&amp;quot;Accepted connection from &amp;quot;, client_info)&lt;br /&gt;
                                 &lt;br /&gt;
ser0 = serial.Serial('/dev/ttyACM0')       &lt;br /&gt;
Ser1 = serial.SERIAL('/dev/ttyACM1')                                      &lt;br /&gt;
                                                                                &lt;br /&gt;
try:                                                                            &lt;br /&gt;
    while True:                                                                 &lt;br /&gt;
        data = &amp;quot;&amp;quot;                                                                                           &lt;br /&gt;
        client_sock.recv(data)    &lt;br /&gt;
		data2 = ser1.read();&lt;br /&gt;
		if data2 == 'O'&lt;br /&gt;
			ser0.write('o')&lt;br /&gt;
		if data2 == 'N'&lt;br /&gt;
			ser0.write('n')&lt;br /&gt;
except IOError:                                                                 &lt;br /&gt;
    pass                                                                        &lt;br /&gt;
                                                                                &lt;br /&gt;
print(&amp;quot;disconnected&amp;quot;)                                                           &lt;br /&gt;
                                                                                &lt;br /&gt;
client_sock.close()                                                             &lt;br /&gt;
server_sock.close()                                                             &lt;br /&gt;
print(&amp;quot;all done&amp;quot;) &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Codage de l'application Mobile &lt;br /&gt;
Elle a pour but de permettre à l'utilisateur de se connecter, via bluetooth, à la RPI et de lui envoyer sa confirmation. Celui-ci peut également se déconnecter, s'il le souhaite.&lt;br /&gt;
[[Fichier:Appli iot.PNG|200px|]]&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la sixième séance==&lt;br /&gt;
* Test du fonctionnement du système complet&lt;br /&gt;
Problèmes rencontrés:&lt;br /&gt;
on a eu plusieurs bug sur la partie RPI. On a eu du mal à faire les liaisons série entre les deux arduino.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Préparation de l'oral et finition du poster&lt;br /&gt;
&lt;br /&gt;
=Rendu=&lt;br /&gt;
&lt;br /&gt;
==Poster==&lt;br /&gt;
Version électronique du poster :&lt;br /&gt;
[[Fichier:2017_IOT_P5_poster.png|center|500px]]&lt;br /&gt;
&lt;br /&gt;
==Fichiers rendus==&lt;br /&gt;
&lt;br /&gt;
Notre application : [[Media:2017_IOT_P0_application.zip]]&lt;/div&gt;</summary>
		<author><name>Mdiop</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P5_IOT_2017&amp;diff=46985</id>
		<title>P5 IOT 2017</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P5_IOT_2017&amp;diff=46985"/>
				<updated>2018-01-29T02:38:54Z</updated>
		
		<summary type="html">&lt;p&gt;Mdiop : /* Détail du travail de la cinquième séance */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation du sujet =&lt;br /&gt;
&lt;br /&gt;
==Contexte==&lt;br /&gt;
&lt;br /&gt;
Nous effectuons ce projet dans le cadre du module internet des objets (Internet of things). &lt;br /&gt;
&lt;br /&gt;
L'objectif de ce module est de créer l'objet connecté de notre choix.&lt;br /&gt;
&lt;br /&gt;
Nous avons donc choisi de créer un objet en rapport avec la sécurité routière: le système Safe&amp;amp;Drive.&lt;br /&gt;
&lt;br /&gt;
==Description du projet==&lt;br /&gt;
&lt;br /&gt;
Pour veiller au respect des distances de sécurité, le système S&amp;amp;D va tout d'abord évaluer la distance entre votre voiture et celle qui vous suit. &lt;br /&gt;
&lt;br /&gt;
Grâce au GPS intégré, la distance de sécurité à respecter sera calculée en fonction de votre vitesse de circulation.&lt;br /&gt;
&lt;br /&gt;
Si cette distance de sécurité n'est pas respectée, un message de mise en garde sera affiché sur votre pare-brise arrière à destination du conducteur qui vous suit de trop prêt.&lt;br /&gt;
&lt;br /&gt;
Bien évidemment, ce message ne sera envoyé qu'après confirmation de l'utilisateur depuis l'application mobile du système Safe&amp;amp;Drive.&lt;br /&gt;
&lt;br /&gt;
En mode marche arrière, le système devient une aide à la manœuvre avec une caméra de recul et un détecteur d'obstacle.&lt;br /&gt;
&lt;br /&gt;
=Réalisation=&lt;br /&gt;
&lt;br /&gt;
==Matériel utilisé==&lt;br /&gt;
&lt;br /&gt;
* Raspberry Pi&lt;br /&gt;
* Arduino Uno&lt;br /&gt;
* Arduino Mega2560&lt;br /&gt;
* SparkFun GPS Shield&lt;br /&gt;
* Adafruit 64x32 RGB LED Matrix - 5mm pitch&lt;br /&gt;
* Garmin LIDAR-Lite v3&lt;br /&gt;
&lt;br /&gt;
==Suivi de réalisation==&lt;br /&gt;
 {| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 1 (08/01/2018)&lt;br /&gt;
 | Choix de l'objet + Choix du matériel&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 2 (09/01/2018)&lt;br /&gt;
 | Circuit shield pour la matrice LED + Test Li-DAR Lite&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 3 (16/01/2018)&lt;br /&gt;
 | Circuit shield pour la matrice LED + Test du shield GPS&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 4 (17/01/2018)&lt;br /&gt;
 | Circuit shield pour la matrice LED + Test Shield GPS&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 5 (22/01/2018)&lt;br /&gt;
 | Soudage circuit shield pour la matrice LED + Test LED Matrix + RaspberryPI + Application mobile&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 6 (24/01/2018)&lt;br /&gt;
 | Finitions + Resolutions des problèmes + Préparation orale (+poster)&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la première séance==&lt;br /&gt;
&lt;br /&gt;
Pour choisir notre projet nous avons débuté en faisant un pseudo-brainstorming duquel est ressorti 4 projets.&lt;br /&gt;
&lt;br /&gt;
Nous donc dû réduire notre choix à un seul de ces quatre possibilités.&lt;br /&gt;
&lt;br /&gt;
Notre choix final s'est donc porté sur le système Safe&amp;amp;Drive.&lt;br /&gt;
&lt;br /&gt;
Après avoir affiné les divers fonctionnalités de notre projet, nous avons commencé à réunir le matériel dont nous aurions besoin.&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la deuxième séance==&lt;br /&gt;
&lt;br /&gt;
* Début de la création du shield de la matrice de LED qui viendra se positionner sur l’Arduino Mega2560.&lt;br /&gt;
&lt;br /&gt;
* Test du capteur optique LI-DAR Lite et codage du programme pour le calcul de distance.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 LIDARLite Arduino Library&lt;br /&gt;
  GetDistanceI2c&lt;br /&gt;
&lt;br /&gt;
  This example shows how to initialize, configure, and read distance from a&lt;br /&gt;
  LIDAR-Lite connected over the I2C interface.&lt;br /&gt;
&lt;br /&gt;
  Connections:&lt;br /&gt;
  LIDAR-Lite 5 Vdc (red) to Arduino 5v&lt;br /&gt;
  LIDAR-Lite I2C SCL (green) to Arduino SCL&lt;br /&gt;
  LIDAR-Lite I2C SDA (blue) to Arduino SDA&lt;br /&gt;
  LIDAR-Lite Ground (black) to Arduino GND&lt;br /&gt;
  &lt;br /&gt;
  (Capacitor recommended to mitigate inrush current when device is enabled)&lt;br /&gt;
  680uF capacitor (+) to Arduino 5v&lt;br /&gt;
  680uF capacitor (-) to Arduino GND&lt;br /&gt;
&lt;br /&gt;
  See the Operation Manual for wiring diagrams and more information:&lt;br /&gt;
  http://www.robotshop.com/media/files/pdf2/pli-06-instruction.pdf&lt;br /&gt;
&lt;br /&gt;
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;Wire.h&amp;gt;&lt;br /&gt;
#include &amp;lt;LIDARLite.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
LIDARLite myLidarLite;&lt;br /&gt;
int distance_reelle ;&lt;br /&gt;
&lt;br /&gt;
void setup()&lt;br /&gt;
{&lt;br /&gt;
  Serial.begin(9600); // Initialize serial connection to display distance readings&lt;br /&gt;
&lt;br /&gt;
  myLidarLite.begin(0, true); // Set configuration to default and I2C to 400 kHz&lt;br /&gt;
&lt;br /&gt;
  myLidarLite.configure(0); // Change this number to try out alternate configurations&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop()&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
  // Take a measurement with receiver bias correction and print to serial terminal&lt;br /&gt;
  distance_reelle = (myLidarLite.distance());&lt;br /&gt;
  if(distance_reelle &amp;lt; 1)&lt;br /&gt;
  {&lt;br /&gt;
	Serial.println('O');&lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
	Serial.println('N');&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la troisième séance==&lt;br /&gt;
&lt;br /&gt;
* Poursuite de la création du circuit (shield) pour la matrice LED. &lt;br /&gt;
Cela n'a pas été une tâche facile en raison de la répartition des différentes pâtes dont nous avions besoin et des liaisons à effectuer.&lt;br /&gt;
&lt;br /&gt;
* Test du GPS et codage du programme de calcul de vitesse.&lt;br /&gt;
Nous avons rencontré des problèmes avec le GPS, celui-ci ne renvoyait des message d'erreurs &amp;quot;NO GPS DETECTED&amp;quot; ou bien des données nulles du type &amp;quot;Date: 00/00/0000&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la quatrième séance==&lt;br /&gt;
&lt;br /&gt;
* Finition du circuit (shield) pour la matrice LED et envoi de la demande de fabrication&lt;br /&gt;
&lt;br /&gt;
Nous avons rencontré un problème avec le logiciel nous avons donc dû refaire entièrement le circuit, cela nous a pas mal retardé dans notre projet.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Circuitp5.jpg|200px|]]&lt;br /&gt;
[[Fichier:circuit_bottom.jpg|200px|]]&lt;br /&gt;
&lt;br /&gt;
* Test du GPS et résolution des problèmes.&lt;br /&gt;
Nous avons rencontré beaucoup de problèmes avec le GPS, celui-ci se connectait bien aux satellites mais ne nous renvoyait que des données nulles ou bien un message d'erreur.&lt;br /&gt;
&lt;br /&gt;
Il s'est en faite avéré que selon la position du GPS receiver sur le shield celui-ci affichait ou non les données. &lt;br /&gt;
&lt;br /&gt;
Le problème a donc été résolu. Voici le code:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;}&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;TinyGPS++.h&amp;gt;&lt;br /&gt;
#include &amp;lt;SoftwareSerial.h&amp;gt;&lt;br /&gt;
#include &amp;lt;Wire.h&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
 This example uses software serial and the TinyGPS++ library by Mikal Hart&lt;br /&gt;
 Based on TinyGPSPlus/DeviceExample.ino by Mikal Hart&lt;br /&gt;
 Modified by acavis&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
// Choose two Arduino pins to use for software serial&lt;br /&gt;
// The GPS Shield uses D2 and D3 by default when in DLINE mode&lt;br /&gt;
int RXPin = 50;&lt;br /&gt;
int TXPin = 3; &lt;br /&gt;
&lt;br /&gt;
// The Skytaq EM-506 GPS module included in the GPS Shield Kit&lt;br /&gt;
// uses 4800 baud by default&lt;br /&gt;
int GPSBaud = 4800;&lt;br /&gt;
&lt;br /&gt;
// Create a TinyGPS++ object called &amp;quot;gps&amp;quot;&lt;br /&gt;
TinyGPSPlus gps;&lt;br /&gt;
&lt;br /&gt;
// Create a software serial port called &amp;quot;gpsSerial&amp;quot;&lt;br /&gt;
SoftwareSerial gpsSerial(RXPin, TXPin);&lt;br /&gt;
&lt;br /&gt;
void setup()&lt;br /&gt;
{&lt;br /&gt;
  // Start the Arduino hardware serial port at 9600 baud&lt;br /&gt;
  Serial.begin(9600);&lt;br /&gt;
&lt;br /&gt;
  // Start the software serial port at the GPS's default baud&lt;br /&gt;
  gpsSerial.begin(GPSBaud);&lt;br /&gt;
&lt;br /&gt;
  Serial.println(F(&amp;quot;DeviceExample.ino&amp;quot;));&lt;br /&gt;
  Serial.println(F(&amp;quot;A simple demonstration of TinyGPS++ with an attached GPS module&amp;quot;));&lt;br /&gt;
  Serial.print(F(&amp;quot;Testing TinyGPS++ library v. &amp;quot;)); Serial.println(TinyGPSPlus::libraryVersion());&lt;br /&gt;
  Serial.println(F(&amp;quot;by Mikal Hart&amp;quot;));&lt;br /&gt;
  Serial.println();&lt;br /&gt;
  &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop()&lt;br /&gt;
{&lt;br /&gt;
  // This sketch displays information every time a new sentence is correctly encoded.&lt;br /&gt;
  while (gpsSerial.available() &amp;gt; 0)&lt;br /&gt;
    if (gps.encode(gpsSerial.read()))&lt;br /&gt;
      displayInfo();&lt;br /&gt;
&lt;br /&gt;
  // If 5000 milliseconds pass and there are no characters coming in&lt;br /&gt;
  // over the software serial port, show a &amp;quot;No GPS detected&amp;quot; error&lt;br /&gt;
  if (millis() &amp;gt; 5000 &amp;amp;&amp;amp; gps.charsProcessed() &amp;lt; 10)&lt;br /&gt;
  {&lt;br /&gt;
    Serial.println(F(&amp;quot;No GPS detected&amp;quot;));&lt;br /&gt;
    while(true);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void displayInfo()&lt;br /&gt;
{&lt;br /&gt;
  Serial.print(F(&amp;quot;Speed: &amp;quot;)); &lt;br /&gt;
  if (gps.speed.isValid())&lt;br /&gt;
  {&lt;br /&gt;
    Serial.print(gps.speed.kmph(), 6);&lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
    Serial.print(F(&amp;quot;INVALID&amp;quot;));&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
  Serial.println();&lt;br /&gt;
&lt;br /&gt;
  secure_dist = (gps.speed.kmph()/10)*6; &lt;br /&gt;
  Serial.print(&amp;quot;distance de sécurite (en  m)= &amp;quot;);&lt;br /&gt;
  Serial.print(secure_dist);&lt;br /&gt;
  Serial.println();&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la cinquième séance==&lt;br /&gt;
* Soudage des barrettes et des ponts sur le circuit pour la Matrice LED (Shield)&lt;br /&gt;
&lt;br /&gt;
* Test de la matrice LED et codage du programme pour l'affichage d'un message personnalisé coloré&lt;br /&gt;
Message choisi: Ne me collez pas au cul, PUTAIN!!&lt;br /&gt;
Voici le code pour l'affichage du message. Celle-ci se fait grâce à un liaison série entre la raspberry Pi (RPI) et la matrice de de LED connectée à l’arduino Mega à travers le shield.&lt;br /&gt;
&lt;br /&gt;
Voici le code pour l'affichage:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/***************************************************&lt;br /&gt;
* &lt;br /&gt;
*NOTE THIS CAN ONLY BE USED ON A MEGA! NOT ENOUGH RAM ON UNO!&lt;br /&gt;
*&lt;br /&gt;
***************************************************&lt;br /&gt;
* 64x32 RGB LED Matrix - 4mm pitch&lt;br /&gt;
* ****************************************************&lt;br /&gt;
* testshapes demo for RGBmatrixPanel library.&lt;br /&gt;
* Demonstrates the drawing abilities of the RGBmatrixPanel library.&lt;br /&gt;
* For 32x64 RGB LED matrix.&lt;br /&gt;
 &lt;br /&gt;
* @author lg.gang(lg.gang@qq.com)&lt;br /&gt;
* @version  V1.0&lt;br /&gt;
* @date  2016-9-6&lt;br /&gt;
  &lt;br /&gt;
* GNU Lesser General Public License.&lt;br /&gt;
* See &amp;lt;http://www.gnu.org/licenses/&amp;gt; for details.&lt;br /&gt;
* All above must be included in any redistribution&lt;br /&gt;
* ****************************************************/ &lt;br /&gt;
#include &amp;lt;Adafruit_GFX.h&amp;gt;   // Core graphics library&lt;br /&gt;
#include &amp;lt;RGBmatrixPanel.h&amp;gt; // Hardware-specific library&lt;br /&gt;
&lt;br /&gt;
#define CLK 11  &lt;br /&gt;
#define OE  9&lt;br /&gt;
#define LAT 10&lt;br /&gt;
&lt;br /&gt;
#define A   A0&lt;br /&gt;
#define B   A1&lt;br /&gt;
#define C   A2&lt;br /&gt;
#define D   A3&lt;br /&gt;
&lt;br /&gt;
RGBmatrixPanel matrix(A, B, C, D, CLK, LAT, OE, false, 64);&lt;br /&gt;
char msg;&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin(9600);&lt;br /&gt;
  delay(1000);&lt;br /&gt;
  matrix.begin();&lt;br /&gt;
  &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
&lt;br /&gt;
  // draw a pixel in solid white&lt;br /&gt;
  //matrix.drawPixel(0, 0, matrix.Color333(7, 7, 7)); &lt;br /&gt;
  //delay(5000);&lt;br /&gt;
&lt;br /&gt;
  // fix the screen with green&lt;br /&gt;
  //matrix.fillRect(0, 0, matrix.width(), matrix.height(), matrix.Color333(0, 7, 0));&lt;br /&gt;
  //delay(5000);&lt;br /&gt;
  &lt;br /&gt;
  // fix the screen with white&lt;br /&gt;
  //matrix.fillRect(0, 0, matrix.width(), matrix.height(), matrix.Color333(7, 7, 7));&lt;br /&gt;
  //delay(5000);&lt;br /&gt;
  &lt;br /&gt;
  // fix the screen with red&lt;br /&gt;
  //matrix.fillRect(0, 0, matrix.width(), matrix.height(), matrix.Color333(7, 0, 0));&lt;br /&gt;
  //delay(5000);&lt;br /&gt;
  &lt;br /&gt;
  // fix the screen with blue&lt;br /&gt;
  //matrix.fillRect(0, 0, matrix.width(), matrix.height(), matrix.Color333(0, 0, 7));&lt;br /&gt;
  //delay(5000);&lt;br /&gt;
 // fill the screen with 'black'&lt;br /&gt;
  //matrix.fillScreen(matrix.Color333(0, 0, 0));&lt;br /&gt;
  &lt;br /&gt;
  // draw a box in yellow&lt;br /&gt;
  //matrix.drawRect(0, 0, matrix.width(), matrix.height(), matrix.Color333(7, 7, 0));&lt;br /&gt;
  //delay(5000);&lt;br /&gt;
  &lt;br /&gt;
  // draw a box in fuchsia&lt;br /&gt;
  //matrix.drawRect(5, 5, 53, 23, matrix.Color333(7, 0, 7));&lt;br /&gt;
  //delay(5000);&lt;br /&gt;
  &lt;br /&gt;
  // draw a box in yellow&lt;br /&gt;
  //matrix.drawRect(10, 10, 43, 13, matrix.Color333(7, 1, 3));&lt;br /&gt;
  //delay(5000);&lt;br /&gt;
  &lt;br /&gt;
  // draw an 'X' in red&lt;br /&gt;
  //matrix.drawLine(0, 0, matrix.width()-1, matrix.height()-1, matrix.Color333(7, 0, 0));&lt;br /&gt;
  //matrix.drawLine(matrix.width()-1, 0, 0, matrix.height()-1, matrix.Color333(7, 0, 0));&lt;br /&gt;
  //delay(5000);&lt;br /&gt;
  &lt;br /&gt;
  // draw a blue circle&lt;br /&gt;
  //matrix.drawCircle(10, 10, 10, matrix.Color333(0, 0, 7));&lt;br /&gt;
  //delay(5000);&lt;br /&gt;
  &lt;br /&gt;
  // fill a violet circle&lt;br /&gt;
  //matrix.fillCircle(40, 21, 10, matrix.Color333(7, 0, 7));&lt;br /&gt;
  //delay(5000);&lt;br /&gt;
  &lt;br /&gt;
   // fill the screen with 'black'&lt;br /&gt;
  //matrix.fillScreen(matrix.Color333(0, 0, 0));&lt;br /&gt;
&lt;br /&gt;
  while (Serial.available() &amp;gt; 0) {&lt;br /&gt;
&lt;br /&gt;
    //msg = Serial.read();&lt;br /&gt;
&lt;br /&gt;
    //Serial.print(msg);&lt;br /&gt;
   if(Serial.read() == 'o'){&lt;br /&gt;
  // draw some text!&lt;br /&gt;
  matrix.setTextSize(1);     // size 1 == 8 pixels high&lt;br /&gt;
  matrix.setTextWrap(false); // Don't wrap at end of line - will do ourselves&lt;br /&gt;
  matrix.setCursor(3, 0);  // start at top left, with 3 pixel of spacing&lt;br /&gt;
  uint8_t w = 0;&lt;br /&gt;
  char *str = &amp;quot;  Ne me   collez&amp;quot;;&lt;br /&gt;
  for (w=0; w&amp;lt;10; w++) {&lt;br /&gt;
    matrix.setTextColor(Wheel(w));&lt;br /&gt;
    matrix.print(str[w]);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  matrix.setCursor(13, 8);    // next line&lt;br /&gt;
  for (w=10; w&amp;lt;17; w++) {&lt;br /&gt;
    matrix.setTextColor(Wheel(w));&lt;br /&gt;
    matrix.print(str[w]);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  matrix.println();&lt;br /&gt;
  matrix.setCursor(2, 16);&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(7,1,0));&lt;br /&gt;
  matrix.print('p');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(7,3,0)); &lt;br /&gt;
  matrix.print('a');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(7,7,0));&lt;br /&gt;
  matrix.print('s');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(4,7,0)); &lt;br /&gt;
  matrix.print(' ');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(0,7,0));  &lt;br /&gt;
  matrix.print('a');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(0,7,7)); &lt;br /&gt;
  matrix.print('u');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(0,4,7)); &lt;br /&gt;
  matrix.print(' ');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(7,0,0));&lt;br /&gt;
  matrix.print('c');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(7,0,0)); &lt;br /&gt;
  matrix.print('u');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(7,0,0)); &lt;br /&gt;
  matrix.print('l');&lt;br /&gt;
  //matrix.setTextColor(matrix.Color333(7,7,7));&lt;br /&gt;
  //matrix.println(&amp;quot;pas au Cul&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  // print each letter with a rainbow color&lt;br /&gt;
  matrix.setCursor(3, 24);&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(7,0,0));&lt;br /&gt;
  matrix.print(' ');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(7,1,0)); &lt;br /&gt;
  matrix.print('P');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(7,3,0));&lt;br /&gt;
  matrix.print('U');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(4,7,0)); &lt;br /&gt;
  matrix.print('T');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(0,7,0));  &lt;br /&gt;
  matrix.print('A');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(0,7,7)); &lt;br /&gt;
  matrix.print('I');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(0,4,7)); &lt;br /&gt;
  matrix.print('N');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(0,0,7));&lt;br /&gt;
  matrix.print('!');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(4,0,7)); &lt;br /&gt;
  matrix.print('!');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(7,0,4)); &lt;br /&gt;
  matrix.println(' ');&lt;br /&gt;
  //delay(50000);&lt;br /&gt;
&lt;br /&gt;
} else {matrix.fillScreen(0);}&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
} &lt;br /&gt;
&lt;br /&gt;
// Input a value 0 to 24 to get a color value.&lt;br /&gt;
// The colours are a transition r - g - b - back to r.&lt;br /&gt;
uint16_t Wheel(byte WheelPos) {&lt;br /&gt;
  if(WheelPos &amp;lt; 8) {&lt;br /&gt;
   return matrix.Color333(7 - WheelPos, WheelPos, 0);&lt;br /&gt;
  } else if(WheelPos &amp;lt; 16) {&lt;br /&gt;
   WheelPos -= 8;&lt;br /&gt;
   return matrix.Color333(0, 7-WheelPos, WheelPos);&lt;br /&gt;
  } else {&lt;br /&gt;
   WheelPos -= 16;&lt;br /&gt;
   return matrix.Color333(0, WheelPos, 7 - WheelPos);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Configuartion de la RPI&lt;br /&gt;
&lt;br /&gt;
La raspberry pi (RPI) est chargé de recueillir la confirmation de l'utilisateur à travers l'application mobile, une fois ceci fait, elle lit les données envoyées provenant du traitement d'information sur la distance de sécurité et celle réelle avant de les envoyé vers le programme traitant de l'affichage du message. En fonction du message envoyé (dans notre cas c'est un caractère: 'O' ou 'o' si le message doit être envoyé et 'n' ou 'N' si c'est le contraire). Voici le code:&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
from bluetooth import *                                                         &lt;br /&gt;
import time                                                                     &lt;br /&gt;
import serial                                                                   &lt;br /&gt;
                                                                                &lt;br /&gt;
server_sock=BluetoothSocket( RFCOMM )                                           &lt;br /&gt;
server_sock.bind((&amp;quot;&amp;quot;,PORT_ANY))                                                 &lt;br /&gt;
server_sock.listen(1)                                                           &lt;br /&gt;
                                                                                &lt;br /&gt;
port = server_sock.getsockname()[1]                                             &lt;br /&gt;
                                                                                &lt;br /&gt;
uuid = &amp;quot;94f39d29-7d6d-437d-973b-fba39e49d4ee&amp;quot;                                   &lt;br /&gt;
                                                                                &lt;br /&gt;
advertise_service( server_sock, &amp;quot;SampleServer&amp;quot;,                                 &lt;br /&gt;
                   service_id = uuid,                                           &lt;br /&gt;
                   service_classes = [ uuid, SERIAL_PORT_CLASS ],               &lt;br /&gt;
                   profiles = [ SERIAL_PORT_PROFILE ],                          &lt;br /&gt;
#                   protocols = [ OBEX_UUID ]                                   &lt;br /&gt;
                    )                                                           &lt;br /&gt;
                                                                                &lt;br /&gt;
print(&amp;quot;Waiting for connection on RFCOMM channel %d&amp;quot; % port)                     &lt;br /&gt;
                                                                                &lt;br /&gt;
client_sock, client_info = server_sock.accept()                                 &lt;br /&gt;
print(&amp;quot;Accepted connection from &amp;quot;, client_info)&lt;br /&gt;
                                 &lt;br /&gt;
ser0 = serial.Serial('/dev/ttyACM0')       &lt;br /&gt;
Ser1 = serial.SERIAL('/dev/ttyACM1')                                      &lt;br /&gt;
                                                                                &lt;br /&gt;
try:                                                                            &lt;br /&gt;
    while True:                                                                 &lt;br /&gt;
        data = &amp;quot;&amp;quot;                                                                                           &lt;br /&gt;
        client_sock.recv(data)    &lt;br /&gt;
		data2 = ser1.read();&lt;br /&gt;
		if data2 == 'O'&lt;br /&gt;
			ser0.write('o')&lt;br /&gt;
		if data2 == 'N'&lt;br /&gt;
			ser0.write('n')&lt;br /&gt;
except IOError:                                                                 &lt;br /&gt;
    pass                                                                        &lt;br /&gt;
                                                                                &lt;br /&gt;
print(&amp;quot;disconnected&amp;quot;)                                                           &lt;br /&gt;
                                                                                &lt;br /&gt;
client_sock.close()                                                             &lt;br /&gt;
server_sock.close()                                                             &lt;br /&gt;
print(&amp;quot;all done&amp;quot;) &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Codage de l'application Mobile &lt;br /&gt;
Elle a pour but de permettre à l'utilisateur de se connecter, via bluetooth, à la RPI et de lui envoyer sa confirmation. Celui-ci peut également se déconnecter, s'il le souhaite.&lt;br /&gt;
[[Fichier:Appli iot.PNG|200px|]]&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la sixième séance==&lt;br /&gt;
* Test du fonctionnement du système complet&lt;br /&gt;
Problèmes rencontrés:&lt;br /&gt;
&lt;br /&gt;
'''[Partie ARAME]'''&lt;br /&gt;
&lt;br /&gt;
''[INSERER Code final]''&lt;br /&gt;
&lt;br /&gt;
* Préparation de l'oral et finition du poster&lt;br /&gt;
&lt;br /&gt;
=Rendu=&lt;br /&gt;
&lt;br /&gt;
==Poster==&lt;br /&gt;
Version électronique du poster :&lt;br /&gt;
[[Fichier:2017_IOT_P5_poster.png|center|500px]]&lt;br /&gt;
&lt;br /&gt;
==Fichiers rendus==&lt;br /&gt;
&lt;br /&gt;
Notre application : [[Media:2017_IOT_P0_application.zip]]&lt;/div&gt;</summary>
		<author><name>Mdiop</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P5_IOT_2017&amp;diff=46984</id>
		<title>P5 IOT 2017</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P5_IOT_2017&amp;diff=46984"/>
				<updated>2018-01-29T02:35:49Z</updated>
		
		<summary type="html">&lt;p&gt;Mdiop : /* Détail du travail de la cinquième séance */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation du sujet =&lt;br /&gt;
&lt;br /&gt;
==Contexte==&lt;br /&gt;
&lt;br /&gt;
Nous effectuons ce projet dans le cadre du module internet des objets (Internet of things). &lt;br /&gt;
&lt;br /&gt;
L'objectif de ce module est de créer l'objet connecté de notre choix.&lt;br /&gt;
&lt;br /&gt;
Nous avons donc choisi de créer un objet en rapport avec la sécurité routière: le système Safe&amp;amp;Drive.&lt;br /&gt;
&lt;br /&gt;
==Description du projet==&lt;br /&gt;
&lt;br /&gt;
Pour veiller au respect des distances de sécurité, le système S&amp;amp;D va tout d'abord évaluer la distance entre votre voiture et celle qui vous suit. &lt;br /&gt;
&lt;br /&gt;
Grâce au GPS intégré, la distance de sécurité à respecter sera calculée en fonction de votre vitesse de circulation.&lt;br /&gt;
&lt;br /&gt;
Si cette distance de sécurité n'est pas respectée, un message de mise en garde sera affiché sur votre pare-brise arrière à destination du conducteur qui vous suit de trop prêt.&lt;br /&gt;
&lt;br /&gt;
Bien évidemment, ce message ne sera envoyé qu'après confirmation de l'utilisateur depuis l'application mobile du système Safe&amp;amp;Drive.&lt;br /&gt;
&lt;br /&gt;
En mode marche arrière, le système devient une aide à la manœuvre avec une caméra de recul et un détecteur d'obstacle.&lt;br /&gt;
&lt;br /&gt;
=Réalisation=&lt;br /&gt;
&lt;br /&gt;
==Matériel utilisé==&lt;br /&gt;
&lt;br /&gt;
* Raspberry Pi&lt;br /&gt;
* Arduino Uno&lt;br /&gt;
* Arduino Mega2560&lt;br /&gt;
* SparkFun GPS Shield&lt;br /&gt;
* Adafruit 64x32 RGB LED Matrix - 5mm pitch&lt;br /&gt;
* Garmin LIDAR-Lite v3&lt;br /&gt;
&lt;br /&gt;
==Suivi de réalisation==&lt;br /&gt;
 {| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 1 (08/01/2018)&lt;br /&gt;
 | Choix de l'objet + Choix du matériel&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 2 (09/01/2018)&lt;br /&gt;
 | Circuit shield pour la matrice LED + Test Li-DAR Lite&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 3 (16/01/2018)&lt;br /&gt;
 | Circuit shield pour la matrice LED + Test du shield GPS&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 4 (17/01/2018)&lt;br /&gt;
 | Circuit shield pour la matrice LED + Test Shield GPS&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 5 (22/01/2018)&lt;br /&gt;
 | Soudage circuit shield pour la matrice LED + Test LED Matrix + RaspberryPI + Application mobile&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 6 (24/01/2018)&lt;br /&gt;
 | Finitions + Resolutions des problèmes + Préparation orale (+poster)&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la première séance==&lt;br /&gt;
&lt;br /&gt;
Pour choisir notre projet nous avons débuté en faisant un pseudo-brainstorming duquel est ressorti 4 projets.&lt;br /&gt;
&lt;br /&gt;
Nous donc dû réduire notre choix à un seul de ces quatre possibilités.&lt;br /&gt;
&lt;br /&gt;
Notre choix final s'est donc porté sur le système Safe&amp;amp;Drive.&lt;br /&gt;
&lt;br /&gt;
Après avoir affiné les divers fonctionnalités de notre projet, nous avons commencé à réunir le matériel dont nous aurions besoin.&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la deuxième séance==&lt;br /&gt;
&lt;br /&gt;
* Début de la création du shield de la matrice de LED qui viendra se positionner sur l’Arduino Mega2560.&lt;br /&gt;
&lt;br /&gt;
* Test du capteur optique LI-DAR Lite et codage du programme pour le calcul de distance.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 LIDARLite Arduino Library&lt;br /&gt;
  GetDistanceI2c&lt;br /&gt;
&lt;br /&gt;
  This example shows how to initialize, configure, and read distance from a&lt;br /&gt;
  LIDAR-Lite connected over the I2C interface.&lt;br /&gt;
&lt;br /&gt;
  Connections:&lt;br /&gt;
  LIDAR-Lite 5 Vdc (red) to Arduino 5v&lt;br /&gt;
  LIDAR-Lite I2C SCL (green) to Arduino SCL&lt;br /&gt;
  LIDAR-Lite I2C SDA (blue) to Arduino SDA&lt;br /&gt;
  LIDAR-Lite Ground (black) to Arduino GND&lt;br /&gt;
  &lt;br /&gt;
  (Capacitor recommended to mitigate inrush current when device is enabled)&lt;br /&gt;
  680uF capacitor (+) to Arduino 5v&lt;br /&gt;
  680uF capacitor (-) to Arduino GND&lt;br /&gt;
&lt;br /&gt;
  See the Operation Manual for wiring diagrams and more information:&lt;br /&gt;
  http://www.robotshop.com/media/files/pdf2/pli-06-instruction.pdf&lt;br /&gt;
&lt;br /&gt;
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;Wire.h&amp;gt;&lt;br /&gt;
#include &amp;lt;LIDARLite.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
LIDARLite myLidarLite;&lt;br /&gt;
int distance_reelle ;&lt;br /&gt;
&lt;br /&gt;
void setup()&lt;br /&gt;
{&lt;br /&gt;
  Serial.begin(9600); // Initialize serial connection to display distance readings&lt;br /&gt;
&lt;br /&gt;
  myLidarLite.begin(0, true); // Set configuration to default and I2C to 400 kHz&lt;br /&gt;
&lt;br /&gt;
  myLidarLite.configure(0); // Change this number to try out alternate configurations&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop()&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
  // Take a measurement with receiver bias correction and print to serial terminal&lt;br /&gt;
  distance_reelle = (myLidarLite.distance());&lt;br /&gt;
  if(distance_reelle &amp;lt; 1)&lt;br /&gt;
  {&lt;br /&gt;
	Serial.println('O');&lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
	Serial.println('N');&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la troisième séance==&lt;br /&gt;
&lt;br /&gt;
* Poursuite de la création du circuit (shield) pour la matrice LED. &lt;br /&gt;
Cela n'a pas été une tâche facile en raison de la répartition des différentes pâtes dont nous avions besoin et des liaisons à effectuer.&lt;br /&gt;
&lt;br /&gt;
* Test du GPS et codage du programme de calcul de vitesse.&lt;br /&gt;
Nous avons rencontré des problèmes avec le GPS, celui-ci ne renvoyait des message d'erreurs &amp;quot;NO GPS DETECTED&amp;quot; ou bien des données nulles du type &amp;quot;Date: 00/00/0000&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la quatrième séance==&lt;br /&gt;
&lt;br /&gt;
* Finition du circuit (shield) pour la matrice LED et envoi de la demande de fabrication&lt;br /&gt;
&lt;br /&gt;
Nous avons rencontré un problème avec le logiciel nous avons donc dû refaire entièrement le circuit, cela nous a pas mal retardé dans notre projet.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Circuitp5.jpg|200px|]]&lt;br /&gt;
[[Fichier:circuit_bottom.jpg|200px|]]&lt;br /&gt;
&lt;br /&gt;
* Test du GPS et résolution des problèmes.&lt;br /&gt;
Nous avons rencontré beaucoup de problèmes avec le GPS, celui-ci se connectait bien aux satellites mais ne nous renvoyait que des données nulles ou bien un message d'erreur.&lt;br /&gt;
&lt;br /&gt;
Il s'est en faite avéré que selon la position du GPS receiver sur le shield celui-ci affichait ou non les données. &lt;br /&gt;
&lt;br /&gt;
Le problème a donc été résolu. Voici le code:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;}&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;TinyGPS++.h&amp;gt;&lt;br /&gt;
#include &amp;lt;SoftwareSerial.h&amp;gt;&lt;br /&gt;
#include &amp;lt;Wire.h&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
 This example uses software serial and the TinyGPS++ library by Mikal Hart&lt;br /&gt;
 Based on TinyGPSPlus/DeviceExample.ino by Mikal Hart&lt;br /&gt;
 Modified by acavis&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
// Choose two Arduino pins to use for software serial&lt;br /&gt;
// The GPS Shield uses D2 and D3 by default when in DLINE mode&lt;br /&gt;
int RXPin = 50;&lt;br /&gt;
int TXPin = 3; &lt;br /&gt;
&lt;br /&gt;
// The Skytaq EM-506 GPS module included in the GPS Shield Kit&lt;br /&gt;
// uses 4800 baud by default&lt;br /&gt;
int GPSBaud = 4800;&lt;br /&gt;
&lt;br /&gt;
// Create a TinyGPS++ object called &amp;quot;gps&amp;quot;&lt;br /&gt;
TinyGPSPlus gps;&lt;br /&gt;
&lt;br /&gt;
// Create a software serial port called &amp;quot;gpsSerial&amp;quot;&lt;br /&gt;
SoftwareSerial gpsSerial(RXPin, TXPin);&lt;br /&gt;
&lt;br /&gt;
void setup()&lt;br /&gt;
{&lt;br /&gt;
  // Start the Arduino hardware serial port at 9600 baud&lt;br /&gt;
  Serial.begin(9600);&lt;br /&gt;
&lt;br /&gt;
  // Start the software serial port at the GPS's default baud&lt;br /&gt;
  gpsSerial.begin(GPSBaud);&lt;br /&gt;
&lt;br /&gt;
  Serial.println(F(&amp;quot;DeviceExample.ino&amp;quot;));&lt;br /&gt;
  Serial.println(F(&amp;quot;A simple demonstration of TinyGPS++ with an attached GPS module&amp;quot;));&lt;br /&gt;
  Serial.print(F(&amp;quot;Testing TinyGPS++ library v. &amp;quot;)); Serial.println(TinyGPSPlus::libraryVersion());&lt;br /&gt;
  Serial.println(F(&amp;quot;by Mikal Hart&amp;quot;));&lt;br /&gt;
  Serial.println();&lt;br /&gt;
  &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop()&lt;br /&gt;
{&lt;br /&gt;
  // This sketch displays information every time a new sentence is correctly encoded.&lt;br /&gt;
  while (gpsSerial.available() &amp;gt; 0)&lt;br /&gt;
    if (gps.encode(gpsSerial.read()))&lt;br /&gt;
      displayInfo();&lt;br /&gt;
&lt;br /&gt;
  // If 5000 milliseconds pass and there are no characters coming in&lt;br /&gt;
  // over the software serial port, show a &amp;quot;No GPS detected&amp;quot; error&lt;br /&gt;
  if (millis() &amp;gt; 5000 &amp;amp;&amp;amp; gps.charsProcessed() &amp;lt; 10)&lt;br /&gt;
  {&lt;br /&gt;
    Serial.println(F(&amp;quot;No GPS detected&amp;quot;));&lt;br /&gt;
    while(true);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void displayInfo()&lt;br /&gt;
{&lt;br /&gt;
  Serial.print(F(&amp;quot;Speed: &amp;quot;)); &lt;br /&gt;
  if (gps.speed.isValid())&lt;br /&gt;
  {&lt;br /&gt;
    Serial.print(gps.speed.kmph(), 6);&lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
    Serial.print(F(&amp;quot;INVALID&amp;quot;));&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
  Serial.println();&lt;br /&gt;
&lt;br /&gt;
  secure_dist = (gps.speed.kmph()/10)*6; &lt;br /&gt;
  Serial.print(&amp;quot;distance de sécurite (en  m)= &amp;quot;);&lt;br /&gt;
  Serial.print(secure_dist);&lt;br /&gt;
  Serial.println();&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la cinquième séance==&lt;br /&gt;
* Soudage des barrettes et des ponts sur le circuit pour la Matrice LED (Shield)&lt;br /&gt;
&lt;br /&gt;
* Test de la matrice LED et codage du programme pour l'affichage d'un message personnalisé coloré&lt;br /&gt;
Message choisi: Ne me collez pas au cul, PUTAIN!!&lt;br /&gt;
Voici le code pour l'affichage du message. Celle-ci se fait grâce à un liaison série entre la raspberry Pi (RPI) et la matrice de de LED connectée à l’arduino Mega à travers le shield.&lt;br /&gt;
&lt;br /&gt;
Voici le code pour l'affichage:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/***************************************************&lt;br /&gt;
* &lt;br /&gt;
*NOTE THIS CAN ONLY BE USED ON A MEGA! NOT ENOUGH RAM ON UNO!&lt;br /&gt;
*&lt;br /&gt;
***************************************************&lt;br /&gt;
* 64x32 RGB LED Matrix - 4mm pitch&lt;br /&gt;
* ****************************************************&lt;br /&gt;
* testshapes demo for RGBmatrixPanel library.&lt;br /&gt;
* Demonstrates the drawing abilities of the RGBmatrixPanel library.&lt;br /&gt;
* For 32x64 RGB LED matrix.&lt;br /&gt;
 &lt;br /&gt;
* @author lg.gang(lg.gang@qq.com)&lt;br /&gt;
* @version  V1.0&lt;br /&gt;
* @date  2016-9-6&lt;br /&gt;
  &lt;br /&gt;
* GNU Lesser General Public License.&lt;br /&gt;
* See &amp;lt;http://www.gnu.org/licenses/&amp;gt; for details.&lt;br /&gt;
* All above must be included in any redistribution&lt;br /&gt;
* ****************************************************/ &lt;br /&gt;
#include &amp;lt;Adafruit_GFX.h&amp;gt;   // Core graphics library&lt;br /&gt;
#include &amp;lt;RGBmatrixPanel.h&amp;gt; // Hardware-specific library&lt;br /&gt;
&lt;br /&gt;
#define CLK 11  &lt;br /&gt;
#define OE  9&lt;br /&gt;
#define LAT 10&lt;br /&gt;
&lt;br /&gt;
#define A   A0&lt;br /&gt;
#define B   A1&lt;br /&gt;
#define C   A2&lt;br /&gt;
#define D   A3&lt;br /&gt;
&lt;br /&gt;
RGBmatrixPanel matrix(A, B, C, D, CLK, LAT, OE, false, 64);&lt;br /&gt;
char msg;&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin(9600);&lt;br /&gt;
  delay(1000);&lt;br /&gt;
  matrix.begin();&lt;br /&gt;
  &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
&lt;br /&gt;
  // draw a pixel in solid white&lt;br /&gt;
  //matrix.drawPixel(0, 0, matrix.Color333(7, 7, 7)); &lt;br /&gt;
  //delay(5000);&lt;br /&gt;
&lt;br /&gt;
  // fix the screen with green&lt;br /&gt;
  //matrix.fillRect(0, 0, matrix.width(), matrix.height(), matrix.Color333(0, 7, 0));&lt;br /&gt;
  //delay(5000);&lt;br /&gt;
  &lt;br /&gt;
  // fix the screen with white&lt;br /&gt;
  //matrix.fillRect(0, 0, matrix.width(), matrix.height(), matrix.Color333(7, 7, 7));&lt;br /&gt;
  //delay(5000);&lt;br /&gt;
  &lt;br /&gt;
  // fix the screen with red&lt;br /&gt;
  //matrix.fillRect(0, 0, matrix.width(), matrix.height(), matrix.Color333(7, 0, 0));&lt;br /&gt;
  //delay(5000);&lt;br /&gt;
  &lt;br /&gt;
  // fix the screen with blue&lt;br /&gt;
  //matrix.fillRect(0, 0, matrix.width(), matrix.height(), matrix.Color333(0, 0, 7));&lt;br /&gt;
  //delay(5000);&lt;br /&gt;
 // fill the screen with 'black'&lt;br /&gt;
  //matrix.fillScreen(matrix.Color333(0, 0, 0));&lt;br /&gt;
  &lt;br /&gt;
  // draw a box in yellow&lt;br /&gt;
  //matrix.drawRect(0, 0, matrix.width(), matrix.height(), matrix.Color333(7, 7, 0));&lt;br /&gt;
  //delay(5000);&lt;br /&gt;
  &lt;br /&gt;
  // draw a box in fuchsia&lt;br /&gt;
  //matrix.drawRect(5, 5, 53, 23, matrix.Color333(7, 0, 7));&lt;br /&gt;
  //delay(5000);&lt;br /&gt;
  &lt;br /&gt;
  // draw a box in yellow&lt;br /&gt;
  //matrix.drawRect(10, 10, 43, 13, matrix.Color333(7, 1, 3));&lt;br /&gt;
  //delay(5000);&lt;br /&gt;
  &lt;br /&gt;
  // draw an 'X' in red&lt;br /&gt;
  //matrix.drawLine(0, 0, matrix.width()-1, matrix.height()-1, matrix.Color333(7, 0, 0));&lt;br /&gt;
  //matrix.drawLine(matrix.width()-1, 0, 0, matrix.height()-1, matrix.Color333(7, 0, 0));&lt;br /&gt;
  //delay(5000);&lt;br /&gt;
  &lt;br /&gt;
  // draw a blue circle&lt;br /&gt;
  //matrix.drawCircle(10, 10, 10, matrix.Color333(0, 0, 7));&lt;br /&gt;
  //delay(5000);&lt;br /&gt;
  &lt;br /&gt;
  // fill a violet circle&lt;br /&gt;
  //matrix.fillCircle(40, 21, 10, matrix.Color333(7, 0, 7));&lt;br /&gt;
  //delay(5000);&lt;br /&gt;
  &lt;br /&gt;
   // fill the screen with 'black'&lt;br /&gt;
  //matrix.fillScreen(matrix.Color333(0, 0, 0));&lt;br /&gt;
&lt;br /&gt;
  while (Serial.available() &amp;gt; 0) {&lt;br /&gt;
&lt;br /&gt;
    //msg = Serial.read();&lt;br /&gt;
&lt;br /&gt;
    //Serial.print(msg);&lt;br /&gt;
   if(Serial.read() == 'o'){&lt;br /&gt;
  // draw some text!&lt;br /&gt;
  matrix.setTextSize(1);     // size 1 == 8 pixels high&lt;br /&gt;
  matrix.setTextWrap(false); // Don't wrap at end of line - will do ourselves&lt;br /&gt;
  matrix.setCursor(3, 0);  // start at top left, with 3 pixel of spacing&lt;br /&gt;
  uint8_t w = 0;&lt;br /&gt;
  char *str = &amp;quot;  Ne me   collez&amp;quot;;&lt;br /&gt;
  for (w=0; w&amp;lt;10; w++) {&lt;br /&gt;
    matrix.setTextColor(Wheel(w));&lt;br /&gt;
    matrix.print(str[w]);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  matrix.setCursor(13, 8);    // next line&lt;br /&gt;
  for (w=10; w&amp;lt;17; w++) {&lt;br /&gt;
    matrix.setTextColor(Wheel(w));&lt;br /&gt;
    matrix.print(str[w]);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  matrix.println();&lt;br /&gt;
  matrix.setCursor(2, 16);&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(7,1,0));&lt;br /&gt;
  matrix.print('p');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(7,3,0)); &lt;br /&gt;
  matrix.print('a');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(7,7,0));&lt;br /&gt;
  matrix.print('s');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(4,7,0)); &lt;br /&gt;
  matrix.print(' ');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(0,7,0));  &lt;br /&gt;
  matrix.print('a');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(0,7,7)); &lt;br /&gt;
  matrix.print('u');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(0,4,7)); &lt;br /&gt;
  matrix.print(' ');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(7,0,0));&lt;br /&gt;
  matrix.print('c');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(7,0,0)); &lt;br /&gt;
  matrix.print('u');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(7,0,0)); &lt;br /&gt;
  matrix.print('l');&lt;br /&gt;
  //matrix.setTextColor(matrix.Color333(7,7,7));&lt;br /&gt;
  //matrix.println(&amp;quot;pas au Cul&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  // print each letter with a rainbow color&lt;br /&gt;
  matrix.setCursor(3, 24);&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(7,0,0));&lt;br /&gt;
  matrix.print(' ');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(7,1,0)); &lt;br /&gt;
  matrix.print('P');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(7,3,0));&lt;br /&gt;
  matrix.print('U');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(4,7,0)); &lt;br /&gt;
  matrix.print('T');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(0,7,0));  &lt;br /&gt;
  matrix.print('A');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(0,7,7)); &lt;br /&gt;
  matrix.print('I');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(0,4,7)); &lt;br /&gt;
  matrix.print('N');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(0,0,7));&lt;br /&gt;
  matrix.print('!');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(4,0,7)); &lt;br /&gt;
  matrix.print('!');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(7,0,4)); &lt;br /&gt;
  matrix.println(' ');&lt;br /&gt;
  //delay(50000);&lt;br /&gt;
&lt;br /&gt;
} else {matrix.fillScreen(0);}&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
} &lt;br /&gt;
&lt;br /&gt;
// Input a value 0 to 24 to get a color value.&lt;br /&gt;
// The colours are a transition r - g - b - back to r.&lt;br /&gt;
uint16_t Wheel(byte WheelPos) {&lt;br /&gt;
  if(WheelPos &amp;lt; 8) {&lt;br /&gt;
   return matrix.Color333(7 - WheelPos, WheelPos, 0);&lt;br /&gt;
  } else if(WheelPos &amp;lt; 16) {&lt;br /&gt;
   WheelPos -= 8;&lt;br /&gt;
   return matrix.Color333(0, 7-WheelPos, WheelPos);&lt;br /&gt;
  } else {&lt;br /&gt;
   WheelPos -= 16;&lt;br /&gt;
   return matrix.Color333(0, WheelPos, 7 - WheelPos);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Configuartion de la RPI&lt;br /&gt;
&lt;br /&gt;
La raspberry pi (RPI) est chargé de recueillir la confirmation de l'utilisateur à travers l'application mobile, une fois ceci fait, elle lit les données envoyées provenant du traitement d'information sur la distance de sécurité et celle réelle avant de les envoyé vers le programme traitant de l'affichage du message. En fonction du message envoyé (dans notre cas c'est un caractère: 'O' ou 'o' si le message doit être envoyé et 'n' ou 'N' si c'est le contraire). Voici le code:&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
from bluetooth import *                                                         &lt;br /&gt;
import time                                                                     &lt;br /&gt;
import serial                                                                   &lt;br /&gt;
                                                                                &lt;br /&gt;
server_sock=BluetoothSocket( RFCOMM )                                           &lt;br /&gt;
server_sock.bind((&amp;quot;&amp;quot;,PORT_ANY))                                                 &lt;br /&gt;
server_sock.listen(1)                                                           &lt;br /&gt;
                                                                                &lt;br /&gt;
port = server_sock.getsockname()[1]                                             &lt;br /&gt;
                                                                                &lt;br /&gt;
uuid = &amp;quot;94f39d29-7d6d-437d-973b-fba39e49d4ee&amp;quot;                                   &lt;br /&gt;
                                                                                &lt;br /&gt;
advertise_service( server_sock, &amp;quot;SampleServer&amp;quot;,                                 &lt;br /&gt;
                   service_id = uuid,                                           &lt;br /&gt;
                   service_classes = [ uuid, SERIAL_PORT_CLASS ],               &lt;br /&gt;
                   profiles = [ SERIAL_PORT_PROFILE ],                          &lt;br /&gt;
#                   protocols = [ OBEX_UUID ]                                   &lt;br /&gt;
                    )                                                           &lt;br /&gt;
                                                                                &lt;br /&gt;
print(&amp;quot;Waiting for connection on RFCOMM channel %d&amp;quot; % port)                     &lt;br /&gt;
                                                                                &lt;br /&gt;
client_sock, client_info = server_sock.accept()                                 &lt;br /&gt;
print(&amp;quot;Accepted connection from &amp;quot;, client_info)&lt;br /&gt;
                                 &lt;br /&gt;
ser0 = serial.Serial('/dev/ttyACM0')       &lt;br /&gt;
Ser1 = serial.SERIAL('/dev/ttyACM1')                                      &lt;br /&gt;
                                                                                &lt;br /&gt;
try:                                                                            &lt;br /&gt;
    while True:                                                                 &lt;br /&gt;
        data = &amp;quot;&amp;quot;                                                                                           &lt;br /&gt;
        client_sock.recv(data)    &lt;br /&gt;
		data2 = ser1.read();&lt;br /&gt;
		if data2 == 'O'&lt;br /&gt;
			ser0.write('o')&lt;br /&gt;
		if data2 == 'N'&lt;br /&gt;
			ser0.write('n')&lt;br /&gt;
except IOError:                                                                 &lt;br /&gt;
    pass                                                                        &lt;br /&gt;
                                                                                &lt;br /&gt;
print(&amp;quot;disconnected&amp;quot;)                                                           &lt;br /&gt;
                                                                                &lt;br /&gt;
client_sock.close()                                                             &lt;br /&gt;
server_sock.close()                                                             &lt;br /&gt;
print(&amp;quot;all done&amp;quot;) &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Codage de l'application Mobile &lt;br /&gt;
Elle a pour but de permettre à l'utilisateur de se connecter, via bluetooth, à la RPI et de lui envoyer sa confirmation. Celui-ci peut également se déconnecter, s'il le souhaite.&lt;br /&gt;
[[Fichier:Appli_iot.png|200px|]]&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la sixième séance==&lt;br /&gt;
* Test du fonctionnement du système complet&lt;br /&gt;
Problèmes rencontrés:&lt;br /&gt;
&lt;br /&gt;
'''[Partie ARAME]'''&lt;br /&gt;
&lt;br /&gt;
''[INSERER Code final]''&lt;br /&gt;
&lt;br /&gt;
* Préparation de l'oral et finition du poster&lt;br /&gt;
&lt;br /&gt;
=Rendu=&lt;br /&gt;
&lt;br /&gt;
==Poster==&lt;br /&gt;
Version électronique du poster :&lt;br /&gt;
[[Fichier:2017_IOT_P5_poster.png|center|500px]]&lt;br /&gt;
&lt;br /&gt;
==Fichiers rendus==&lt;br /&gt;
&lt;br /&gt;
Notre application : [[Media:2017_IOT_P0_application.zip]]&lt;/div&gt;</summary>
		<author><name>Mdiop</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P5_IOT_2017&amp;diff=46983</id>
		<title>P5 IOT 2017</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P5_IOT_2017&amp;diff=46983"/>
				<updated>2018-01-29T02:34:58Z</updated>
		
		<summary type="html">&lt;p&gt;Mdiop : /* Détail du travail de la cinquième séance */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation du sujet =&lt;br /&gt;
&lt;br /&gt;
==Contexte==&lt;br /&gt;
&lt;br /&gt;
Nous effectuons ce projet dans le cadre du module internet des objets (Internet of things). &lt;br /&gt;
&lt;br /&gt;
L'objectif de ce module est de créer l'objet connecté de notre choix.&lt;br /&gt;
&lt;br /&gt;
Nous avons donc choisi de créer un objet en rapport avec la sécurité routière: le système Safe&amp;amp;Drive.&lt;br /&gt;
&lt;br /&gt;
==Description du projet==&lt;br /&gt;
&lt;br /&gt;
Pour veiller au respect des distances de sécurité, le système S&amp;amp;D va tout d'abord évaluer la distance entre votre voiture et celle qui vous suit. &lt;br /&gt;
&lt;br /&gt;
Grâce au GPS intégré, la distance de sécurité à respecter sera calculée en fonction de votre vitesse de circulation.&lt;br /&gt;
&lt;br /&gt;
Si cette distance de sécurité n'est pas respectée, un message de mise en garde sera affiché sur votre pare-brise arrière à destination du conducteur qui vous suit de trop prêt.&lt;br /&gt;
&lt;br /&gt;
Bien évidemment, ce message ne sera envoyé qu'après confirmation de l'utilisateur depuis l'application mobile du système Safe&amp;amp;Drive.&lt;br /&gt;
&lt;br /&gt;
En mode marche arrière, le système devient une aide à la manœuvre avec une caméra de recul et un détecteur d'obstacle.&lt;br /&gt;
&lt;br /&gt;
=Réalisation=&lt;br /&gt;
&lt;br /&gt;
==Matériel utilisé==&lt;br /&gt;
&lt;br /&gt;
* Raspberry Pi&lt;br /&gt;
* Arduino Uno&lt;br /&gt;
* Arduino Mega2560&lt;br /&gt;
* SparkFun GPS Shield&lt;br /&gt;
* Adafruit 64x32 RGB LED Matrix - 5mm pitch&lt;br /&gt;
* Garmin LIDAR-Lite v3&lt;br /&gt;
&lt;br /&gt;
==Suivi de réalisation==&lt;br /&gt;
 {| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 1 (08/01/2018)&lt;br /&gt;
 | Choix de l'objet + Choix du matériel&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 2 (09/01/2018)&lt;br /&gt;
 | Circuit shield pour la matrice LED + Test Li-DAR Lite&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 3 (16/01/2018)&lt;br /&gt;
 | Circuit shield pour la matrice LED + Test du shield GPS&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 4 (17/01/2018)&lt;br /&gt;
 | Circuit shield pour la matrice LED + Test Shield GPS&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 5 (22/01/2018)&lt;br /&gt;
 | Soudage circuit shield pour la matrice LED + Test LED Matrix + RaspberryPI + Application mobile&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 6 (24/01/2018)&lt;br /&gt;
 | Finitions + Resolutions des problèmes + Préparation orale (+poster)&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la première séance==&lt;br /&gt;
&lt;br /&gt;
Pour choisir notre projet nous avons débuté en faisant un pseudo-brainstorming duquel est ressorti 4 projets.&lt;br /&gt;
&lt;br /&gt;
Nous donc dû réduire notre choix à un seul de ces quatre possibilités.&lt;br /&gt;
&lt;br /&gt;
Notre choix final s'est donc porté sur le système Safe&amp;amp;Drive.&lt;br /&gt;
&lt;br /&gt;
Après avoir affiné les divers fonctionnalités de notre projet, nous avons commencé à réunir le matériel dont nous aurions besoin.&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la deuxième séance==&lt;br /&gt;
&lt;br /&gt;
* Début de la création du shield de la matrice de LED qui viendra se positionner sur l’Arduino Mega2560.&lt;br /&gt;
&lt;br /&gt;
* Test du capteur optique LI-DAR Lite et codage du programme pour le calcul de distance.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 LIDARLite Arduino Library&lt;br /&gt;
  GetDistanceI2c&lt;br /&gt;
&lt;br /&gt;
  This example shows how to initialize, configure, and read distance from a&lt;br /&gt;
  LIDAR-Lite connected over the I2C interface.&lt;br /&gt;
&lt;br /&gt;
  Connections:&lt;br /&gt;
  LIDAR-Lite 5 Vdc (red) to Arduino 5v&lt;br /&gt;
  LIDAR-Lite I2C SCL (green) to Arduino SCL&lt;br /&gt;
  LIDAR-Lite I2C SDA (blue) to Arduino SDA&lt;br /&gt;
  LIDAR-Lite Ground (black) to Arduino GND&lt;br /&gt;
  &lt;br /&gt;
  (Capacitor recommended to mitigate inrush current when device is enabled)&lt;br /&gt;
  680uF capacitor (+) to Arduino 5v&lt;br /&gt;
  680uF capacitor (-) to Arduino GND&lt;br /&gt;
&lt;br /&gt;
  See the Operation Manual for wiring diagrams and more information:&lt;br /&gt;
  http://www.robotshop.com/media/files/pdf2/pli-06-instruction.pdf&lt;br /&gt;
&lt;br /&gt;
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;Wire.h&amp;gt;&lt;br /&gt;
#include &amp;lt;LIDARLite.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
LIDARLite myLidarLite;&lt;br /&gt;
int distance_reelle ;&lt;br /&gt;
&lt;br /&gt;
void setup()&lt;br /&gt;
{&lt;br /&gt;
  Serial.begin(9600); // Initialize serial connection to display distance readings&lt;br /&gt;
&lt;br /&gt;
  myLidarLite.begin(0, true); // Set configuration to default and I2C to 400 kHz&lt;br /&gt;
&lt;br /&gt;
  myLidarLite.configure(0); // Change this number to try out alternate configurations&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop()&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
  // Take a measurement with receiver bias correction and print to serial terminal&lt;br /&gt;
  distance_reelle = (myLidarLite.distance());&lt;br /&gt;
  if(distance_reelle &amp;lt; 1)&lt;br /&gt;
  {&lt;br /&gt;
	Serial.println('O');&lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
	Serial.println('N');&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la troisième séance==&lt;br /&gt;
&lt;br /&gt;
* Poursuite de la création du circuit (shield) pour la matrice LED. &lt;br /&gt;
Cela n'a pas été une tâche facile en raison de la répartition des différentes pâtes dont nous avions besoin et des liaisons à effectuer.&lt;br /&gt;
&lt;br /&gt;
* Test du GPS et codage du programme de calcul de vitesse.&lt;br /&gt;
Nous avons rencontré des problèmes avec le GPS, celui-ci ne renvoyait des message d'erreurs &amp;quot;NO GPS DETECTED&amp;quot; ou bien des données nulles du type &amp;quot;Date: 00/00/0000&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la quatrième séance==&lt;br /&gt;
&lt;br /&gt;
* Finition du circuit (shield) pour la matrice LED et envoi de la demande de fabrication&lt;br /&gt;
&lt;br /&gt;
Nous avons rencontré un problème avec le logiciel nous avons donc dû refaire entièrement le circuit, cela nous a pas mal retardé dans notre projet.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Circuitp5.jpg|200px|]]&lt;br /&gt;
[[Fichier:circuit_bottom.jpg|200px|]]&lt;br /&gt;
&lt;br /&gt;
* Test du GPS et résolution des problèmes.&lt;br /&gt;
Nous avons rencontré beaucoup de problèmes avec le GPS, celui-ci se connectait bien aux satellites mais ne nous renvoyait que des données nulles ou bien un message d'erreur.&lt;br /&gt;
&lt;br /&gt;
Il s'est en faite avéré que selon la position du GPS receiver sur le shield celui-ci affichait ou non les données. &lt;br /&gt;
&lt;br /&gt;
Le problème a donc été résolu. Voici le code:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;}&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;TinyGPS++.h&amp;gt;&lt;br /&gt;
#include &amp;lt;SoftwareSerial.h&amp;gt;&lt;br /&gt;
#include &amp;lt;Wire.h&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
 This example uses software serial and the TinyGPS++ library by Mikal Hart&lt;br /&gt;
 Based on TinyGPSPlus/DeviceExample.ino by Mikal Hart&lt;br /&gt;
 Modified by acavis&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
// Choose two Arduino pins to use for software serial&lt;br /&gt;
// The GPS Shield uses D2 and D3 by default when in DLINE mode&lt;br /&gt;
int RXPin = 50;&lt;br /&gt;
int TXPin = 3; &lt;br /&gt;
&lt;br /&gt;
// The Skytaq EM-506 GPS module included in the GPS Shield Kit&lt;br /&gt;
// uses 4800 baud by default&lt;br /&gt;
int GPSBaud = 4800;&lt;br /&gt;
&lt;br /&gt;
// Create a TinyGPS++ object called &amp;quot;gps&amp;quot;&lt;br /&gt;
TinyGPSPlus gps;&lt;br /&gt;
&lt;br /&gt;
// Create a software serial port called &amp;quot;gpsSerial&amp;quot;&lt;br /&gt;
SoftwareSerial gpsSerial(RXPin, TXPin);&lt;br /&gt;
&lt;br /&gt;
void setup()&lt;br /&gt;
{&lt;br /&gt;
  // Start the Arduino hardware serial port at 9600 baud&lt;br /&gt;
  Serial.begin(9600);&lt;br /&gt;
&lt;br /&gt;
  // Start the software serial port at the GPS's default baud&lt;br /&gt;
  gpsSerial.begin(GPSBaud);&lt;br /&gt;
&lt;br /&gt;
  Serial.println(F(&amp;quot;DeviceExample.ino&amp;quot;));&lt;br /&gt;
  Serial.println(F(&amp;quot;A simple demonstration of TinyGPS++ with an attached GPS module&amp;quot;));&lt;br /&gt;
  Serial.print(F(&amp;quot;Testing TinyGPS++ library v. &amp;quot;)); Serial.println(TinyGPSPlus::libraryVersion());&lt;br /&gt;
  Serial.println(F(&amp;quot;by Mikal Hart&amp;quot;));&lt;br /&gt;
  Serial.println();&lt;br /&gt;
  &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop()&lt;br /&gt;
{&lt;br /&gt;
  // This sketch displays information every time a new sentence is correctly encoded.&lt;br /&gt;
  while (gpsSerial.available() &amp;gt; 0)&lt;br /&gt;
    if (gps.encode(gpsSerial.read()))&lt;br /&gt;
      displayInfo();&lt;br /&gt;
&lt;br /&gt;
  // If 5000 milliseconds pass and there are no characters coming in&lt;br /&gt;
  // over the software serial port, show a &amp;quot;No GPS detected&amp;quot; error&lt;br /&gt;
  if (millis() &amp;gt; 5000 &amp;amp;&amp;amp; gps.charsProcessed() &amp;lt; 10)&lt;br /&gt;
  {&lt;br /&gt;
    Serial.println(F(&amp;quot;No GPS detected&amp;quot;));&lt;br /&gt;
    while(true);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void displayInfo()&lt;br /&gt;
{&lt;br /&gt;
  Serial.print(F(&amp;quot;Speed: &amp;quot;)); &lt;br /&gt;
  if (gps.speed.isValid())&lt;br /&gt;
  {&lt;br /&gt;
    Serial.print(gps.speed.kmph(), 6);&lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
    Serial.print(F(&amp;quot;INVALID&amp;quot;));&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
  Serial.println();&lt;br /&gt;
&lt;br /&gt;
  secure_dist = (gps.speed.kmph()/10)*6; &lt;br /&gt;
  Serial.print(&amp;quot;distance de sécurite (en  m)= &amp;quot;);&lt;br /&gt;
  Serial.print(secure_dist);&lt;br /&gt;
  Serial.println();&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la cinquième séance==&lt;br /&gt;
* Soudage des barrettes et des ponts sur le circuit pour la Matrice LED (Shield)&lt;br /&gt;
&lt;br /&gt;
* Test de la matrice LED et codage du programme pour l'affichage d'un message personnalisé coloré&lt;br /&gt;
Message choisi: Ne me collez pas au cul, PUTAIN!!&lt;br /&gt;
Voici le code pour l'affichage du message. Celle-ci se fait grâce à un liaison série entre la raspberry Pi (RPI) et la matrice de de LED connectée à l’arduino Mega à travers le shield.&lt;br /&gt;
&lt;br /&gt;
Voici le code pour l'affichage:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/***************************************************&lt;br /&gt;
* &lt;br /&gt;
*NOTE THIS CAN ONLY BE USED ON A MEGA! NOT ENOUGH RAM ON UNO!&lt;br /&gt;
*&lt;br /&gt;
***************************************************&lt;br /&gt;
* 64x32 RGB LED Matrix - 4mm pitch&lt;br /&gt;
* ****************************************************&lt;br /&gt;
* testshapes demo for RGBmatrixPanel library.&lt;br /&gt;
* Demonstrates the drawing abilities of the RGBmatrixPanel library.&lt;br /&gt;
* For 32x64 RGB LED matrix.&lt;br /&gt;
 &lt;br /&gt;
* @author lg.gang(lg.gang@qq.com)&lt;br /&gt;
* @version  V1.0&lt;br /&gt;
* @date  2016-9-6&lt;br /&gt;
  &lt;br /&gt;
* GNU Lesser General Public License.&lt;br /&gt;
* See &amp;lt;http://www.gnu.org/licenses/&amp;gt; for details.&lt;br /&gt;
* All above must be included in any redistribution&lt;br /&gt;
* ****************************************************/ &lt;br /&gt;
#include &amp;lt;Adafruit_GFX.h&amp;gt;   // Core graphics library&lt;br /&gt;
#include &amp;lt;RGBmatrixPanel.h&amp;gt; // Hardware-specific library&lt;br /&gt;
&lt;br /&gt;
#define CLK 11  &lt;br /&gt;
#define OE  9&lt;br /&gt;
#define LAT 10&lt;br /&gt;
&lt;br /&gt;
#define A   A0&lt;br /&gt;
#define B   A1&lt;br /&gt;
#define C   A2&lt;br /&gt;
#define D   A3&lt;br /&gt;
&lt;br /&gt;
RGBmatrixPanel matrix(A, B, C, D, CLK, LAT, OE, false, 64);&lt;br /&gt;
char msg;&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin(9600);&lt;br /&gt;
  delay(1000);&lt;br /&gt;
  matrix.begin();&lt;br /&gt;
  &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
&lt;br /&gt;
  // draw a pixel in solid white&lt;br /&gt;
  //matrix.drawPixel(0, 0, matrix.Color333(7, 7, 7)); &lt;br /&gt;
  //delay(5000);&lt;br /&gt;
&lt;br /&gt;
  // fix the screen with green&lt;br /&gt;
  //matrix.fillRect(0, 0, matrix.width(), matrix.height(), matrix.Color333(0, 7, 0));&lt;br /&gt;
  //delay(5000);&lt;br /&gt;
  &lt;br /&gt;
  // fix the screen with white&lt;br /&gt;
  //matrix.fillRect(0, 0, matrix.width(), matrix.height(), matrix.Color333(7, 7, 7));&lt;br /&gt;
  //delay(5000);&lt;br /&gt;
  &lt;br /&gt;
  // fix the screen with red&lt;br /&gt;
  //matrix.fillRect(0, 0, matrix.width(), matrix.height(), matrix.Color333(7, 0, 0));&lt;br /&gt;
  //delay(5000);&lt;br /&gt;
  &lt;br /&gt;
  // fix the screen with blue&lt;br /&gt;
  //matrix.fillRect(0, 0, matrix.width(), matrix.height(), matrix.Color333(0, 0, 7));&lt;br /&gt;
  //delay(5000);&lt;br /&gt;
 // fill the screen with 'black'&lt;br /&gt;
  //matrix.fillScreen(matrix.Color333(0, 0, 0));&lt;br /&gt;
  &lt;br /&gt;
  // draw a box in yellow&lt;br /&gt;
  //matrix.drawRect(0, 0, matrix.width(), matrix.height(), matrix.Color333(7, 7, 0));&lt;br /&gt;
  //delay(5000);&lt;br /&gt;
  &lt;br /&gt;
  // draw a box in fuchsia&lt;br /&gt;
  //matrix.drawRect(5, 5, 53, 23, matrix.Color333(7, 0, 7));&lt;br /&gt;
  //delay(5000);&lt;br /&gt;
  &lt;br /&gt;
  // draw a box in yellow&lt;br /&gt;
  //matrix.drawRect(10, 10, 43, 13, matrix.Color333(7, 1, 3));&lt;br /&gt;
  //delay(5000);&lt;br /&gt;
  &lt;br /&gt;
  // draw an 'X' in red&lt;br /&gt;
  //matrix.drawLine(0, 0, matrix.width()-1, matrix.height()-1, matrix.Color333(7, 0, 0));&lt;br /&gt;
  //matrix.drawLine(matrix.width()-1, 0, 0, matrix.height()-1, matrix.Color333(7, 0, 0));&lt;br /&gt;
  //delay(5000);&lt;br /&gt;
  &lt;br /&gt;
  // draw a blue circle&lt;br /&gt;
  //matrix.drawCircle(10, 10, 10, matrix.Color333(0, 0, 7));&lt;br /&gt;
  //delay(5000);&lt;br /&gt;
  &lt;br /&gt;
  // fill a violet circle&lt;br /&gt;
  //matrix.fillCircle(40, 21, 10, matrix.Color333(7, 0, 7));&lt;br /&gt;
  //delay(5000);&lt;br /&gt;
  &lt;br /&gt;
   // fill the screen with 'black'&lt;br /&gt;
  //matrix.fillScreen(matrix.Color333(0, 0, 0));&lt;br /&gt;
&lt;br /&gt;
  while (Serial.available() &amp;gt; 0) {&lt;br /&gt;
&lt;br /&gt;
    //msg = Serial.read();&lt;br /&gt;
&lt;br /&gt;
    //Serial.print(msg);&lt;br /&gt;
   if(Serial.read() == 'o'){&lt;br /&gt;
  // draw some text!&lt;br /&gt;
  matrix.setTextSize(1);     // size 1 == 8 pixels high&lt;br /&gt;
  matrix.setTextWrap(false); // Don't wrap at end of line - will do ourselves&lt;br /&gt;
  matrix.setCursor(3, 0);  // start at top left, with 3 pixel of spacing&lt;br /&gt;
  uint8_t w = 0;&lt;br /&gt;
  char *str = &amp;quot;  Ne me   collez&amp;quot;;&lt;br /&gt;
  for (w=0; w&amp;lt;10; w++) {&lt;br /&gt;
    matrix.setTextColor(Wheel(w));&lt;br /&gt;
    matrix.print(str[w]);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  matrix.setCursor(13, 8);    // next line&lt;br /&gt;
  for (w=10; w&amp;lt;17; w++) {&lt;br /&gt;
    matrix.setTextColor(Wheel(w));&lt;br /&gt;
    matrix.print(str[w]);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  matrix.println();&lt;br /&gt;
  matrix.setCursor(2, 16);&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(7,1,0));&lt;br /&gt;
  matrix.print('p');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(7,3,0)); &lt;br /&gt;
  matrix.print('a');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(7,7,0));&lt;br /&gt;
  matrix.print('s');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(4,7,0)); &lt;br /&gt;
  matrix.print(' ');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(0,7,0));  &lt;br /&gt;
  matrix.print('a');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(0,7,7)); &lt;br /&gt;
  matrix.print('u');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(0,4,7)); &lt;br /&gt;
  matrix.print(' ');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(7,0,0));&lt;br /&gt;
  matrix.print('c');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(7,0,0)); &lt;br /&gt;
  matrix.print('u');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(7,0,0)); &lt;br /&gt;
  matrix.print('l');&lt;br /&gt;
  //matrix.setTextColor(matrix.Color333(7,7,7));&lt;br /&gt;
  //matrix.println(&amp;quot;pas au Cul&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  // print each letter with a rainbow color&lt;br /&gt;
  matrix.setCursor(3, 24);&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(7,0,0));&lt;br /&gt;
  matrix.print(' ');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(7,1,0)); &lt;br /&gt;
  matrix.print('P');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(7,3,0));&lt;br /&gt;
  matrix.print('U');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(4,7,0)); &lt;br /&gt;
  matrix.print('T');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(0,7,0));  &lt;br /&gt;
  matrix.print('A');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(0,7,7)); &lt;br /&gt;
  matrix.print('I');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(0,4,7)); &lt;br /&gt;
  matrix.print('N');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(0,0,7));&lt;br /&gt;
  matrix.print('!');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(4,0,7)); &lt;br /&gt;
  matrix.print('!');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(7,0,4)); &lt;br /&gt;
  matrix.println(' ');&lt;br /&gt;
  //delay(50000);&lt;br /&gt;
&lt;br /&gt;
} else {matrix.fillScreen(0);}&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
} &lt;br /&gt;
&lt;br /&gt;
// Input a value 0 to 24 to get a color value.&lt;br /&gt;
// The colours are a transition r - g - b - back to r.&lt;br /&gt;
uint16_t Wheel(byte WheelPos) {&lt;br /&gt;
  if(WheelPos &amp;lt; 8) {&lt;br /&gt;
   return matrix.Color333(7 - WheelPos, WheelPos, 0);&lt;br /&gt;
  } else if(WheelPos &amp;lt; 16) {&lt;br /&gt;
   WheelPos -= 8;&lt;br /&gt;
   return matrix.Color333(0, 7-WheelPos, WheelPos);&lt;br /&gt;
  } else {&lt;br /&gt;
   WheelPos -= 16;&lt;br /&gt;
   return matrix.Color333(0, WheelPos, 7 - WheelPos);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Configuartion de la RPI&lt;br /&gt;
&lt;br /&gt;
La raspberry pi (RPI) est chargé de recueillir la confirmation de l'utilisateur à travers l'application mobile, une fois ceci fait, elle lit les données envoyées provenant du traitement d'information sur la distance de sécurité et celle réelle avant de les envoyé vers le programme traitant de l'affichage du message. En fonction du message envoyé (dans notre cas c'est un caractère: 'O' ou 'o' si le message doit être envoyé et 'n' ou 'N' si c'est le contraire). Voici le code:&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
from bluetooth import *                                                         &lt;br /&gt;
import time                                                                     &lt;br /&gt;
import serial                                                                   &lt;br /&gt;
                                                                                &lt;br /&gt;
server_sock=BluetoothSocket( RFCOMM )                                           &lt;br /&gt;
server_sock.bind((&amp;quot;&amp;quot;,PORT_ANY))                                                 &lt;br /&gt;
server_sock.listen(1)                                                           &lt;br /&gt;
                                                                                &lt;br /&gt;
port = server_sock.getsockname()[1]                                             &lt;br /&gt;
                                                                                &lt;br /&gt;
uuid = &amp;quot;94f39d29-7d6d-437d-973b-fba39e49d4ee&amp;quot;                                   &lt;br /&gt;
                                                                                &lt;br /&gt;
advertise_service( server_sock, &amp;quot;SampleServer&amp;quot;,                                 &lt;br /&gt;
                   service_id = uuid,                                           &lt;br /&gt;
                   service_classes = [ uuid, SERIAL_PORT_CLASS ],               &lt;br /&gt;
                   profiles = [ SERIAL_PORT_PROFILE ],                          &lt;br /&gt;
#                   protocols = [ OBEX_UUID ]                                   &lt;br /&gt;
                    )                                                           &lt;br /&gt;
                                                                                &lt;br /&gt;
print(&amp;quot;Waiting for connection on RFCOMM channel %d&amp;quot; % port)                     &lt;br /&gt;
                                                                                &lt;br /&gt;
client_sock, client_info = server_sock.accept()                                 &lt;br /&gt;
print(&amp;quot;Accepted connection from &amp;quot;, client_info)&lt;br /&gt;
                                 &lt;br /&gt;
ser0 = serial.Serial('/dev/ttyACM0')       &lt;br /&gt;
Ser1 = serial.SERIAL('/dev/ttyACM1')                                      &lt;br /&gt;
                                                                                &lt;br /&gt;
try:                                                                            &lt;br /&gt;
    while True:                                                                 &lt;br /&gt;
        data = &amp;quot;&amp;quot;                                                                                           &lt;br /&gt;
        client_sock.recv(data)    &lt;br /&gt;
		data2 = ser1.read();&lt;br /&gt;
		if data2 == 'O'&lt;br /&gt;
			ser0.write('o')&lt;br /&gt;
		if data2 == 'N'&lt;br /&gt;
			ser0.write('n')&lt;br /&gt;
except IOError:                                                                 &lt;br /&gt;
    pass                                                                        &lt;br /&gt;
                                                                                &lt;br /&gt;
print(&amp;quot;disconnected&amp;quot;)                                                           &lt;br /&gt;
                                                                                &lt;br /&gt;
client_sock.close()                                                             &lt;br /&gt;
server_sock.close()                                                             &lt;br /&gt;
print(&amp;quot;all done&amp;quot;) &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Codage de l'application Mobile &lt;br /&gt;
Elle a pour but de permettre à l'utilisateur de se connecter, via bluetooth, à la RPI et de lui envoyer sa confirmation. Celui-ci peut également se déconnecter, s'il le souhaite.&lt;br /&gt;
[[Fichier:Appli_iot.png|200px]]&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la sixième séance==&lt;br /&gt;
* Test du fonctionnement du système complet&lt;br /&gt;
Problèmes rencontrés:&lt;br /&gt;
&lt;br /&gt;
'''[Partie ARAME]'''&lt;br /&gt;
&lt;br /&gt;
''[INSERER Code final]''&lt;br /&gt;
&lt;br /&gt;
* Préparation de l'oral et finition du poster&lt;br /&gt;
&lt;br /&gt;
=Rendu=&lt;br /&gt;
&lt;br /&gt;
==Poster==&lt;br /&gt;
Version électronique du poster :&lt;br /&gt;
[[Fichier:2017_IOT_P5_poster.png|center|500px]]&lt;br /&gt;
&lt;br /&gt;
==Fichiers rendus==&lt;br /&gt;
&lt;br /&gt;
Notre application : [[Media:2017_IOT_P0_application.zip]]&lt;/div&gt;</summary>
		<author><name>Mdiop</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Panneau.jpg&amp;diff=46982</id>
		<title>Fichier:Panneau.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Panneau.jpg&amp;diff=46982"/>
				<updated>2018-01-29T02:33:07Z</updated>
		
		<summary type="html">&lt;p&gt;Mdiop : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Mdiop</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Appli_iot.PNG&amp;diff=46981</id>
		<title>Fichier:Appli iot.PNG</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Appli_iot.PNG&amp;diff=46981"/>
				<updated>2018-01-29T02:32:45Z</updated>
		
		<summary type="html">&lt;p&gt;Mdiop : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Mdiop</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P5_IOT_2017&amp;diff=46980</id>
		<title>P5 IOT 2017</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P5_IOT_2017&amp;diff=46980"/>
				<updated>2018-01-29T02:31:46Z</updated>
		
		<summary type="html">&lt;p&gt;Mdiop : /* Détail du travail de la cinquième séance */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation du sujet =&lt;br /&gt;
&lt;br /&gt;
==Contexte==&lt;br /&gt;
&lt;br /&gt;
Nous effectuons ce projet dans le cadre du module internet des objets (Internet of things). &lt;br /&gt;
&lt;br /&gt;
L'objectif de ce module est de créer l'objet connecté de notre choix.&lt;br /&gt;
&lt;br /&gt;
Nous avons donc choisi de créer un objet en rapport avec la sécurité routière: le système Safe&amp;amp;Drive.&lt;br /&gt;
&lt;br /&gt;
==Description du projet==&lt;br /&gt;
&lt;br /&gt;
Pour veiller au respect des distances de sécurité, le système S&amp;amp;D va tout d'abord évaluer la distance entre votre voiture et celle qui vous suit. &lt;br /&gt;
&lt;br /&gt;
Grâce au GPS intégré, la distance de sécurité à respecter sera calculée en fonction de votre vitesse de circulation.&lt;br /&gt;
&lt;br /&gt;
Si cette distance de sécurité n'est pas respectée, un message de mise en garde sera affiché sur votre pare-brise arrière à destination du conducteur qui vous suit de trop prêt.&lt;br /&gt;
&lt;br /&gt;
Bien évidemment, ce message ne sera envoyé qu'après confirmation de l'utilisateur depuis l'application mobile du système Safe&amp;amp;Drive.&lt;br /&gt;
&lt;br /&gt;
En mode marche arrière, le système devient une aide à la manœuvre avec une caméra de recul et un détecteur d'obstacle.&lt;br /&gt;
&lt;br /&gt;
=Réalisation=&lt;br /&gt;
&lt;br /&gt;
==Matériel utilisé==&lt;br /&gt;
&lt;br /&gt;
* Raspberry Pi&lt;br /&gt;
* Arduino Uno&lt;br /&gt;
* Arduino Mega2560&lt;br /&gt;
* SparkFun GPS Shield&lt;br /&gt;
* Adafruit 64x32 RGB LED Matrix - 5mm pitch&lt;br /&gt;
* Garmin LIDAR-Lite v3&lt;br /&gt;
&lt;br /&gt;
==Suivi de réalisation==&lt;br /&gt;
 {| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 1 (08/01/2018)&lt;br /&gt;
 | Choix de l'objet + Choix du matériel&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 2 (09/01/2018)&lt;br /&gt;
 | Circuit shield pour la matrice LED + Test Li-DAR Lite&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 3 (16/01/2018)&lt;br /&gt;
 | Circuit shield pour la matrice LED + Test du shield GPS&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 4 (17/01/2018)&lt;br /&gt;
 | Circuit shield pour la matrice LED + Test Shield GPS&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 5 (22/01/2018)&lt;br /&gt;
 | Soudage circuit shield pour la matrice LED + Test LED Matrix + RaspberryPI + Application mobile&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 6 (24/01/2018)&lt;br /&gt;
 | Finitions + Resolutions des problèmes + Préparation orale (+poster)&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la première séance==&lt;br /&gt;
&lt;br /&gt;
Pour choisir notre projet nous avons débuté en faisant un pseudo-brainstorming duquel est ressorti 4 projets.&lt;br /&gt;
&lt;br /&gt;
Nous donc dû réduire notre choix à un seul de ces quatre possibilités.&lt;br /&gt;
&lt;br /&gt;
Notre choix final s'est donc porté sur le système Safe&amp;amp;Drive.&lt;br /&gt;
&lt;br /&gt;
Après avoir affiné les divers fonctionnalités de notre projet, nous avons commencé à réunir le matériel dont nous aurions besoin.&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la deuxième séance==&lt;br /&gt;
&lt;br /&gt;
* Début de la création du shield de la matrice de LED qui viendra se positionner sur l’Arduino Mega2560.&lt;br /&gt;
&lt;br /&gt;
* Test du capteur optique LI-DAR Lite et codage du programme pour le calcul de distance.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 LIDARLite Arduino Library&lt;br /&gt;
  GetDistanceI2c&lt;br /&gt;
&lt;br /&gt;
  This example shows how to initialize, configure, and read distance from a&lt;br /&gt;
  LIDAR-Lite connected over the I2C interface.&lt;br /&gt;
&lt;br /&gt;
  Connections:&lt;br /&gt;
  LIDAR-Lite 5 Vdc (red) to Arduino 5v&lt;br /&gt;
  LIDAR-Lite I2C SCL (green) to Arduino SCL&lt;br /&gt;
  LIDAR-Lite I2C SDA (blue) to Arduino SDA&lt;br /&gt;
  LIDAR-Lite Ground (black) to Arduino GND&lt;br /&gt;
  &lt;br /&gt;
  (Capacitor recommended to mitigate inrush current when device is enabled)&lt;br /&gt;
  680uF capacitor (+) to Arduino 5v&lt;br /&gt;
  680uF capacitor (-) to Arduino GND&lt;br /&gt;
&lt;br /&gt;
  See the Operation Manual for wiring diagrams and more information:&lt;br /&gt;
  http://www.robotshop.com/media/files/pdf2/pli-06-instruction.pdf&lt;br /&gt;
&lt;br /&gt;
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;Wire.h&amp;gt;&lt;br /&gt;
#include &amp;lt;LIDARLite.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
LIDARLite myLidarLite;&lt;br /&gt;
int distance_reelle ;&lt;br /&gt;
&lt;br /&gt;
void setup()&lt;br /&gt;
{&lt;br /&gt;
  Serial.begin(9600); // Initialize serial connection to display distance readings&lt;br /&gt;
&lt;br /&gt;
  myLidarLite.begin(0, true); // Set configuration to default and I2C to 400 kHz&lt;br /&gt;
&lt;br /&gt;
  myLidarLite.configure(0); // Change this number to try out alternate configurations&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop()&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
  // Take a measurement with receiver bias correction and print to serial terminal&lt;br /&gt;
  distance_reelle = (myLidarLite.distance());&lt;br /&gt;
  if(distance_reelle &amp;lt; 1)&lt;br /&gt;
  {&lt;br /&gt;
	Serial.println('O');&lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
	Serial.println('N');&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la troisième séance==&lt;br /&gt;
&lt;br /&gt;
* Poursuite de la création du circuit (shield) pour la matrice LED. &lt;br /&gt;
Cela n'a pas été une tâche facile en raison de la répartition des différentes pâtes dont nous avions besoin et des liaisons à effectuer.&lt;br /&gt;
&lt;br /&gt;
* Test du GPS et codage du programme de calcul de vitesse.&lt;br /&gt;
Nous avons rencontré des problèmes avec le GPS, celui-ci ne renvoyait des message d'erreurs &amp;quot;NO GPS DETECTED&amp;quot; ou bien des données nulles du type &amp;quot;Date: 00/00/0000&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la quatrième séance==&lt;br /&gt;
&lt;br /&gt;
* Finition du circuit (shield) pour la matrice LED et envoi de la demande de fabrication&lt;br /&gt;
&lt;br /&gt;
Nous avons rencontré un problème avec le logiciel nous avons donc dû refaire entièrement le circuit, cela nous a pas mal retardé dans notre projet.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Circuitp5.jpg|200px|]]&lt;br /&gt;
[[Fichier:circuit_bottom.jpg|200px|]]&lt;br /&gt;
&lt;br /&gt;
* Test du GPS et résolution des problèmes.&lt;br /&gt;
Nous avons rencontré beaucoup de problèmes avec le GPS, celui-ci se connectait bien aux satellites mais ne nous renvoyait que des données nulles ou bien un message d'erreur.&lt;br /&gt;
&lt;br /&gt;
Il s'est en faite avéré que selon la position du GPS receiver sur le shield celui-ci affichait ou non les données. &lt;br /&gt;
&lt;br /&gt;
Le problème a donc été résolu. Voici le code:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;}&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;TinyGPS++.h&amp;gt;&lt;br /&gt;
#include &amp;lt;SoftwareSerial.h&amp;gt;&lt;br /&gt;
#include &amp;lt;Wire.h&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
 This example uses software serial and the TinyGPS++ library by Mikal Hart&lt;br /&gt;
 Based on TinyGPSPlus/DeviceExample.ino by Mikal Hart&lt;br /&gt;
 Modified by acavis&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
// Choose two Arduino pins to use for software serial&lt;br /&gt;
// The GPS Shield uses D2 and D3 by default when in DLINE mode&lt;br /&gt;
int RXPin = 50;&lt;br /&gt;
int TXPin = 3; &lt;br /&gt;
&lt;br /&gt;
// The Skytaq EM-506 GPS module included in the GPS Shield Kit&lt;br /&gt;
// uses 4800 baud by default&lt;br /&gt;
int GPSBaud = 4800;&lt;br /&gt;
&lt;br /&gt;
// Create a TinyGPS++ object called &amp;quot;gps&amp;quot;&lt;br /&gt;
TinyGPSPlus gps;&lt;br /&gt;
&lt;br /&gt;
// Create a software serial port called &amp;quot;gpsSerial&amp;quot;&lt;br /&gt;
SoftwareSerial gpsSerial(RXPin, TXPin);&lt;br /&gt;
&lt;br /&gt;
void setup()&lt;br /&gt;
{&lt;br /&gt;
  // Start the Arduino hardware serial port at 9600 baud&lt;br /&gt;
  Serial.begin(9600);&lt;br /&gt;
&lt;br /&gt;
  // Start the software serial port at the GPS's default baud&lt;br /&gt;
  gpsSerial.begin(GPSBaud);&lt;br /&gt;
&lt;br /&gt;
  Serial.println(F(&amp;quot;DeviceExample.ino&amp;quot;));&lt;br /&gt;
  Serial.println(F(&amp;quot;A simple demonstration of TinyGPS++ with an attached GPS module&amp;quot;));&lt;br /&gt;
  Serial.print(F(&amp;quot;Testing TinyGPS++ library v. &amp;quot;)); Serial.println(TinyGPSPlus::libraryVersion());&lt;br /&gt;
  Serial.println(F(&amp;quot;by Mikal Hart&amp;quot;));&lt;br /&gt;
  Serial.println();&lt;br /&gt;
  &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop()&lt;br /&gt;
{&lt;br /&gt;
  // This sketch displays information every time a new sentence is correctly encoded.&lt;br /&gt;
  while (gpsSerial.available() &amp;gt; 0)&lt;br /&gt;
    if (gps.encode(gpsSerial.read()))&lt;br /&gt;
      displayInfo();&lt;br /&gt;
&lt;br /&gt;
  // If 5000 milliseconds pass and there are no characters coming in&lt;br /&gt;
  // over the software serial port, show a &amp;quot;No GPS detected&amp;quot; error&lt;br /&gt;
  if (millis() &amp;gt; 5000 &amp;amp;&amp;amp; gps.charsProcessed() &amp;lt; 10)&lt;br /&gt;
  {&lt;br /&gt;
    Serial.println(F(&amp;quot;No GPS detected&amp;quot;));&lt;br /&gt;
    while(true);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void displayInfo()&lt;br /&gt;
{&lt;br /&gt;
  Serial.print(F(&amp;quot;Speed: &amp;quot;)); &lt;br /&gt;
  if (gps.speed.isValid())&lt;br /&gt;
  {&lt;br /&gt;
    Serial.print(gps.speed.kmph(), 6);&lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
    Serial.print(F(&amp;quot;INVALID&amp;quot;));&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
  Serial.println();&lt;br /&gt;
&lt;br /&gt;
  secure_dist = (gps.speed.kmph()/10)*6; &lt;br /&gt;
  Serial.print(&amp;quot;distance de sécurite (en  m)= &amp;quot;);&lt;br /&gt;
  Serial.print(secure_dist);&lt;br /&gt;
  Serial.println();&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la cinquième séance==&lt;br /&gt;
* Soudage des barrettes et des ponts sur le circuit pour la Matrice LED (Shield)&lt;br /&gt;
&lt;br /&gt;
* Test de la matrice LED et codage du programme pour l'affichage d'un message personnalisé coloré&lt;br /&gt;
Message choisi: Ne me collez pas au cul, PUTAIN!!&lt;br /&gt;
Voici le code pour l'affichage du message. Celle-ci se fait grâce à un liaison série entre la raspberry Pi (RPI) et la matrice de de LED connectée à l’arduino Mega à travers le shield.&lt;br /&gt;
&lt;br /&gt;
Voici le code pour l'affichage:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/***************************************************&lt;br /&gt;
* &lt;br /&gt;
*NOTE THIS CAN ONLY BE USED ON A MEGA! NOT ENOUGH RAM ON UNO!&lt;br /&gt;
*&lt;br /&gt;
***************************************************&lt;br /&gt;
* 64x32 RGB LED Matrix - 4mm pitch&lt;br /&gt;
* ****************************************************&lt;br /&gt;
* testshapes demo for RGBmatrixPanel library.&lt;br /&gt;
* Demonstrates the drawing abilities of the RGBmatrixPanel library.&lt;br /&gt;
* For 32x64 RGB LED matrix.&lt;br /&gt;
 &lt;br /&gt;
* @author lg.gang(lg.gang@qq.com)&lt;br /&gt;
* @version  V1.0&lt;br /&gt;
* @date  2016-9-6&lt;br /&gt;
  &lt;br /&gt;
* GNU Lesser General Public License.&lt;br /&gt;
* See &amp;lt;http://www.gnu.org/licenses/&amp;gt; for details.&lt;br /&gt;
* All above must be included in any redistribution&lt;br /&gt;
* ****************************************************/ &lt;br /&gt;
#include &amp;lt;Adafruit_GFX.h&amp;gt;   // Core graphics library&lt;br /&gt;
#include &amp;lt;RGBmatrixPanel.h&amp;gt; // Hardware-specific library&lt;br /&gt;
&lt;br /&gt;
#define CLK 11  &lt;br /&gt;
#define OE  9&lt;br /&gt;
#define LAT 10&lt;br /&gt;
&lt;br /&gt;
#define A   A0&lt;br /&gt;
#define B   A1&lt;br /&gt;
#define C   A2&lt;br /&gt;
#define D   A3&lt;br /&gt;
&lt;br /&gt;
RGBmatrixPanel matrix(A, B, C, D, CLK, LAT, OE, false, 64);&lt;br /&gt;
char msg;&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin(9600);&lt;br /&gt;
  delay(1000);&lt;br /&gt;
  matrix.begin();&lt;br /&gt;
  &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
&lt;br /&gt;
  // draw a pixel in solid white&lt;br /&gt;
  //matrix.drawPixel(0, 0, matrix.Color333(7, 7, 7)); &lt;br /&gt;
  //delay(5000);&lt;br /&gt;
&lt;br /&gt;
  // fix the screen with green&lt;br /&gt;
  //matrix.fillRect(0, 0, matrix.width(), matrix.height(), matrix.Color333(0, 7, 0));&lt;br /&gt;
  //delay(5000);&lt;br /&gt;
  &lt;br /&gt;
  // fix the screen with white&lt;br /&gt;
  //matrix.fillRect(0, 0, matrix.width(), matrix.height(), matrix.Color333(7, 7, 7));&lt;br /&gt;
  //delay(5000);&lt;br /&gt;
  &lt;br /&gt;
  // fix the screen with red&lt;br /&gt;
  //matrix.fillRect(0, 0, matrix.width(), matrix.height(), matrix.Color333(7, 0, 0));&lt;br /&gt;
  //delay(5000);&lt;br /&gt;
  &lt;br /&gt;
  // fix the screen with blue&lt;br /&gt;
  //matrix.fillRect(0, 0, matrix.width(), matrix.height(), matrix.Color333(0, 0, 7));&lt;br /&gt;
  //delay(5000);&lt;br /&gt;
 // fill the screen with 'black'&lt;br /&gt;
  //matrix.fillScreen(matrix.Color333(0, 0, 0));&lt;br /&gt;
  &lt;br /&gt;
  // draw a box in yellow&lt;br /&gt;
  //matrix.drawRect(0, 0, matrix.width(), matrix.height(), matrix.Color333(7, 7, 0));&lt;br /&gt;
  //delay(5000);&lt;br /&gt;
  &lt;br /&gt;
  // draw a box in fuchsia&lt;br /&gt;
  //matrix.drawRect(5, 5, 53, 23, matrix.Color333(7, 0, 7));&lt;br /&gt;
  //delay(5000);&lt;br /&gt;
  &lt;br /&gt;
  // draw a box in yellow&lt;br /&gt;
  //matrix.drawRect(10, 10, 43, 13, matrix.Color333(7, 1, 3));&lt;br /&gt;
  //delay(5000);&lt;br /&gt;
  &lt;br /&gt;
  // draw an 'X' in red&lt;br /&gt;
  //matrix.drawLine(0, 0, matrix.width()-1, matrix.height()-1, matrix.Color333(7, 0, 0));&lt;br /&gt;
  //matrix.drawLine(matrix.width()-1, 0, 0, matrix.height()-1, matrix.Color333(7, 0, 0));&lt;br /&gt;
  //delay(5000);&lt;br /&gt;
  &lt;br /&gt;
  // draw a blue circle&lt;br /&gt;
  //matrix.drawCircle(10, 10, 10, matrix.Color333(0, 0, 7));&lt;br /&gt;
  //delay(5000);&lt;br /&gt;
  &lt;br /&gt;
  // fill a violet circle&lt;br /&gt;
  //matrix.fillCircle(40, 21, 10, matrix.Color333(7, 0, 7));&lt;br /&gt;
  //delay(5000);&lt;br /&gt;
  &lt;br /&gt;
   // fill the screen with 'black'&lt;br /&gt;
  //matrix.fillScreen(matrix.Color333(0, 0, 0));&lt;br /&gt;
&lt;br /&gt;
  while (Serial.available() &amp;gt; 0) {&lt;br /&gt;
&lt;br /&gt;
    //msg = Serial.read();&lt;br /&gt;
&lt;br /&gt;
    //Serial.print(msg);&lt;br /&gt;
   if(Serial.read() == 'o'){&lt;br /&gt;
  // draw some text!&lt;br /&gt;
  matrix.setTextSize(1);     // size 1 == 8 pixels high&lt;br /&gt;
  matrix.setTextWrap(false); // Don't wrap at end of line - will do ourselves&lt;br /&gt;
  matrix.setCursor(3, 0);  // start at top left, with 3 pixel of spacing&lt;br /&gt;
  uint8_t w = 0;&lt;br /&gt;
  char *str = &amp;quot;  Ne me   collez&amp;quot;;&lt;br /&gt;
  for (w=0; w&amp;lt;10; w++) {&lt;br /&gt;
    matrix.setTextColor(Wheel(w));&lt;br /&gt;
    matrix.print(str[w]);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  matrix.setCursor(13, 8);    // next line&lt;br /&gt;
  for (w=10; w&amp;lt;17; w++) {&lt;br /&gt;
    matrix.setTextColor(Wheel(w));&lt;br /&gt;
    matrix.print(str[w]);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  matrix.println();&lt;br /&gt;
  matrix.setCursor(2, 16);&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(7,1,0));&lt;br /&gt;
  matrix.print('p');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(7,3,0)); &lt;br /&gt;
  matrix.print('a');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(7,7,0));&lt;br /&gt;
  matrix.print('s');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(4,7,0)); &lt;br /&gt;
  matrix.print(' ');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(0,7,0));  &lt;br /&gt;
  matrix.print('a');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(0,7,7)); &lt;br /&gt;
  matrix.print('u');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(0,4,7)); &lt;br /&gt;
  matrix.print(' ');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(7,0,0));&lt;br /&gt;
  matrix.print('c');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(7,0,0)); &lt;br /&gt;
  matrix.print('u');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(7,0,0)); &lt;br /&gt;
  matrix.print('l');&lt;br /&gt;
  //matrix.setTextColor(matrix.Color333(7,7,7));&lt;br /&gt;
  //matrix.println(&amp;quot;pas au Cul&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  // print each letter with a rainbow color&lt;br /&gt;
  matrix.setCursor(3, 24);&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(7,0,0));&lt;br /&gt;
  matrix.print(' ');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(7,1,0)); &lt;br /&gt;
  matrix.print('P');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(7,3,0));&lt;br /&gt;
  matrix.print('U');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(4,7,0)); &lt;br /&gt;
  matrix.print('T');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(0,7,0));  &lt;br /&gt;
  matrix.print('A');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(0,7,7)); &lt;br /&gt;
  matrix.print('I');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(0,4,7)); &lt;br /&gt;
  matrix.print('N');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(0,0,7));&lt;br /&gt;
  matrix.print('!');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(4,0,7)); &lt;br /&gt;
  matrix.print('!');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(7,0,4)); &lt;br /&gt;
  matrix.println(' ');&lt;br /&gt;
  //delay(50000);&lt;br /&gt;
&lt;br /&gt;
} else {matrix.fillScreen(0);}&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
} &lt;br /&gt;
&lt;br /&gt;
// Input a value 0 to 24 to get a color value.&lt;br /&gt;
// The colours are a transition r - g - b - back to r.&lt;br /&gt;
uint16_t Wheel(byte WheelPos) {&lt;br /&gt;
  if(WheelPos &amp;lt; 8) {&lt;br /&gt;
   return matrix.Color333(7 - WheelPos, WheelPos, 0);&lt;br /&gt;
  } else if(WheelPos &amp;lt; 16) {&lt;br /&gt;
   WheelPos -= 8;&lt;br /&gt;
   return matrix.Color333(0, 7-WheelPos, WheelPos);&lt;br /&gt;
  } else {&lt;br /&gt;
   WheelPos -= 16;&lt;br /&gt;
   return matrix.Color333(0, WheelPos, 7 - WheelPos);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Configuartion de la RPI&lt;br /&gt;
&lt;br /&gt;
La raspberry pi (RPI) est chargé de recueillir la confirmation de l'utilisateur à travers l'application mobile, une fois ceci fait, elle lit les données envoyées provenant du traitement d'information sur la distance de sécurité et celle réelle avant de les envoyé vers le programme traitant de l'affichage du message. En fonction du message envoyé (dans notre cas c'est un caractère: 'O' ou 'o' si le message doit être envoyé et 'n' ou 'N' si c'est le contraire). Voici le code:&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
from bluetooth import *                                                         &lt;br /&gt;
import time                                                                     &lt;br /&gt;
import serial                                                                   &lt;br /&gt;
                                                                                &lt;br /&gt;
server_sock=BluetoothSocket( RFCOMM )                                           &lt;br /&gt;
server_sock.bind((&amp;quot;&amp;quot;,PORT_ANY))                                                 &lt;br /&gt;
server_sock.listen(1)                                                           &lt;br /&gt;
                                                                                &lt;br /&gt;
port = server_sock.getsockname()[1]                                             &lt;br /&gt;
                                                                                &lt;br /&gt;
uuid = &amp;quot;94f39d29-7d6d-437d-973b-fba39e49d4ee&amp;quot;                                   &lt;br /&gt;
                                                                                &lt;br /&gt;
advertise_service( server_sock, &amp;quot;SampleServer&amp;quot;,                                 &lt;br /&gt;
                   service_id = uuid,                                           &lt;br /&gt;
                   service_classes = [ uuid, SERIAL_PORT_CLASS ],               &lt;br /&gt;
                   profiles = [ SERIAL_PORT_PROFILE ],                          &lt;br /&gt;
#                   protocols = [ OBEX_UUID ]                                   &lt;br /&gt;
                    )                                                           &lt;br /&gt;
                                                                                &lt;br /&gt;
print(&amp;quot;Waiting for connection on RFCOMM channel %d&amp;quot; % port)                     &lt;br /&gt;
                                                                                &lt;br /&gt;
client_sock, client_info = server_sock.accept()                                 &lt;br /&gt;
print(&amp;quot;Accepted connection from &amp;quot;, client_info)&lt;br /&gt;
                                 &lt;br /&gt;
ser0 = serial.Serial('/dev/ttyACM0')       &lt;br /&gt;
Ser1 = serial.SERIAL('/dev/ttyACM1')                                      &lt;br /&gt;
                                                                                &lt;br /&gt;
try:                                                                            &lt;br /&gt;
    while True:                                                                 &lt;br /&gt;
        data = &amp;quot;&amp;quot;                                                                                           &lt;br /&gt;
        client_sock.recv(data)    &lt;br /&gt;
		data2 = ser1.read();&lt;br /&gt;
		if data2 == 'O'&lt;br /&gt;
			ser0.write('o')&lt;br /&gt;
		if data2 == 'N'&lt;br /&gt;
			ser0.write('n')&lt;br /&gt;
except IOError:                                                                 &lt;br /&gt;
    pass                                                                        &lt;br /&gt;
                                                                                &lt;br /&gt;
print(&amp;quot;disconnected&amp;quot;)                                                           &lt;br /&gt;
                                                                                &lt;br /&gt;
client_sock.close()                                                             &lt;br /&gt;
server_sock.close()                                                             &lt;br /&gt;
print(&amp;quot;all done&amp;quot;) &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Codage de l'application Mobile &lt;br /&gt;
Elle a pour but de permettre à l'utilisateur de se connecter, via bluetooth, à la RPI et de lui envoyer sa confirmation. Celui-ci peut également se déconnecter, s'il le souhaite.&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la sixième séance==&lt;br /&gt;
* Test du fonctionnement du système complet&lt;br /&gt;
Problèmes rencontrés:&lt;br /&gt;
&lt;br /&gt;
'''[Partie ARAME]'''&lt;br /&gt;
&lt;br /&gt;
''[INSERER Code final]''&lt;br /&gt;
&lt;br /&gt;
* Préparation de l'oral et finition du poster&lt;br /&gt;
&lt;br /&gt;
=Rendu=&lt;br /&gt;
&lt;br /&gt;
==Poster==&lt;br /&gt;
Version électronique du poster :&lt;br /&gt;
[[Fichier:2017_IOT_P5_poster.png|center|500px]]&lt;br /&gt;
&lt;br /&gt;
==Fichiers rendus==&lt;br /&gt;
&lt;br /&gt;
Notre application : [[Media:2017_IOT_P0_application.zip]]&lt;/div&gt;</summary>
		<author><name>Mdiop</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P5_IOT_2017&amp;diff=46979</id>
		<title>P5 IOT 2017</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P5_IOT_2017&amp;diff=46979"/>
				<updated>2018-01-29T02:03:03Z</updated>
		
		<summary type="html">&lt;p&gt;Mdiop : /* Détail du travail de la cinquième séance */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation du sujet =&lt;br /&gt;
&lt;br /&gt;
==Contexte==&lt;br /&gt;
&lt;br /&gt;
Nous effectuons ce projet dans le cadre du module internet des objets (Internet of things). &lt;br /&gt;
&lt;br /&gt;
L'objectif de ce module est de créer l'objet connecté de notre choix.&lt;br /&gt;
&lt;br /&gt;
Nous avons donc choisi de créer un objet en rapport avec la sécurité routière: le système Safe&amp;amp;Drive.&lt;br /&gt;
&lt;br /&gt;
==Description du projet==&lt;br /&gt;
&lt;br /&gt;
Pour veiller au respect des distances de sécurité, le système S&amp;amp;D va tout d'abord évaluer la distance entre votre voiture et celle qui vous suit. &lt;br /&gt;
&lt;br /&gt;
Grâce au GPS intégré, la distance de sécurité à respecter sera calculée en fonction de votre vitesse de circulation.&lt;br /&gt;
&lt;br /&gt;
Si cette distance de sécurité n'est pas respectée, un message de mise en garde sera affiché sur votre pare-brise arrière à destination du conducteur qui vous suit de trop prêt.&lt;br /&gt;
&lt;br /&gt;
Bien évidemment, ce message ne sera envoyé qu'après confirmation de l'utilisateur depuis l'application mobile du système Safe&amp;amp;Drive.&lt;br /&gt;
&lt;br /&gt;
En mode marche arrière, le système devient une aide à la manœuvre avec une caméra de recul et un détecteur d'obstacle.&lt;br /&gt;
&lt;br /&gt;
=Réalisation=&lt;br /&gt;
&lt;br /&gt;
==Matériel utilisé==&lt;br /&gt;
&lt;br /&gt;
* Raspberry Pi&lt;br /&gt;
* Arduino Uno&lt;br /&gt;
* Arduino Mega2560&lt;br /&gt;
* SparkFun GPS Shield&lt;br /&gt;
* Adafruit 64x32 RGB LED Matrix - 5mm pitch&lt;br /&gt;
* Garmin LIDAR-Lite v3&lt;br /&gt;
&lt;br /&gt;
==Suivi de réalisation==&lt;br /&gt;
 {| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 1 (08/01/2018)&lt;br /&gt;
 | Choix de l'objet + Choix du matériel&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 2 (09/01/2018)&lt;br /&gt;
 | Circuit shield pour la matrice LED + Test Li-DAR Lite&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 3 (16/01/2018)&lt;br /&gt;
 | Circuit shield pour la matrice LED + Test du shield GPS&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 4 (17/01/2018)&lt;br /&gt;
 | Circuit shield pour la matrice LED + Test Shield GPS&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 5 (22/01/2018)&lt;br /&gt;
 | Soudage circuit shield pour la matrice LED + Test LED Matrix + RaspberryPI + Application mobile&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 6 (24/01/2018)&lt;br /&gt;
 | Finitions + Resolutions des problèmes + Préparation orale (+poster)&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la première séance==&lt;br /&gt;
&lt;br /&gt;
Pour choisir notre projet nous avons débuté en faisant un pseudo-brainstorming duquel est ressorti 4 projets.&lt;br /&gt;
&lt;br /&gt;
Nous donc dû réduire notre choix à un seul de ces quatre possibilités.&lt;br /&gt;
&lt;br /&gt;
Notre choix final s'est donc porté sur le système Safe&amp;amp;Drive.&lt;br /&gt;
&lt;br /&gt;
Après avoir affiné les divers fonctionnalités de notre projet, nous avons commencé à réunir le matériel dont nous aurions besoin.&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la deuxième séance==&lt;br /&gt;
&lt;br /&gt;
* Début de la création du shield de la matrice de LED qui viendra se positionner sur l’Arduino Mega2560.&lt;br /&gt;
&lt;br /&gt;
* Test du capteur optique LI-DAR Lite et codage du programme pour le calcul de distance.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 LIDARLite Arduino Library&lt;br /&gt;
  GetDistanceI2c&lt;br /&gt;
&lt;br /&gt;
  This example shows how to initialize, configure, and read distance from a&lt;br /&gt;
  LIDAR-Lite connected over the I2C interface.&lt;br /&gt;
&lt;br /&gt;
  Connections:&lt;br /&gt;
  LIDAR-Lite 5 Vdc (red) to Arduino 5v&lt;br /&gt;
  LIDAR-Lite I2C SCL (green) to Arduino SCL&lt;br /&gt;
  LIDAR-Lite I2C SDA (blue) to Arduino SDA&lt;br /&gt;
  LIDAR-Lite Ground (black) to Arduino GND&lt;br /&gt;
  &lt;br /&gt;
  (Capacitor recommended to mitigate inrush current when device is enabled)&lt;br /&gt;
  680uF capacitor (+) to Arduino 5v&lt;br /&gt;
  680uF capacitor (-) to Arduino GND&lt;br /&gt;
&lt;br /&gt;
  See the Operation Manual for wiring diagrams and more information:&lt;br /&gt;
  http://www.robotshop.com/media/files/pdf2/pli-06-instruction.pdf&lt;br /&gt;
&lt;br /&gt;
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;Wire.h&amp;gt;&lt;br /&gt;
#include &amp;lt;LIDARLite.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
LIDARLite myLidarLite;&lt;br /&gt;
int distance_reelle ;&lt;br /&gt;
&lt;br /&gt;
void setup()&lt;br /&gt;
{&lt;br /&gt;
  Serial.begin(9600); // Initialize serial connection to display distance readings&lt;br /&gt;
&lt;br /&gt;
  myLidarLite.begin(0, true); // Set configuration to default and I2C to 400 kHz&lt;br /&gt;
&lt;br /&gt;
  myLidarLite.configure(0); // Change this number to try out alternate configurations&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop()&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
  // Take a measurement with receiver bias correction and print to serial terminal&lt;br /&gt;
  distance_reelle = (myLidarLite.distance());&lt;br /&gt;
  if(distance_reelle &amp;lt; 1)&lt;br /&gt;
  {&lt;br /&gt;
	Serial.println('O');&lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
	Serial.println('N');&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la troisième séance==&lt;br /&gt;
&lt;br /&gt;
* Poursuite de la création du circuit (shield) pour la matrice LED. &lt;br /&gt;
Cela n'a pas été une tâche facile en raison de la répartition des différentes pâtes dont nous avions besoin et des liaisons à effectuer.&lt;br /&gt;
&lt;br /&gt;
* Test du GPS et codage du programme de calcul de vitesse.&lt;br /&gt;
Nous avons rencontré des problèmes avec le GPS, celui-ci ne renvoyait des message d'erreurs &amp;quot;NO GPS DETECTED&amp;quot; ou bien des données nulles du type &amp;quot;Date: 00/00/0000&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la quatrième séance==&lt;br /&gt;
&lt;br /&gt;
* Finition du circuit (shield) pour la matrice LED et envoi de la demande de fabrication&lt;br /&gt;
&lt;br /&gt;
Nous avons rencontré un problème avec le logiciel nous avons donc dû refaire entièrement le circuit, cela nous a pas mal retardé dans notre projet.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Circuitp5.jpg|200px|]]&lt;br /&gt;
[[Fichier:circuit_bottom.jpg|200px|]]&lt;br /&gt;
&lt;br /&gt;
* Test du GPS et résolution des problèmes.&lt;br /&gt;
Nous avons rencontré beaucoup de problèmes avec le GPS, celui-ci se connectait bien aux satellites mais ne nous renvoyait que des données nulles ou bien un message d'erreur.&lt;br /&gt;
&lt;br /&gt;
Il s'est en faite avéré que selon la position du GPS receiver sur le shield celui-ci affichait ou non les données. &lt;br /&gt;
&lt;br /&gt;
Le problème a donc été résolu. Voici le code:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;}&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;TinyGPS++.h&amp;gt;&lt;br /&gt;
#include &amp;lt;SoftwareSerial.h&amp;gt;&lt;br /&gt;
#include &amp;lt;Wire.h&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
 This example uses software serial and the TinyGPS++ library by Mikal Hart&lt;br /&gt;
 Based on TinyGPSPlus/DeviceExample.ino by Mikal Hart&lt;br /&gt;
 Modified by acavis&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
// Choose two Arduino pins to use for software serial&lt;br /&gt;
// The GPS Shield uses D2 and D3 by default when in DLINE mode&lt;br /&gt;
int RXPin = 50;&lt;br /&gt;
int TXPin = 3; &lt;br /&gt;
&lt;br /&gt;
// The Skytaq EM-506 GPS module included in the GPS Shield Kit&lt;br /&gt;
// uses 4800 baud by default&lt;br /&gt;
int GPSBaud = 4800;&lt;br /&gt;
&lt;br /&gt;
// Create a TinyGPS++ object called &amp;quot;gps&amp;quot;&lt;br /&gt;
TinyGPSPlus gps;&lt;br /&gt;
&lt;br /&gt;
// Create a software serial port called &amp;quot;gpsSerial&amp;quot;&lt;br /&gt;
SoftwareSerial gpsSerial(RXPin, TXPin);&lt;br /&gt;
&lt;br /&gt;
void setup()&lt;br /&gt;
{&lt;br /&gt;
  // Start the Arduino hardware serial port at 9600 baud&lt;br /&gt;
  Serial.begin(9600);&lt;br /&gt;
&lt;br /&gt;
  // Start the software serial port at the GPS's default baud&lt;br /&gt;
  gpsSerial.begin(GPSBaud);&lt;br /&gt;
&lt;br /&gt;
  Serial.println(F(&amp;quot;DeviceExample.ino&amp;quot;));&lt;br /&gt;
  Serial.println(F(&amp;quot;A simple demonstration of TinyGPS++ with an attached GPS module&amp;quot;));&lt;br /&gt;
  Serial.print(F(&amp;quot;Testing TinyGPS++ library v. &amp;quot;)); Serial.println(TinyGPSPlus::libraryVersion());&lt;br /&gt;
  Serial.println(F(&amp;quot;by Mikal Hart&amp;quot;));&lt;br /&gt;
  Serial.println();&lt;br /&gt;
  &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop()&lt;br /&gt;
{&lt;br /&gt;
  // This sketch displays information every time a new sentence is correctly encoded.&lt;br /&gt;
  while (gpsSerial.available() &amp;gt; 0)&lt;br /&gt;
    if (gps.encode(gpsSerial.read()))&lt;br /&gt;
      displayInfo();&lt;br /&gt;
&lt;br /&gt;
  // If 5000 milliseconds pass and there are no characters coming in&lt;br /&gt;
  // over the software serial port, show a &amp;quot;No GPS detected&amp;quot; error&lt;br /&gt;
  if (millis() &amp;gt; 5000 &amp;amp;&amp;amp; gps.charsProcessed() &amp;lt; 10)&lt;br /&gt;
  {&lt;br /&gt;
    Serial.println(F(&amp;quot;No GPS detected&amp;quot;));&lt;br /&gt;
    while(true);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void displayInfo()&lt;br /&gt;
{&lt;br /&gt;
  Serial.print(F(&amp;quot;Speed: &amp;quot;)); &lt;br /&gt;
  if (gps.speed.isValid())&lt;br /&gt;
  {&lt;br /&gt;
    Serial.print(gps.speed.kmph(), 6);&lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
    Serial.print(F(&amp;quot;INVALID&amp;quot;));&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
  Serial.println();&lt;br /&gt;
&lt;br /&gt;
  secure_dist = (gps.speed.kmph()/10)*6; &lt;br /&gt;
  Serial.print(&amp;quot;distance de sécurite (en  m)= &amp;quot;);&lt;br /&gt;
  Serial.print(secure_dist);&lt;br /&gt;
  Serial.println();&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la cinquième séance==&lt;br /&gt;
* Soudage des barrettes et des ponts sur le circuit pour la Matrice LED (Shield)&lt;br /&gt;
&lt;br /&gt;
* Test de la matrice LED et codage du programme pour l'affichage d'un message personnalisé coloré&lt;br /&gt;
Message choisi: Ne me collez pas au cul, PUTAIN!!&lt;br /&gt;
Voici le code pour l'affichage du message. Celle-ci se fait grâce à un liaison série entre la raspberry Pi (RPI) et la matrice de de LED connectée à l’arduino Mega à travers le shield.&lt;br /&gt;
&lt;br /&gt;
Voici le code pour l'affichage:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/***************************************************&lt;br /&gt;
* &lt;br /&gt;
*NOTE THIS CAN ONLY BE USED ON A MEGA! NOT ENOUGH RAM ON UNO!&lt;br /&gt;
*&lt;br /&gt;
***************************************************&lt;br /&gt;
* 64x32 RGB LED Matrix - 4mm pitch&lt;br /&gt;
* ****************************************************&lt;br /&gt;
* testshapes demo for RGBmatrixPanel library.&lt;br /&gt;
* Demonstrates the drawing abilities of the RGBmatrixPanel library.&lt;br /&gt;
* For 32x64 RGB LED matrix.&lt;br /&gt;
 &lt;br /&gt;
* @author lg.gang(lg.gang@qq.com)&lt;br /&gt;
* @version  V1.0&lt;br /&gt;
* @date  2016-9-6&lt;br /&gt;
  &lt;br /&gt;
* GNU Lesser General Public License.&lt;br /&gt;
* See &amp;lt;http://www.gnu.org/licenses/&amp;gt; for details.&lt;br /&gt;
* All above must be included in any redistribution&lt;br /&gt;
* ****************************************************/ &lt;br /&gt;
#include &amp;lt;Adafruit_GFX.h&amp;gt;   // Core graphics library&lt;br /&gt;
#include &amp;lt;RGBmatrixPanel.h&amp;gt; // Hardware-specific library&lt;br /&gt;
&lt;br /&gt;
#define CLK 11  &lt;br /&gt;
#define OE  9&lt;br /&gt;
#define LAT 10&lt;br /&gt;
&lt;br /&gt;
#define A   A0&lt;br /&gt;
#define B   A1&lt;br /&gt;
#define C   A2&lt;br /&gt;
#define D   A3&lt;br /&gt;
&lt;br /&gt;
RGBmatrixPanel matrix(A, B, C, D, CLK, LAT, OE, false, 64);&lt;br /&gt;
char msg;&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin(9600);&lt;br /&gt;
  delay(1000);&lt;br /&gt;
  matrix.begin();&lt;br /&gt;
  &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
&lt;br /&gt;
  // draw a pixel in solid white&lt;br /&gt;
  //matrix.drawPixel(0, 0, matrix.Color333(7, 7, 7)); &lt;br /&gt;
  //delay(5000);&lt;br /&gt;
&lt;br /&gt;
  // fix the screen with green&lt;br /&gt;
  //matrix.fillRect(0, 0, matrix.width(), matrix.height(), matrix.Color333(0, 7, 0));&lt;br /&gt;
  //delay(5000);&lt;br /&gt;
  &lt;br /&gt;
  // fix the screen with white&lt;br /&gt;
  //matrix.fillRect(0, 0, matrix.width(), matrix.height(), matrix.Color333(7, 7, 7));&lt;br /&gt;
  //delay(5000);&lt;br /&gt;
  &lt;br /&gt;
  // fix the screen with red&lt;br /&gt;
  //matrix.fillRect(0, 0, matrix.width(), matrix.height(), matrix.Color333(7, 0, 0));&lt;br /&gt;
  //delay(5000);&lt;br /&gt;
  &lt;br /&gt;
  // fix the screen with blue&lt;br /&gt;
  //matrix.fillRect(0, 0, matrix.width(), matrix.height(), matrix.Color333(0, 0, 7));&lt;br /&gt;
  //delay(5000);&lt;br /&gt;
 // fill the screen with 'black'&lt;br /&gt;
  //matrix.fillScreen(matrix.Color333(0, 0, 0));&lt;br /&gt;
  &lt;br /&gt;
  // draw a box in yellow&lt;br /&gt;
  //matrix.drawRect(0, 0, matrix.width(), matrix.height(), matrix.Color333(7, 7, 0));&lt;br /&gt;
  //delay(5000);&lt;br /&gt;
  &lt;br /&gt;
  // draw a box in fuchsia&lt;br /&gt;
  //matrix.drawRect(5, 5, 53, 23, matrix.Color333(7, 0, 7));&lt;br /&gt;
  //delay(5000);&lt;br /&gt;
  &lt;br /&gt;
  // draw a box in yellow&lt;br /&gt;
  //matrix.drawRect(10, 10, 43, 13, matrix.Color333(7, 1, 3));&lt;br /&gt;
  //delay(5000);&lt;br /&gt;
  &lt;br /&gt;
  // draw an 'X' in red&lt;br /&gt;
  //matrix.drawLine(0, 0, matrix.width()-1, matrix.height()-1, matrix.Color333(7, 0, 0));&lt;br /&gt;
  //matrix.drawLine(matrix.width()-1, 0, 0, matrix.height()-1, matrix.Color333(7, 0, 0));&lt;br /&gt;
  //delay(5000);&lt;br /&gt;
  &lt;br /&gt;
  // draw a blue circle&lt;br /&gt;
  //matrix.drawCircle(10, 10, 10, matrix.Color333(0, 0, 7));&lt;br /&gt;
  //delay(5000);&lt;br /&gt;
  &lt;br /&gt;
  // fill a violet circle&lt;br /&gt;
  //matrix.fillCircle(40, 21, 10, matrix.Color333(7, 0, 7));&lt;br /&gt;
  //delay(5000);&lt;br /&gt;
  &lt;br /&gt;
   // fill the screen with 'black'&lt;br /&gt;
  //matrix.fillScreen(matrix.Color333(0, 0, 0));&lt;br /&gt;
&lt;br /&gt;
  while (Serial.available() &amp;gt; 0) {&lt;br /&gt;
&lt;br /&gt;
    //msg = Serial.read();&lt;br /&gt;
&lt;br /&gt;
    //Serial.print(msg);&lt;br /&gt;
   if(Serial.read() == 'o'){&lt;br /&gt;
  // draw some text!&lt;br /&gt;
  matrix.setTextSize(1);     // size 1 == 8 pixels high&lt;br /&gt;
  matrix.setTextWrap(false); // Don't wrap at end of line - will do ourselves&lt;br /&gt;
  matrix.setCursor(3, 0);  // start at top left, with 3 pixel of spacing&lt;br /&gt;
  uint8_t w = 0;&lt;br /&gt;
  char *str = &amp;quot;  Ne me   collez&amp;quot;;&lt;br /&gt;
  for (w=0; w&amp;lt;10; w++) {&lt;br /&gt;
    matrix.setTextColor(Wheel(w));&lt;br /&gt;
    matrix.print(str[w]);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  matrix.setCursor(13, 8);    // next line&lt;br /&gt;
  for (w=10; w&amp;lt;17; w++) {&lt;br /&gt;
    matrix.setTextColor(Wheel(w));&lt;br /&gt;
    matrix.print(str[w]);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  matrix.println();&lt;br /&gt;
  matrix.setCursor(2, 16);&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(7,1,0));&lt;br /&gt;
  matrix.print('p');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(7,3,0)); &lt;br /&gt;
  matrix.print('a');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(7,7,0));&lt;br /&gt;
  matrix.print('s');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(4,7,0)); &lt;br /&gt;
  matrix.print(' ');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(0,7,0));  &lt;br /&gt;
  matrix.print('a');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(0,7,7)); &lt;br /&gt;
  matrix.print('u');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(0,4,7)); &lt;br /&gt;
  matrix.print(' ');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(7,0,0));&lt;br /&gt;
  matrix.print('c');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(7,0,0)); &lt;br /&gt;
  matrix.print('u');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(7,0,0)); &lt;br /&gt;
  matrix.print('l');&lt;br /&gt;
  //matrix.setTextColor(matrix.Color333(7,7,7));&lt;br /&gt;
  //matrix.println(&amp;quot;pas au Cul&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  // print each letter with a rainbow color&lt;br /&gt;
  matrix.setCursor(3, 24);&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(7,0,0));&lt;br /&gt;
  matrix.print(' ');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(7,1,0)); &lt;br /&gt;
  matrix.print('P');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(7,3,0));&lt;br /&gt;
  matrix.print('U');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(4,7,0)); &lt;br /&gt;
  matrix.print('T');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(0,7,0));  &lt;br /&gt;
  matrix.print('A');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(0,7,7)); &lt;br /&gt;
  matrix.print('I');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(0,4,7)); &lt;br /&gt;
  matrix.print('N');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(0,0,7));&lt;br /&gt;
  matrix.print('!');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(4,0,7)); &lt;br /&gt;
  matrix.print('!');&lt;br /&gt;
  matrix.setTextColor(matrix.Color333(7,0,4)); &lt;br /&gt;
  matrix.println(' ');&lt;br /&gt;
  //delay(50000);&lt;br /&gt;
&lt;br /&gt;
} else {matrix.fillScreen(0);}&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
} &lt;br /&gt;
&lt;br /&gt;
// Input a value 0 to 24 to get a color value.&lt;br /&gt;
// The colours are a transition r - g - b - back to r.&lt;br /&gt;
uint16_t Wheel(byte WheelPos) {&lt;br /&gt;
  if(WheelPos &amp;lt; 8) {&lt;br /&gt;
   return matrix.Color333(7 - WheelPos, WheelPos, 0);&lt;br /&gt;
  } else if(WheelPos &amp;lt; 16) {&lt;br /&gt;
   WheelPos -= 8;&lt;br /&gt;
   return matrix.Color333(0, 7-WheelPos, WheelPos);&lt;br /&gt;
  } else {&lt;br /&gt;
   WheelPos -= 16;&lt;br /&gt;
   return matrix.Color333(0, WheelPos, 7 - WheelPos);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Configuartion de la RPI&lt;br /&gt;
&lt;br /&gt;
La raspberry pi (RPI) est chargé de recueillir la confirmation de l'utilisateur à travers l'application mobile, une fois ceci fait, elle lit les données envoyées provenant du traitement d'information sur la distance de sécurité et celle réelle avant de les envoyé vers le programme traitant de l'affichage du message. En fonction du message envoyé (dans notre cas c'est un caractère: 'O' ou 'o' si le message doit être envoyé et 'n' ou 'N' si c'est le contraire). Voici le code:&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Codage de l'application Mobile &lt;br /&gt;
'''[PARTIE ARAME]'''&lt;br /&gt;
&lt;br /&gt;
''[INSERER CODE APPLI]''&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la sixième séance==&lt;br /&gt;
* Test du fonctionnement du système complet&lt;br /&gt;
Problèmes rencontrés:&lt;br /&gt;
&lt;br /&gt;
'''[Partie ARAME]'''&lt;br /&gt;
&lt;br /&gt;
''[INSERER Code final]''&lt;br /&gt;
&lt;br /&gt;
* Préparation de l'oral et finition du poster&lt;br /&gt;
&lt;br /&gt;
=Rendu=&lt;br /&gt;
&lt;br /&gt;
==Poster==&lt;br /&gt;
Version électronique du poster :&lt;br /&gt;
[[Fichier:2017_IOT_P5_poster.png|center|500px]]&lt;br /&gt;
&lt;br /&gt;
==Fichiers rendus==&lt;br /&gt;
&lt;br /&gt;
Notre application : [[Media:2017_IOT_P0_application.zip]]&lt;/div&gt;</summary>
		<author><name>Mdiop</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P5_IOT_2017&amp;diff=46978</id>
		<title>P5 IOT 2017</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P5_IOT_2017&amp;diff=46978"/>
				<updated>2018-01-29T01:47:42Z</updated>
		
		<summary type="html">&lt;p&gt;Mdiop : /* Détail du travail de la quatrième séance */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation du sujet =&lt;br /&gt;
&lt;br /&gt;
==Contexte==&lt;br /&gt;
&lt;br /&gt;
Nous effectuons ce projet dans le cadre du module internet des objets (Internet of things). &lt;br /&gt;
&lt;br /&gt;
L'objectif de ce module est de créer l'objet connecté de notre choix.&lt;br /&gt;
&lt;br /&gt;
Nous avons donc choisi de créer un objet en rapport avec la sécurité routière: le système Safe&amp;amp;Drive.&lt;br /&gt;
&lt;br /&gt;
==Description du projet==&lt;br /&gt;
&lt;br /&gt;
Pour veiller au respect des distances de sécurité, le système S&amp;amp;D va tout d'abord évaluer la distance entre votre voiture et celle qui vous suit. &lt;br /&gt;
&lt;br /&gt;
Grâce au GPS intégré, la distance de sécurité à respecter sera calculée en fonction de votre vitesse de circulation.&lt;br /&gt;
&lt;br /&gt;
Si cette distance de sécurité n'est pas respectée, un message de mise en garde sera affiché sur votre pare-brise arrière à destination du conducteur qui vous suit de trop prêt.&lt;br /&gt;
&lt;br /&gt;
Bien évidemment, ce message ne sera envoyé qu'après confirmation de l'utilisateur depuis l'application mobile du système Safe&amp;amp;Drive.&lt;br /&gt;
&lt;br /&gt;
En mode marche arrière, le système devient une aide à la manœuvre avec une caméra de recul et un détecteur d'obstacle.&lt;br /&gt;
&lt;br /&gt;
=Réalisation=&lt;br /&gt;
&lt;br /&gt;
==Matériel utilisé==&lt;br /&gt;
&lt;br /&gt;
* Raspberry Pi&lt;br /&gt;
* Arduino Uno&lt;br /&gt;
* Arduino Mega2560&lt;br /&gt;
* SparkFun GPS Shield&lt;br /&gt;
* Adafruit 64x32 RGB LED Matrix - 5mm pitch&lt;br /&gt;
* Garmin LIDAR-Lite v3&lt;br /&gt;
&lt;br /&gt;
==Suivi de réalisation==&lt;br /&gt;
 {| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 1 (08/01/2018)&lt;br /&gt;
 | Choix de l'objet + Choix du matériel&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 2 (09/01/2018)&lt;br /&gt;
 | Circuit shield pour la matrice LED + Test Li-DAR Lite&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 3 (16/01/2018)&lt;br /&gt;
 | Circuit shield pour la matrice LED + Test du shield GPS&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 4 (17/01/2018)&lt;br /&gt;
 | Circuit shield pour la matrice LED + Test Shield GPS&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 5 (22/01/2018)&lt;br /&gt;
 | Soudage circuit shield pour la matrice LED + Test LED Matrix + RaspberryPI + Application mobile&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 6 (24/01/2018)&lt;br /&gt;
 | Finitions + Resolutions des problèmes + Préparation orale (+poster)&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la première séance==&lt;br /&gt;
&lt;br /&gt;
Pour choisir notre projet nous avons débuté en faisant un pseudo-brainstorming duquel est ressorti 4 projets.&lt;br /&gt;
&lt;br /&gt;
Nous donc dû réduire notre choix à un seul de ces quatre possibilités.&lt;br /&gt;
&lt;br /&gt;
Notre choix final s'est donc porté sur le système Safe&amp;amp;Drive.&lt;br /&gt;
&lt;br /&gt;
Après avoir affiné les divers fonctionnalités de notre projet, nous avons commencé à réunir le matériel dont nous aurions besoin.&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la deuxième séance==&lt;br /&gt;
&lt;br /&gt;
* Début de la création du shield de la matrice de LED qui viendra se positionner sur l’Arduino Mega2560.&lt;br /&gt;
&lt;br /&gt;
* Test du capteur optique LI-DAR Lite et codage du programme pour le calcul de distance.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 LIDARLite Arduino Library&lt;br /&gt;
  GetDistanceI2c&lt;br /&gt;
&lt;br /&gt;
  This example shows how to initialize, configure, and read distance from a&lt;br /&gt;
  LIDAR-Lite connected over the I2C interface.&lt;br /&gt;
&lt;br /&gt;
  Connections:&lt;br /&gt;
  LIDAR-Lite 5 Vdc (red) to Arduino 5v&lt;br /&gt;
  LIDAR-Lite I2C SCL (green) to Arduino SCL&lt;br /&gt;
  LIDAR-Lite I2C SDA (blue) to Arduino SDA&lt;br /&gt;
  LIDAR-Lite Ground (black) to Arduino GND&lt;br /&gt;
  &lt;br /&gt;
  (Capacitor recommended to mitigate inrush current when device is enabled)&lt;br /&gt;
  680uF capacitor (+) to Arduino 5v&lt;br /&gt;
  680uF capacitor (-) to Arduino GND&lt;br /&gt;
&lt;br /&gt;
  See the Operation Manual for wiring diagrams and more information:&lt;br /&gt;
  http://www.robotshop.com/media/files/pdf2/pli-06-instruction.pdf&lt;br /&gt;
&lt;br /&gt;
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;Wire.h&amp;gt;&lt;br /&gt;
#include &amp;lt;LIDARLite.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
LIDARLite myLidarLite;&lt;br /&gt;
int distance_reelle ;&lt;br /&gt;
&lt;br /&gt;
void setup()&lt;br /&gt;
{&lt;br /&gt;
  Serial.begin(9600); // Initialize serial connection to display distance readings&lt;br /&gt;
&lt;br /&gt;
  myLidarLite.begin(0, true); // Set configuration to default and I2C to 400 kHz&lt;br /&gt;
&lt;br /&gt;
  myLidarLite.configure(0); // Change this number to try out alternate configurations&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop()&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
  // Take a measurement with receiver bias correction and print to serial terminal&lt;br /&gt;
  distance_reelle = (myLidarLite.distance());&lt;br /&gt;
  if(distance_reelle &amp;lt; 1)&lt;br /&gt;
  {&lt;br /&gt;
	Serial.println('O');&lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
	Serial.println('N');&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la troisième séance==&lt;br /&gt;
&lt;br /&gt;
* Poursuite de la création du circuit (shield) pour la matrice LED. &lt;br /&gt;
Cela n'a pas été une tâche facile en raison de la répartition des différentes pâtes dont nous avions besoin et des liaisons à effectuer.&lt;br /&gt;
&lt;br /&gt;
* Test du GPS et codage du programme de calcul de vitesse.&lt;br /&gt;
Nous avons rencontré des problèmes avec le GPS, celui-ci ne renvoyait des message d'erreurs &amp;quot;NO GPS DETECTED&amp;quot; ou bien des données nulles du type &amp;quot;Date: 00/00/0000&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la quatrième séance==&lt;br /&gt;
&lt;br /&gt;
* Finition du circuit (shield) pour la matrice LED et envoi de la demande de fabrication&lt;br /&gt;
&lt;br /&gt;
Nous avons rencontré un problème avec le logiciel nous avons donc dû refaire entièrement le circuit, cela nous a pas mal retardé dans notre projet.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Circuitp5.jpg|200px|]]&lt;br /&gt;
[[Fichier:circuit_bottom.jpg|200px|]]&lt;br /&gt;
&lt;br /&gt;
* Test du GPS et résolution des problèmes.&lt;br /&gt;
Nous avons rencontré beaucoup de problèmes avec le GPS, celui-ci se connectait bien aux satellites mais ne nous renvoyait que des données nulles ou bien un message d'erreur.&lt;br /&gt;
&lt;br /&gt;
Il s'est en faite avéré que selon la position du GPS receiver sur le shield celui-ci affichait ou non les données. &lt;br /&gt;
&lt;br /&gt;
Le problème a donc été résolu. Voici le code:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;}&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;TinyGPS++.h&amp;gt;&lt;br /&gt;
#include &amp;lt;SoftwareSerial.h&amp;gt;&lt;br /&gt;
#include &amp;lt;Wire.h&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
 This example uses software serial and the TinyGPS++ library by Mikal Hart&lt;br /&gt;
 Based on TinyGPSPlus/DeviceExample.ino by Mikal Hart&lt;br /&gt;
 Modified by acavis&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
// Choose two Arduino pins to use for software serial&lt;br /&gt;
// The GPS Shield uses D2 and D3 by default when in DLINE mode&lt;br /&gt;
int RXPin = 50;&lt;br /&gt;
int TXPin = 3; &lt;br /&gt;
&lt;br /&gt;
// The Skytaq EM-506 GPS module included in the GPS Shield Kit&lt;br /&gt;
// uses 4800 baud by default&lt;br /&gt;
int GPSBaud = 4800;&lt;br /&gt;
&lt;br /&gt;
// Create a TinyGPS++ object called &amp;quot;gps&amp;quot;&lt;br /&gt;
TinyGPSPlus gps;&lt;br /&gt;
&lt;br /&gt;
// Create a software serial port called &amp;quot;gpsSerial&amp;quot;&lt;br /&gt;
SoftwareSerial gpsSerial(RXPin, TXPin);&lt;br /&gt;
&lt;br /&gt;
void setup()&lt;br /&gt;
{&lt;br /&gt;
  // Start the Arduino hardware serial port at 9600 baud&lt;br /&gt;
  Serial.begin(9600);&lt;br /&gt;
&lt;br /&gt;
  // Start the software serial port at the GPS's default baud&lt;br /&gt;
  gpsSerial.begin(GPSBaud);&lt;br /&gt;
&lt;br /&gt;
  Serial.println(F(&amp;quot;DeviceExample.ino&amp;quot;));&lt;br /&gt;
  Serial.println(F(&amp;quot;A simple demonstration of TinyGPS++ with an attached GPS module&amp;quot;));&lt;br /&gt;
  Serial.print(F(&amp;quot;Testing TinyGPS++ library v. &amp;quot;)); Serial.println(TinyGPSPlus::libraryVersion());&lt;br /&gt;
  Serial.println(F(&amp;quot;by Mikal Hart&amp;quot;));&lt;br /&gt;
  Serial.println();&lt;br /&gt;
  &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop()&lt;br /&gt;
{&lt;br /&gt;
  // This sketch displays information every time a new sentence is correctly encoded.&lt;br /&gt;
  while (gpsSerial.available() &amp;gt; 0)&lt;br /&gt;
    if (gps.encode(gpsSerial.read()))&lt;br /&gt;
      displayInfo();&lt;br /&gt;
&lt;br /&gt;
  // If 5000 milliseconds pass and there are no characters coming in&lt;br /&gt;
  // over the software serial port, show a &amp;quot;No GPS detected&amp;quot; error&lt;br /&gt;
  if (millis() &amp;gt; 5000 &amp;amp;&amp;amp; gps.charsProcessed() &amp;lt; 10)&lt;br /&gt;
  {&lt;br /&gt;
    Serial.println(F(&amp;quot;No GPS detected&amp;quot;));&lt;br /&gt;
    while(true);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void displayInfo()&lt;br /&gt;
{&lt;br /&gt;
  Serial.print(F(&amp;quot;Speed: &amp;quot;)); &lt;br /&gt;
  if (gps.speed.isValid())&lt;br /&gt;
  {&lt;br /&gt;
    Serial.print(gps.speed.kmph(), 6);&lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
    Serial.print(F(&amp;quot;INVALID&amp;quot;));&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
  Serial.println();&lt;br /&gt;
&lt;br /&gt;
  secure_dist = (gps.speed.kmph()/10)*6; &lt;br /&gt;
  Serial.print(&amp;quot;distance de sécurite (en  m)= &amp;quot;);&lt;br /&gt;
  Serial.print(secure_dist);&lt;br /&gt;
  Serial.println();&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la cinquième séance==&lt;br /&gt;
* Soudage des barrettes et des ponts sur le circuit pour la Matrice LED (Shield)&lt;br /&gt;
''[INSERER IMAGE CIRCUIT]''&lt;br /&gt;
&lt;br /&gt;
* Test de la matrice LED et codage du programme pour l'affichage d'un message personnalisé coloré&lt;br /&gt;
Message choisi: Ne me collez pas au cul, PUTAIN!!&lt;br /&gt;
&lt;br /&gt;
''[INSERER LE CODE LED Matrix]''&lt;br /&gt;
&lt;br /&gt;
* Configuartion de la RPI&lt;br /&gt;
'''[PARTIE ARAME]'''&lt;br /&gt;
&lt;br /&gt;
''[INSERER CODE RPI]''&lt;br /&gt;
&lt;br /&gt;
* Codage de l'application Mobile &lt;br /&gt;
'''[PARTIE ARAME]'''&lt;br /&gt;
&lt;br /&gt;
''[INSERER CODE APPLI]''&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la sixième séance==&lt;br /&gt;
* Test du fonctionnement du système complet&lt;br /&gt;
Problèmes rencontrés:&lt;br /&gt;
&lt;br /&gt;
'''[Partie ARAME]'''&lt;br /&gt;
&lt;br /&gt;
''[INSERER Code final]''&lt;br /&gt;
&lt;br /&gt;
* Préparation de l'oral et finition du poster&lt;br /&gt;
&lt;br /&gt;
=Rendu=&lt;br /&gt;
&lt;br /&gt;
==Poster==&lt;br /&gt;
Version électronique du poster :&lt;br /&gt;
[[Fichier:2017_IOT_P5_poster.png|center|500px]]&lt;br /&gt;
&lt;br /&gt;
==Fichiers rendus==&lt;br /&gt;
&lt;br /&gt;
Notre application : [[Media:2017_IOT_P0_application.zip]]&lt;/div&gt;</summary>
		<author><name>Mdiop</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P5_IOT_2017&amp;diff=46977</id>
		<title>P5 IOT 2017</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P5_IOT_2017&amp;diff=46977"/>
				<updated>2018-01-29T01:45:29Z</updated>
		
		<summary type="html">&lt;p&gt;Mdiop : /* Détail du travail de la quatrième séance */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation du sujet =&lt;br /&gt;
&lt;br /&gt;
==Contexte==&lt;br /&gt;
&lt;br /&gt;
Nous effectuons ce projet dans le cadre du module internet des objets (Internet of things). &lt;br /&gt;
&lt;br /&gt;
L'objectif de ce module est de créer l'objet connecté de notre choix.&lt;br /&gt;
&lt;br /&gt;
Nous avons donc choisi de créer un objet en rapport avec la sécurité routière: le système Safe&amp;amp;Drive.&lt;br /&gt;
&lt;br /&gt;
==Description du projet==&lt;br /&gt;
&lt;br /&gt;
Pour veiller au respect des distances de sécurité, le système S&amp;amp;D va tout d'abord évaluer la distance entre votre voiture et celle qui vous suit. &lt;br /&gt;
&lt;br /&gt;
Grâce au GPS intégré, la distance de sécurité à respecter sera calculée en fonction de votre vitesse de circulation.&lt;br /&gt;
&lt;br /&gt;
Si cette distance de sécurité n'est pas respectée, un message de mise en garde sera affiché sur votre pare-brise arrière à destination du conducteur qui vous suit de trop prêt.&lt;br /&gt;
&lt;br /&gt;
Bien évidemment, ce message ne sera envoyé qu'après confirmation de l'utilisateur depuis l'application mobile du système Safe&amp;amp;Drive.&lt;br /&gt;
&lt;br /&gt;
En mode marche arrière, le système devient une aide à la manœuvre avec une caméra de recul et un détecteur d'obstacle.&lt;br /&gt;
&lt;br /&gt;
=Réalisation=&lt;br /&gt;
&lt;br /&gt;
==Matériel utilisé==&lt;br /&gt;
&lt;br /&gt;
* Raspberry Pi&lt;br /&gt;
* Arduino Uno&lt;br /&gt;
* Arduino Mega2560&lt;br /&gt;
* SparkFun GPS Shield&lt;br /&gt;
* Adafruit 64x32 RGB LED Matrix - 5mm pitch&lt;br /&gt;
* Garmin LIDAR-Lite v3&lt;br /&gt;
&lt;br /&gt;
==Suivi de réalisation==&lt;br /&gt;
 {| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 1 (08/01/2018)&lt;br /&gt;
 | Choix de l'objet + Choix du matériel&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 2 (09/01/2018)&lt;br /&gt;
 | Circuit shield pour la matrice LED + Test Li-DAR Lite&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 3 (16/01/2018)&lt;br /&gt;
 | Circuit shield pour la matrice LED + Test du shield GPS&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 4 (17/01/2018)&lt;br /&gt;
 | Circuit shield pour la matrice LED + Test Shield GPS&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 5 (22/01/2018)&lt;br /&gt;
 | Soudage circuit shield pour la matrice LED + Test LED Matrix + RaspberryPI + Application mobile&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 6 (24/01/2018)&lt;br /&gt;
 | Finitions + Resolutions des problèmes + Préparation orale (+poster)&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la première séance==&lt;br /&gt;
&lt;br /&gt;
Pour choisir notre projet nous avons débuté en faisant un pseudo-brainstorming duquel est ressorti 4 projets.&lt;br /&gt;
&lt;br /&gt;
Nous donc dû réduire notre choix à un seul de ces quatre possibilités.&lt;br /&gt;
&lt;br /&gt;
Notre choix final s'est donc porté sur le système Safe&amp;amp;Drive.&lt;br /&gt;
&lt;br /&gt;
Après avoir affiné les divers fonctionnalités de notre projet, nous avons commencé à réunir le matériel dont nous aurions besoin.&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la deuxième séance==&lt;br /&gt;
&lt;br /&gt;
* Début de la création du shield de la matrice de LED qui viendra se positionner sur l’Arduino Mega2560.&lt;br /&gt;
&lt;br /&gt;
* Test du capteur optique LI-DAR Lite et codage du programme pour le calcul de distance.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 LIDARLite Arduino Library&lt;br /&gt;
  GetDistanceI2c&lt;br /&gt;
&lt;br /&gt;
  This example shows how to initialize, configure, and read distance from a&lt;br /&gt;
  LIDAR-Lite connected over the I2C interface.&lt;br /&gt;
&lt;br /&gt;
  Connections:&lt;br /&gt;
  LIDAR-Lite 5 Vdc (red) to Arduino 5v&lt;br /&gt;
  LIDAR-Lite I2C SCL (green) to Arduino SCL&lt;br /&gt;
  LIDAR-Lite I2C SDA (blue) to Arduino SDA&lt;br /&gt;
  LIDAR-Lite Ground (black) to Arduino GND&lt;br /&gt;
  &lt;br /&gt;
  (Capacitor recommended to mitigate inrush current when device is enabled)&lt;br /&gt;
  680uF capacitor (+) to Arduino 5v&lt;br /&gt;
  680uF capacitor (-) to Arduino GND&lt;br /&gt;
&lt;br /&gt;
  See the Operation Manual for wiring diagrams and more information:&lt;br /&gt;
  http://www.robotshop.com/media/files/pdf2/pli-06-instruction.pdf&lt;br /&gt;
&lt;br /&gt;
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;Wire.h&amp;gt;&lt;br /&gt;
#include &amp;lt;LIDARLite.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
LIDARLite myLidarLite;&lt;br /&gt;
int distance_reelle ;&lt;br /&gt;
&lt;br /&gt;
void setup()&lt;br /&gt;
{&lt;br /&gt;
  Serial.begin(9600); // Initialize serial connection to display distance readings&lt;br /&gt;
&lt;br /&gt;
  myLidarLite.begin(0, true); // Set configuration to default and I2C to 400 kHz&lt;br /&gt;
&lt;br /&gt;
  myLidarLite.configure(0); // Change this number to try out alternate configurations&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop()&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
  // Take a measurement with receiver bias correction and print to serial terminal&lt;br /&gt;
  distance_reelle = (myLidarLite.distance());&lt;br /&gt;
  if(distance_reelle &amp;lt; 1)&lt;br /&gt;
  {&lt;br /&gt;
	Serial.println('O');&lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
	Serial.println('N');&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la troisième séance==&lt;br /&gt;
&lt;br /&gt;
* Poursuite de la création du circuit (shield) pour la matrice LED. &lt;br /&gt;
Cela n'a pas été une tâche facile en raison de la répartition des différentes pâtes dont nous avions besoin et des liaisons à effectuer.&lt;br /&gt;
&lt;br /&gt;
* Test du GPS et codage du programme de calcul de vitesse.&lt;br /&gt;
Nous avons rencontré des problèmes avec le GPS, celui-ci ne renvoyait des message d'erreurs &amp;quot;NO GPS DETECTED&amp;quot; ou bien des données nulles du type &amp;quot;Date: 00/00/0000&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la quatrième séance==&lt;br /&gt;
&lt;br /&gt;
* Finition du circuit (shield) pour la matrice LED et envoi de la demande de fabrication&lt;br /&gt;
&lt;br /&gt;
Nous avons rencontré un problème avec le logiciel nous avons donc dû refaire entièrement le circuit, cela nous a pas mal retardé dans notre projet.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Circuitp5.jpg|200px|]]&lt;br /&gt;
[[Fichier:circuit_bottom.jpg|200px|]]&lt;br /&gt;
&lt;br /&gt;
* Test du GPS et résolution des problèmes.&lt;br /&gt;
Nous avons rencontré beaucoup de problèmes avec le GPS, celui-ci se connectait bien aux satellites mais ne nous renvoyais que des données nulles ou bien un message d'erreur.&lt;br /&gt;
&lt;br /&gt;
Il s'est en faite avéré que selon la position du GPD receiver sur le shield celui-ci affichait ou non les données. &lt;br /&gt;
&lt;br /&gt;
Le problème a donc été résolu.&lt;br /&gt;
&lt;br /&gt;
''[INSERER LE CODE GPS]''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;TinyGPS++.h&amp;gt;&lt;br /&gt;
#include &amp;lt;SoftwareSerial.h&amp;gt;&lt;br /&gt;
#include &amp;lt;Wire.h&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
 This example uses software serial and the TinyGPS++ library by Mikal Hart&lt;br /&gt;
 Based on TinyGPSPlus/DeviceExample.ino by Mikal Hart&lt;br /&gt;
 Modified by acavis&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
// Choose two Arduino pins to use for software serial&lt;br /&gt;
// The GPS Shield uses D2 and D3 by default when in DLINE mode&lt;br /&gt;
int RXPin = 50;&lt;br /&gt;
int TXPin = 3; &lt;br /&gt;
&lt;br /&gt;
// The Skytaq EM-506 GPS module included in the GPS Shield Kit&lt;br /&gt;
// uses 4800 baud by default&lt;br /&gt;
int GPSBaud = 4800;&lt;br /&gt;
&lt;br /&gt;
// Create a TinyGPS++ object called &amp;quot;gps&amp;quot;&lt;br /&gt;
TinyGPSPlus gps;&lt;br /&gt;
&lt;br /&gt;
// Create a software serial port called &amp;quot;gpsSerial&amp;quot;&lt;br /&gt;
SoftwareSerial gpsSerial(RXPin, TXPin);&lt;br /&gt;
&lt;br /&gt;
void setup()&lt;br /&gt;
{&lt;br /&gt;
  // Start the Arduino hardware serial port at 9600 baud&lt;br /&gt;
  Serial.begin(9600);&lt;br /&gt;
&lt;br /&gt;
  // Start the software serial port at the GPS's default baud&lt;br /&gt;
  gpsSerial.begin(GPSBaud);&lt;br /&gt;
&lt;br /&gt;
  Serial.println(F(&amp;quot;DeviceExample.ino&amp;quot;));&lt;br /&gt;
  Serial.println(F(&amp;quot;A simple demonstration of TinyGPS++ with an attached GPS module&amp;quot;));&lt;br /&gt;
  Serial.print(F(&amp;quot;Testing TinyGPS++ library v. &amp;quot;)); Serial.println(TinyGPSPlus::libraryVersion());&lt;br /&gt;
  Serial.println(F(&amp;quot;by Mikal Hart&amp;quot;));&lt;br /&gt;
  Serial.println();&lt;br /&gt;
  &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop()&lt;br /&gt;
{&lt;br /&gt;
  // This sketch displays information every time a new sentence is correctly encoded.&lt;br /&gt;
  while (gpsSerial.available() &amp;gt; 0)&lt;br /&gt;
    if (gps.encode(gpsSerial.read()))&lt;br /&gt;
      displayInfo();&lt;br /&gt;
&lt;br /&gt;
  // If 5000 milliseconds pass and there are no characters coming in&lt;br /&gt;
  // over the software serial port, show a &amp;quot;No GPS detected&amp;quot; error&lt;br /&gt;
  if (millis() &amp;gt; 5000 &amp;amp;&amp;amp; gps.charsProcessed() &amp;lt; 10)&lt;br /&gt;
  {&lt;br /&gt;
    Serial.println(F(&amp;quot;No GPS detected&amp;quot;));&lt;br /&gt;
    while(true);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void displayInfo()&lt;br /&gt;
{&lt;br /&gt;
  Serial.print(F(&amp;quot;Speed: &amp;quot;)); &lt;br /&gt;
  if (gps.speed.isValid())&lt;br /&gt;
  {&lt;br /&gt;
    Serial.print(gps.speed.kmph(), 6);&lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
    Serial.print(F(&amp;quot;INVALID&amp;quot;));&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
  Serial.println();&lt;br /&gt;
&lt;br /&gt;
  secure_dist = (gps.speed.kmph()/10)*6; &lt;br /&gt;
  Serial.print(&amp;quot;distance de sécurite (en  m)= &amp;quot;);&lt;br /&gt;
  Serial.print(secure_dist);&lt;br /&gt;
  Serial.println();&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la cinquième séance==&lt;br /&gt;
* Soudage des barrettes et des ponts sur le circuit pour la Matrice LED (Shield)&lt;br /&gt;
''[INSERER IMAGE CIRCUIT]''&lt;br /&gt;
&lt;br /&gt;
* Test de la matrice LED et codage du programme pour l'affichage d'un message personnalisé coloré&lt;br /&gt;
Message choisi: Ne me collez pas au cul, PUTAIN!!&lt;br /&gt;
&lt;br /&gt;
''[INSERER LE CODE LED Matrix]''&lt;br /&gt;
&lt;br /&gt;
* Configuartion de la RPI&lt;br /&gt;
'''[PARTIE ARAME]'''&lt;br /&gt;
&lt;br /&gt;
''[INSERER CODE RPI]''&lt;br /&gt;
&lt;br /&gt;
* Codage de l'application Mobile &lt;br /&gt;
'''[PARTIE ARAME]'''&lt;br /&gt;
&lt;br /&gt;
''[INSERER CODE APPLI]''&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la sixième séance==&lt;br /&gt;
* Test du fonctionnement du système complet&lt;br /&gt;
Problèmes rencontrés:&lt;br /&gt;
&lt;br /&gt;
'''[Partie ARAME]'''&lt;br /&gt;
&lt;br /&gt;
''[INSERER Code final]''&lt;br /&gt;
&lt;br /&gt;
* Préparation de l'oral et finition du poster&lt;br /&gt;
&lt;br /&gt;
=Rendu=&lt;br /&gt;
&lt;br /&gt;
==Poster==&lt;br /&gt;
Version électronique du poster :&lt;br /&gt;
[[Fichier:2017_IOT_P5_poster.png|center|500px]]&lt;br /&gt;
&lt;br /&gt;
==Fichiers rendus==&lt;br /&gt;
&lt;br /&gt;
Notre application : [[Media:2017_IOT_P0_application.zip]]&lt;/div&gt;</summary>
		<author><name>Mdiop</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Circuit_bottom.jpg&amp;diff=46976</id>
		<title>Fichier:Circuit bottom.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Circuit_bottom.jpg&amp;diff=46976"/>
				<updated>2018-01-29T01:37:13Z</updated>
		
		<summary type="html">&lt;p&gt;Mdiop : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Mdiop</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P5_IOT_2017&amp;diff=46975</id>
		<title>P5 IOT 2017</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P5_IOT_2017&amp;diff=46975"/>
				<updated>2018-01-29T01:34:15Z</updated>
		
		<summary type="html">&lt;p&gt;Mdiop : /* Détail du travail de la quatrième séance */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation du sujet =&lt;br /&gt;
&lt;br /&gt;
==Contexte==&lt;br /&gt;
&lt;br /&gt;
Nous effectuons ce projet dans le cadre du module internet des objets (Internet of things). &lt;br /&gt;
&lt;br /&gt;
L'objectif de ce module est de créer l'objet connecté de notre choix.&lt;br /&gt;
&lt;br /&gt;
Nous avons donc choisi de créer un objet en rapport avec la sécurité routière: le système Safe&amp;amp;Drive.&lt;br /&gt;
&lt;br /&gt;
==Description du projet==&lt;br /&gt;
&lt;br /&gt;
Pour veiller au respect des distances de sécurité, le système S&amp;amp;D va tout d'abord évaluer la distance entre votre voiture et celle qui vous suit. &lt;br /&gt;
&lt;br /&gt;
Grâce au GPS intégré, la distance de sécurité à respecter sera calculée en fonction de votre vitesse de circulation.&lt;br /&gt;
&lt;br /&gt;
Si cette distance de sécurité n'est pas respectée, un message de mise en garde sera affiché sur votre pare-brise arrière à destination du conducteur qui vous suit de trop prêt.&lt;br /&gt;
&lt;br /&gt;
Bien évidemment, ce message ne sera envoyé qu'après confirmation de l'utilisateur depuis l'application mobile du système Safe&amp;amp;Drive.&lt;br /&gt;
&lt;br /&gt;
En mode marche arrière, le système devient une aide à la manœuvre avec une caméra de recul et un détecteur d'obstacle.&lt;br /&gt;
&lt;br /&gt;
=Réalisation=&lt;br /&gt;
&lt;br /&gt;
==Matériel utilisé==&lt;br /&gt;
&lt;br /&gt;
* Raspberry Pi&lt;br /&gt;
* Arduino Uno&lt;br /&gt;
* Arduino Mega2560&lt;br /&gt;
* SparkFun GPS Shield&lt;br /&gt;
* Adafruit 64x32 RGB LED Matrix - 5mm pitch&lt;br /&gt;
* Garmin LIDAR-Lite v3&lt;br /&gt;
&lt;br /&gt;
==Suivi de réalisation==&lt;br /&gt;
 {| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 1 (08/01/2018)&lt;br /&gt;
 | Choix de l'objet + Choix du matériel&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 2 (09/01/2018)&lt;br /&gt;
 | Circuit shield pour la matrice LED + Test Li-DAR Lite&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 3 (16/01/2018)&lt;br /&gt;
 | Circuit shield pour la matrice LED + Test du shield GPS&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 4 (17/01/2018)&lt;br /&gt;
 | Circuit shield pour la matrice LED + Test Shield GPS&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 5 (22/01/2018)&lt;br /&gt;
 | Soudage circuit shield pour la matrice LED + Test LED Matrix + RaspberryPI + Application mobile&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 6 (24/01/2018)&lt;br /&gt;
 | Finitions + Resolutions des problèmes + Préparation orale (+poster)&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la première séance==&lt;br /&gt;
&lt;br /&gt;
Pour choisir notre projet nous avons débuté en faisant un pseudo-brainstorming duquel est ressorti 4 projets.&lt;br /&gt;
&lt;br /&gt;
Nous donc dû réduire notre choix à un seul de ces quatre possibilités.&lt;br /&gt;
&lt;br /&gt;
Notre choix final s'est donc porté sur le système Safe&amp;amp;Drive.&lt;br /&gt;
&lt;br /&gt;
Après avoir affiné les divers fonctionnalités de notre projet, nous avons commencé à réunir le matériel dont nous aurions besoin.&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la deuxième séance==&lt;br /&gt;
&lt;br /&gt;
* Début de la création du shield de la matrice de LED qui viendra se positionner sur l’Arduino Mega2560.&lt;br /&gt;
&lt;br /&gt;
* Test du capteur optique LI-DAR Lite et codage du programme pour le calcul de distance.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 LIDARLite Arduino Library&lt;br /&gt;
  GetDistanceI2c&lt;br /&gt;
&lt;br /&gt;
  This example shows how to initialize, configure, and read distance from a&lt;br /&gt;
  LIDAR-Lite connected over the I2C interface.&lt;br /&gt;
&lt;br /&gt;
  Connections:&lt;br /&gt;
  LIDAR-Lite 5 Vdc (red) to Arduino 5v&lt;br /&gt;
  LIDAR-Lite I2C SCL (green) to Arduino SCL&lt;br /&gt;
  LIDAR-Lite I2C SDA (blue) to Arduino SDA&lt;br /&gt;
  LIDAR-Lite Ground (black) to Arduino GND&lt;br /&gt;
  &lt;br /&gt;
  (Capacitor recommended to mitigate inrush current when device is enabled)&lt;br /&gt;
  680uF capacitor (+) to Arduino 5v&lt;br /&gt;
  680uF capacitor (-) to Arduino GND&lt;br /&gt;
&lt;br /&gt;
  See the Operation Manual for wiring diagrams and more information:&lt;br /&gt;
  http://www.robotshop.com/media/files/pdf2/pli-06-instruction.pdf&lt;br /&gt;
&lt;br /&gt;
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;Wire.h&amp;gt;&lt;br /&gt;
#include &amp;lt;LIDARLite.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
LIDARLite myLidarLite;&lt;br /&gt;
int distance_reelle ;&lt;br /&gt;
&lt;br /&gt;
void setup()&lt;br /&gt;
{&lt;br /&gt;
  Serial.begin(9600); // Initialize serial connection to display distance readings&lt;br /&gt;
&lt;br /&gt;
  myLidarLite.begin(0, true); // Set configuration to default and I2C to 400 kHz&lt;br /&gt;
&lt;br /&gt;
  myLidarLite.configure(0); // Change this number to try out alternate configurations&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop()&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
  // Take a measurement with receiver bias correction and print to serial terminal&lt;br /&gt;
  distance_reelle = (myLidarLite.distance());&lt;br /&gt;
  if(distance_reelle &amp;lt; 1)&lt;br /&gt;
  {&lt;br /&gt;
	Serial.println('O');&lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
	Serial.println('N');&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la troisième séance==&lt;br /&gt;
&lt;br /&gt;
* Poursuite de la création du circuit (shield) pour la matrice LED. &lt;br /&gt;
Cela n'a pas été une tâche facile en raison de la répartition des différentes pâtes dont nous avions besoin et des liaisons à effectuer.&lt;br /&gt;
&lt;br /&gt;
* Test du GPS et codage du programme de calcul de vitesse.&lt;br /&gt;
Nous avons rencontré des problèmes avec le GPS, celui-ci ne renvoyait des message d'erreurs &amp;quot;NO GPS DETECTED&amp;quot; ou bien des données nulles du type &amp;quot;Date: 00/00/0000&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la quatrième séance==&lt;br /&gt;
&lt;br /&gt;
* Finition du circuit (shield) pour la matrice LED et envoi de la demande de fabrication&lt;br /&gt;
&lt;br /&gt;
Nous avons rencontré un problème avec le logiciel nous avons donc dû refaire entièrement le circuit, cela nous a pas mal retardé dans notre projet.&lt;br /&gt;
&lt;br /&gt;
''[INSERER IMAGES DU CIRCUIT (Différentes vues)]''&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Circuitp5.jpg|200px|]]&lt;br /&gt;
&lt;br /&gt;
* Test du GPS et résolution des problèmes.&lt;br /&gt;
Nous avons rencontré beaucoup de problèmes avec le GPS, celui-ci se connectait bien aux satellites mais ne nous renvoyais que des données nulles ou bien un message d'erreur.&lt;br /&gt;
&lt;br /&gt;
Il s'est en faite avéré que selon la position du GPD receiver sur le shield celui-ci affichait ou non les données. &lt;br /&gt;
&lt;br /&gt;
Le problème a donc été résolu.&lt;br /&gt;
&lt;br /&gt;
''[INSERER LE CODE GPS]''&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la cinquième séance==&lt;br /&gt;
* Soudage des barrettes et des ponts sur le circuit pour la Matrice LED (Shield)&lt;br /&gt;
''[INSERER IMAGE CIRCUIT]''&lt;br /&gt;
&lt;br /&gt;
* Test de la matrice LED et codage du programme pour l'affichage d'un message personnalisé coloré&lt;br /&gt;
Message choisi: Ne me collez pas au cul, PUTAIN!!&lt;br /&gt;
&lt;br /&gt;
''[INSERER LE CODE LED Matrix]''&lt;br /&gt;
&lt;br /&gt;
* Configuartion de la RPI&lt;br /&gt;
'''[PARTIE ARAME]'''&lt;br /&gt;
&lt;br /&gt;
''[INSERER CODE RPI]''&lt;br /&gt;
&lt;br /&gt;
* Codage de l'application Mobile &lt;br /&gt;
'''[PARTIE ARAME]'''&lt;br /&gt;
&lt;br /&gt;
''[INSERER CODE APPLI]''&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la sixième séance==&lt;br /&gt;
* Test du fonctionnement du système complet&lt;br /&gt;
Problèmes rencontrés:&lt;br /&gt;
&lt;br /&gt;
'''[Partie ARAME]'''&lt;br /&gt;
&lt;br /&gt;
''[INSERER Code final]''&lt;br /&gt;
&lt;br /&gt;
* Préparation de l'oral et finition du poster&lt;br /&gt;
&lt;br /&gt;
=Rendu=&lt;br /&gt;
&lt;br /&gt;
==Poster==&lt;br /&gt;
Version électronique du poster :&lt;br /&gt;
[[Fichier:2017_IOT_P5_poster.png|center|500px]]&lt;br /&gt;
&lt;br /&gt;
==Fichiers rendus==&lt;br /&gt;
&lt;br /&gt;
Notre application : [[Media:2017_IOT_P0_application.zip]]&lt;/div&gt;</summary>
		<author><name>Mdiop</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P5_IOT_2017&amp;diff=46974</id>
		<title>P5 IOT 2017</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P5_IOT_2017&amp;diff=46974"/>
				<updated>2018-01-29T01:33:18Z</updated>
		
		<summary type="html">&lt;p&gt;Mdiop : /* Détail du travail de la quatrième séance */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation du sujet =&lt;br /&gt;
&lt;br /&gt;
==Contexte==&lt;br /&gt;
&lt;br /&gt;
Nous effectuons ce projet dans le cadre du module internet des objets (Internet of things). &lt;br /&gt;
&lt;br /&gt;
L'objectif de ce module est de créer l'objet connecté de notre choix.&lt;br /&gt;
&lt;br /&gt;
Nous avons donc choisi de créer un objet en rapport avec la sécurité routière: le système Safe&amp;amp;Drive.&lt;br /&gt;
&lt;br /&gt;
==Description du projet==&lt;br /&gt;
&lt;br /&gt;
Pour veiller au respect des distances de sécurité, le système S&amp;amp;D va tout d'abord évaluer la distance entre votre voiture et celle qui vous suit. &lt;br /&gt;
&lt;br /&gt;
Grâce au GPS intégré, la distance de sécurité à respecter sera calculée en fonction de votre vitesse de circulation.&lt;br /&gt;
&lt;br /&gt;
Si cette distance de sécurité n'est pas respectée, un message de mise en garde sera affiché sur votre pare-brise arrière à destination du conducteur qui vous suit de trop prêt.&lt;br /&gt;
&lt;br /&gt;
Bien évidemment, ce message ne sera envoyé qu'après confirmation de l'utilisateur depuis l'application mobile du système Safe&amp;amp;Drive.&lt;br /&gt;
&lt;br /&gt;
En mode marche arrière, le système devient une aide à la manœuvre avec une caméra de recul et un détecteur d'obstacle.&lt;br /&gt;
&lt;br /&gt;
=Réalisation=&lt;br /&gt;
&lt;br /&gt;
==Matériel utilisé==&lt;br /&gt;
&lt;br /&gt;
* Raspberry Pi&lt;br /&gt;
* Arduino Uno&lt;br /&gt;
* Arduino Mega2560&lt;br /&gt;
* SparkFun GPS Shield&lt;br /&gt;
* Adafruit 64x32 RGB LED Matrix - 5mm pitch&lt;br /&gt;
* Garmin LIDAR-Lite v3&lt;br /&gt;
&lt;br /&gt;
==Suivi de réalisation==&lt;br /&gt;
 {| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 1 (08/01/2018)&lt;br /&gt;
 | Choix de l'objet + Choix du matériel&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 2 (09/01/2018)&lt;br /&gt;
 | Circuit shield pour la matrice LED + Test Li-DAR Lite&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 3 (16/01/2018)&lt;br /&gt;
 | Circuit shield pour la matrice LED + Test du shield GPS&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 4 (17/01/2018)&lt;br /&gt;
 | Circuit shield pour la matrice LED + Test Shield GPS&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 5 (22/01/2018)&lt;br /&gt;
 | Soudage circuit shield pour la matrice LED + Test LED Matrix + RaspberryPI + Application mobile&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 6 (24/01/2018)&lt;br /&gt;
 | Finitions + Resolutions des problèmes + Préparation orale (+poster)&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la première séance==&lt;br /&gt;
&lt;br /&gt;
Pour choisir notre projet nous avons débuté en faisant un pseudo-brainstorming duquel est ressorti 4 projets.&lt;br /&gt;
&lt;br /&gt;
Nous donc dû réduire notre choix à un seul de ces quatre possibilités.&lt;br /&gt;
&lt;br /&gt;
Notre choix final s'est donc porté sur le système Safe&amp;amp;Drive.&lt;br /&gt;
&lt;br /&gt;
Après avoir affiné les divers fonctionnalités de notre projet, nous avons commencé à réunir le matériel dont nous aurions besoin.&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la deuxième séance==&lt;br /&gt;
&lt;br /&gt;
* Début de la création du shield de la matrice de LED qui viendra se positionner sur l’Arduino Mega2560.&lt;br /&gt;
&lt;br /&gt;
* Test du capteur optique LI-DAR Lite et codage du programme pour le calcul de distance.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 LIDARLite Arduino Library&lt;br /&gt;
  GetDistanceI2c&lt;br /&gt;
&lt;br /&gt;
  This example shows how to initialize, configure, and read distance from a&lt;br /&gt;
  LIDAR-Lite connected over the I2C interface.&lt;br /&gt;
&lt;br /&gt;
  Connections:&lt;br /&gt;
  LIDAR-Lite 5 Vdc (red) to Arduino 5v&lt;br /&gt;
  LIDAR-Lite I2C SCL (green) to Arduino SCL&lt;br /&gt;
  LIDAR-Lite I2C SDA (blue) to Arduino SDA&lt;br /&gt;
  LIDAR-Lite Ground (black) to Arduino GND&lt;br /&gt;
  &lt;br /&gt;
  (Capacitor recommended to mitigate inrush current when device is enabled)&lt;br /&gt;
  680uF capacitor (+) to Arduino 5v&lt;br /&gt;
  680uF capacitor (-) to Arduino GND&lt;br /&gt;
&lt;br /&gt;
  See the Operation Manual for wiring diagrams and more information:&lt;br /&gt;
  http://www.robotshop.com/media/files/pdf2/pli-06-instruction.pdf&lt;br /&gt;
&lt;br /&gt;
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;Wire.h&amp;gt;&lt;br /&gt;
#include &amp;lt;LIDARLite.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
LIDARLite myLidarLite;&lt;br /&gt;
int distance_reelle ;&lt;br /&gt;
&lt;br /&gt;
void setup()&lt;br /&gt;
{&lt;br /&gt;
  Serial.begin(9600); // Initialize serial connection to display distance readings&lt;br /&gt;
&lt;br /&gt;
  myLidarLite.begin(0, true); // Set configuration to default and I2C to 400 kHz&lt;br /&gt;
&lt;br /&gt;
  myLidarLite.configure(0); // Change this number to try out alternate configurations&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop()&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
  // Take a measurement with receiver bias correction and print to serial terminal&lt;br /&gt;
  distance_reelle = (myLidarLite.distance());&lt;br /&gt;
  if(distance_reelle &amp;lt; 1)&lt;br /&gt;
  {&lt;br /&gt;
	Serial.println('O');&lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
	Serial.println('N');&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la troisième séance==&lt;br /&gt;
&lt;br /&gt;
* Poursuite de la création du circuit (shield) pour la matrice LED. &lt;br /&gt;
Cela n'a pas été une tâche facile en raison de la répartition des différentes pâtes dont nous avions besoin et des liaisons à effectuer.&lt;br /&gt;
&lt;br /&gt;
* Test du GPS et codage du programme de calcul de vitesse.&lt;br /&gt;
Nous avons rencontré des problèmes avec le GPS, celui-ci ne renvoyait des message d'erreurs &amp;quot;NO GPS DETECTED&amp;quot; ou bien des données nulles du type &amp;quot;Date: 00/00/0000&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la quatrième séance==&lt;br /&gt;
&lt;br /&gt;
* Finition du circuit (shield) pour la matrice LED et envoi de la demande de fabrication&lt;br /&gt;
&lt;br /&gt;
Nous avons rencontré un problème avec le logiciel nous avons donc dû refaire entièrement le circuit, cela nous a pas mal retardé dans notre projet.&lt;br /&gt;
&lt;br /&gt;
''[INSERER IMAGES DU CIRCUIT (Différentes vues)]''&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Circuitp5.jpg|200px|thumb|left]]&lt;br /&gt;
&lt;br /&gt;
* Test du GPS et résolution des problèmes.&lt;br /&gt;
Nous avons rencontré beaucoup de problèmes avec le GPS, celui-ci se connectait bien aux satellites mais ne nous renvoyais que des données nulles ou bien un message d'erreur.&lt;br /&gt;
&lt;br /&gt;
Il s'est en faite avéré que selon la position du GPD receiver sur le shield celui-ci affichait ou non les données. &lt;br /&gt;
&lt;br /&gt;
Le problème a donc été résolu.&lt;br /&gt;
&lt;br /&gt;
''[INSERER LE CODE GPS]''&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la cinquième séance==&lt;br /&gt;
* Soudage des barrettes et des ponts sur le circuit pour la Matrice LED (Shield)&lt;br /&gt;
''[INSERER IMAGE CIRCUIT]''&lt;br /&gt;
&lt;br /&gt;
* Test de la matrice LED et codage du programme pour l'affichage d'un message personnalisé coloré&lt;br /&gt;
Message choisi: Ne me collez pas au cul, PUTAIN!!&lt;br /&gt;
&lt;br /&gt;
''[INSERER LE CODE LED Matrix]''&lt;br /&gt;
&lt;br /&gt;
* Configuartion de la RPI&lt;br /&gt;
'''[PARTIE ARAME]'''&lt;br /&gt;
&lt;br /&gt;
''[INSERER CODE RPI]''&lt;br /&gt;
&lt;br /&gt;
* Codage de l'application Mobile &lt;br /&gt;
'''[PARTIE ARAME]'''&lt;br /&gt;
&lt;br /&gt;
''[INSERER CODE APPLI]''&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la sixième séance==&lt;br /&gt;
* Test du fonctionnement du système complet&lt;br /&gt;
Problèmes rencontrés:&lt;br /&gt;
&lt;br /&gt;
'''[Partie ARAME]'''&lt;br /&gt;
&lt;br /&gt;
''[INSERER Code final]''&lt;br /&gt;
&lt;br /&gt;
* Préparation de l'oral et finition du poster&lt;br /&gt;
&lt;br /&gt;
=Rendu=&lt;br /&gt;
&lt;br /&gt;
==Poster==&lt;br /&gt;
Version électronique du poster :&lt;br /&gt;
[[Fichier:2017_IOT_P5_poster.png|center|500px]]&lt;br /&gt;
&lt;br /&gt;
==Fichiers rendus==&lt;br /&gt;
&lt;br /&gt;
Notre application : [[Media:2017_IOT_P0_application.zip]]&lt;/div&gt;</summary>
		<author><name>Mdiop</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P5_IOT_2017&amp;diff=46973</id>
		<title>P5 IOT 2017</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P5_IOT_2017&amp;diff=46973"/>
				<updated>2018-01-29T01:31:30Z</updated>
		
		<summary type="html">&lt;p&gt;Mdiop : /* Détail du travail de la quatrième séance */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation du sujet =&lt;br /&gt;
&lt;br /&gt;
==Contexte==&lt;br /&gt;
&lt;br /&gt;
Nous effectuons ce projet dans le cadre du module internet des objets (Internet of things). &lt;br /&gt;
&lt;br /&gt;
L'objectif de ce module est de créer l'objet connecté de notre choix.&lt;br /&gt;
&lt;br /&gt;
Nous avons donc choisi de créer un objet en rapport avec la sécurité routière: le système Safe&amp;amp;Drive.&lt;br /&gt;
&lt;br /&gt;
==Description du projet==&lt;br /&gt;
&lt;br /&gt;
Pour veiller au respect des distances de sécurité, le système S&amp;amp;D va tout d'abord évaluer la distance entre votre voiture et celle qui vous suit. &lt;br /&gt;
&lt;br /&gt;
Grâce au GPS intégré, la distance de sécurité à respecter sera calculée en fonction de votre vitesse de circulation.&lt;br /&gt;
&lt;br /&gt;
Si cette distance de sécurité n'est pas respectée, un message de mise en garde sera affiché sur votre pare-brise arrière à destination du conducteur qui vous suit de trop prêt.&lt;br /&gt;
&lt;br /&gt;
Bien évidemment, ce message ne sera envoyé qu'après confirmation de l'utilisateur depuis l'application mobile du système Safe&amp;amp;Drive.&lt;br /&gt;
&lt;br /&gt;
En mode marche arrière, le système devient une aide à la manœuvre avec une caméra de recul et un détecteur d'obstacle.&lt;br /&gt;
&lt;br /&gt;
=Réalisation=&lt;br /&gt;
&lt;br /&gt;
==Matériel utilisé==&lt;br /&gt;
&lt;br /&gt;
* Raspberry Pi&lt;br /&gt;
* Arduino Uno&lt;br /&gt;
* Arduino Mega2560&lt;br /&gt;
* SparkFun GPS Shield&lt;br /&gt;
* Adafruit 64x32 RGB LED Matrix - 5mm pitch&lt;br /&gt;
* Garmin LIDAR-Lite v3&lt;br /&gt;
&lt;br /&gt;
==Suivi de réalisation==&lt;br /&gt;
 {| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 1 (08/01/2018)&lt;br /&gt;
 | Choix de l'objet + Choix du matériel&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 2 (09/01/2018)&lt;br /&gt;
 | Circuit shield pour la matrice LED + Test Li-DAR Lite&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 3 (16/01/2018)&lt;br /&gt;
 | Circuit shield pour la matrice LED + Test du shield GPS&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 4 (17/01/2018)&lt;br /&gt;
 | Circuit shield pour la matrice LED + Test Shield GPS&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 5 (22/01/2018)&lt;br /&gt;
 | Soudage circuit shield pour la matrice LED + Test LED Matrix + RaspberryPI + Application mobile&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 6 (24/01/2018)&lt;br /&gt;
 | Finitions + Resolutions des problèmes + Préparation orale (+poster)&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la première séance==&lt;br /&gt;
&lt;br /&gt;
Pour choisir notre projet nous avons débuté en faisant un pseudo-brainstorming duquel est ressorti 4 projets.&lt;br /&gt;
&lt;br /&gt;
Nous donc dû réduire notre choix à un seul de ces quatre possibilités.&lt;br /&gt;
&lt;br /&gt;
Notre choix final s'est donc porté sur le système Safe&amp;amp;Drive.&lt;br /&gt;
&lt;br /&gt;
Après avoir affiné les divers fonctionnalités de notre projet, nous avons commencé à réunir le matériel dont nous aurions besoin.&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la deuxième séance==&lt;br /&gt;
&lt;br /&gt;
* Début de la création du shield de la matrice de LED qui viendra se positionner sur l’Arduino Mega2560.&lt;br /&gt;
&lt;br /&gt;
* Test du capteur optique LI-DAR Lite et codage du programme pour le calcul de distance.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 LIDARLite Arduino Library&lt;br /&gt;
  GetDistanceI2c&lt;br /&gt;
&lt;br /&gt;
  This example shows how to initialize, configure, and read distance from a&lt;br /&gt;
  LIDAR-Lite connected over the I2C interface.&lt;br /&gt;
&lt;br /&gt;
  Connections:&lt;br /&gt;
  LIDAR-Lite 5 Vdc (red) to Arduino 5v&lt;br /&gt;
  LIDAR-Lite I2C SCL (green) to Arduino SCL&lt;br /&gt;
  LIDAR-Lite I2C SDA (blue) to Arduino SDA&lt;br /&gt;
  LIDAR-Lite Ground (black) to Arduino GND&lt;br /&gt;
  &lt;br /&gt;
  (Capacitor recommended to mitigate inrush current when device is enabled)&lt;br /&gt;
  680uF capacitor (+) to Arduino 5v&lt;br /&gt;
  680uF capacitor (-) to Arduino GND&lt;br /&gt;
&lt;br /&gt;
  See the Operation Manual for wiring diagrams and more information:&lt;br /&gt;
  http://www.robotshop.com/media/files/pdf2/pli-06-instruction.pdf&lt;br /&gt;
&lt;br /&gt;
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;Wire.h&amp;gt;&lt;br /&gt;
#include &amp;lt;LIDARLite.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
LIDARLite myLidarLite;&lt;br /&gt;
int distance_reelle ;&lt;br /&gt;
&lt;br /&gt;
void setup()&lt;br /&gt;
{&lt;br /&gt;
  Serial.begin(9600); // Initialize serial connection to display distance readings&lt;br /&gt;
&lt;br /&gt;
  myLidarLite.begin(0, true); // Set configuration to default and I2C to 400 kHz&lt;br /&gt;
&lt;br /&gt;
  myLidarLite.configure(0); // Change this number to try out alternate configurations&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop()&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
  // Take a measurement with receiver bias correction and print to serial terminal&lt;br /&gt;
  distance_reelle = (myLidarLite.distance());&lt;br /&gt;
  if(distance_reelle &amp;lt; 1)&lt;br /&gt;
  {&lt;br /&gt;
	Serial.println('O');&lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
	Serial.println('N');&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la troisième séance==&lt;br /&gt;
&lt;br /&gt;
* Poursuite de la création du circuit (shield) pour la matrice LED. &lt;br /&gt;
Cela n'a pas été une tâche facile en raison de la répartition des différentes pâtes dont nous avions besoin et des liaisons à effectuer.&lt;br /&gt;
&lt;br /&gt;
* Test du GPS et codage du programme de calcul de vitesse.&lt;br /&gt;
Nous avons rencontré des problèmes avec le GPS, celui-ci ne renvoyait des message d'erreurs &amp;quot;NO GPS DETECTED&amp;quot; ou bien des données nulles du type &amp;quot;Date: 00/00/0000&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la quatrième séance==&lt;br /&gt;
&lt;br /&gt;
* Finition du circuit (shield) pour la matrice LED et envoi de la demande de fabrication&lt;br /&gt;
&lt;br /&gt;
Nous avons rencontré un problème avec le logiciel nous avons donc dû refaire entièrement le circuit, cela nous a pas mal retardé dans notre projet.&lt;br /&gt;
&lt;br /&gt;
''[INSERER IMAGES DU CIRCUIT (Différentes vues)]''&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Circuitp5.jpg]]&lt;br /&gt;
&lt;br /&gt;
* Test du GPS et résolution des problèmes.&lt;br /&gt;
Nous avons rencontré beaucoup de problèmes avec le GPS, celui-ci se connectait bien aux satellites mais ne nous renvoyais que des données nulles ou bien un message d'erreur.&lt;br /&gt;
&lt;br /&gt;
Il s'est en faite avéré que selon la position du GPD receiver sur le shield celui-ci affichait ou non les données. &lt;br /&gt;
&lt;br /&gt;
Le problème a donc été résolu.&lt;br /&gt;
&lt;br /&gt;
''[INSERER LE CODE GPS]''&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la cinquième séance==&lt;br /&gt;
* Soudage des barrettes et des ponts sur le circuit pour la Matrice LED (Shield)&lt;br /&gt;
''[INSERER IMAGE CIRCUIT]''&lt;br /&gt;
&lt;br /&gt;
* Test de la matrice LED et codage du programme pour l'affichage d'un message personnalisé coloré&lt;br /&gt;
Message choisi: Ne me collez pas au cul, PUTAIN!!&lt;br /&gt;
&lt;br /&gt;
''[INSERER LE CODE LED Matrix]''&lt;br /&gt;
&lt;br /&gt;
* Configuartion de la RPI&lt;br /&gt;
'''[PARTIE ARAME]'''&lt;br /&gt;
&lt;br /&gt;
''[INSERER CODE RPI]''&lt;br /&gt;
&lt;br /&gt;
* Codage de l'application Mobile &lt;br /&gt;
'''[PARTIE ARAME]'''&lt;br /&gt;
&lt;br /&gt;
''[INSERER CODE APPLI]''&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la sixième séance==&lt;br /&gt;
* Test du fonctionnement du système complet&lt;br /&gt;
Problèmes rencontrés:&lt;br /&gt;
&lt;br /&gt;
'''[Partie ARAME]'''&lt;br /&gt;
&lt;br /&gt;
''[INSERER Code final]''&lt;br /&gt;
&lt;br /&gt;
* Préparation de l'oral et finition du poster&lt;br /&gt;
&lt;br /&gt;
=Rendu=&lt;br /&gt;
&lt;br /&gt;
==Poster==&lt;br /&gt;
Version électronique du poster :&lt;br /&gt;
[[Fichier:2017_IOT_P5_poster.png|center|500px]]&lt;br /&gt;
&lt;br /&gt;
==Fichiers rendus==&lt;br /&gt;
&lt;br /&gt;
Notre application : [[Media:2017_IOT_P0_application.zip]]&lt;/div&gt;</summary>
		<author><name>Mdiop</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Circuitp5.jpg&amp;diff=46972</id>
		<title>Fichier:Circuitp5.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Circuitp5.jpg&amp;diff=46972"/>
				<updated>2018-01-29T01:30:09Z</updated>
		
		<summary type="html">&lt;p&gt;Mdiop : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Mdiop</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P5_IOT_2017&amp;diff=46971</id>
		<title>P5 IOT 2017</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P5_IOT_2017&amp;diff=46971"/>
				<updated>2018-01-29T01:28:07Z</updated>
		
		<summary type="html">&lt;p&gt;Mdiop : /* Détail du travail de la quatrième séance */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation du sujet =&lt;br /&gt;
&lt;br /&gt;
==Contexte==&lt;br /&gt;
&lt;br /&gt;
Nous effectuons ce projet dans le cadre du module internet des objets (Internet of things). &lt;br /&gt;
&lt;br /&gt;
L'objectif de ce module est de créer l'objet connecté de notre choix.&lt;br /&gt;
&lt;br /&gt;
Nous avons donc choisi de créer un objet en rapport avec la sécurité routière: le système Safe&amp;amp;Drive.&lt;br /&gt;
&lt;br /&gt;
==Description du projet==&lt;br /&gt;
&lt;br /&gt;
Pour veiller au respect des distances de sécurité, le système S&amp;amp;D va tout d'abord évaluer la distance entre votre voiture et celle qui vous suit. &lt;br /&gt;
&lt;br /&gt;
Grâce au GPS intégré, la distance de sécurité à respecter sera calculée en fonction de votre vitesse de circulation.&lt;br /&gt;
&lt;br /&gt;
Si cette distance de sécurité n'est pas respectée, un message de mise en garde sera affiché sur votre pare-brise arrière à destination du conducteur qui vous suit de trop prêt.&lt;br /&gt;
&lt;br /&gt;
Bien évidemment, ce message ne sera envoyé qu'après confirmation de l'utilisateur depuis l'application mobile du système Safe&amp;amp;Drive.&lt;br /&gt;
&lt;br /&gt;
En mode marche arrière, le système devient une aide à la manœuvre avec une caméra de recul et un détecteur d'obstacle.&lt;br /&gt;
&lt;br /&gt;
=Réalisation=&lt;br /&gt;
&lt;br /&gt;
==Matériel utilisé==&lt;br /&gt;
&lt;br /&gt;
* Raspberry Pi&lt;br /&gt;
* Arduino Uno&lt;br /&gt;
* Arduino Mega2560&lt;br /&gt;
* SparkFun GPS Shield&lt;br /&gt;
* Adafruit 64x32 RGB LED Matrix - 5mm pitch&lt;br /&gt;
* Garmin LIDAR-Lite v3&lt;br /&gt;
&lt;br /&gt;
==Suivi de réalisation==&lt;br /&gt;
 {| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 1 (08/01/2018)&lt;br /&gt;
 | Choix de l'objet + Choix du matériel&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 2 (09/01/2018)&lt;br /&gt;
 | Circuit shield pour la matrice LED + Test Li-DAR Lite&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 3 (16/01/2018)&lt;br /&gt;
 | Circuit shield pour la matrice LED + Test du shield GPS&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 4 (17/01/2018)&lt;br /&gt;
 | Circuit shield pour la matrice LED + Test Shield GPS&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 5 (22/01/2018)&lt;br /&gt;
 | Soudage circuit shield pour la matrice LED + Test LED Matrix + RaspberryPI + Application mobile&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 6 (24/01/2018)&lt;br /&gt;
 | Finitions + Resolutions des problèmes + Préparation orale (+poster)&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la première séance==&lt;br /&gt;
&lt;br /&gt;
Pour choisir notre projet nous avons débuté en faisant un pseudo-brainstorming duquel est ressorti 4 projets.&lt;br /&gt;
&lt;br /&gt;
Nous donc dû réduire notre choix à un seul de ces quatre possibilités.&lt;br /&gt;
&lt;br /&gt;
Notre choix final s'est donc porté sur le système Safe&amp;amp;Drive.&lt;br /&gt;
&lt;br /&gt;
Après avoir affiné les divers fonctionnalités de notre projet, nous avons commencé à réunir le matériel dont nous aurions besoin.&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la deuxième séance==&lt;br /&gt;
&lt;br /&gt;
* Début de la création du shield de la matrice de LED qui viendra se positionner sur l’Arduino Mega2560.&lt;br /&gt;
&lt;br /&gt;
* Test du capteur optique LI-DAR Lite et codage du programme pour le calcul de distance.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 LIDARLite Arduino Library&lt;br /&gt;
  GetDistanceI2c&lt;br /&gt;
&lt;br /&gt;
  This example shows how to initialize, configure, and read distance from a&lt;br /&gt;
  LIDAR-Lite connected over the I2C interface.&lt;br /&gt;
&lt;br /&gt;
  Connections:&lt;br /&gt;
  LIDAR-Lite 5 Vdc (red) to Arduino 5v&lt;br /&gt;
  LIDAR-Lite I2C SCL (green) to Arduino SCL&lt;br /&gt;
  LIDAR-Lite I2C SDA (blue) to Arduino SDA&lt;br /&gt;
  LIDAR-Lite Ground (black) to Arduino GND&lt;br /&gt;
  &lt;br /&gt;
  (Capacitor recommended to mitigate inrush current when device is enabled)&lt;br /&gt;
  680uF capacitor (+) to Arduino 5v&lt;br /&gt;
  680uF capacitor (-) to Arduino GND&lt;br /&gt;
&lt;br /&gt;
  See the Operation Manual for wiring diagrams and more information:&lt;br /&gt;
  http://www.robotshop.com/media/files/pdf2/pli-06-instruction.pdf&lt;br /&gt;
&lt;br /&gt;
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;Wire.h&amp;gt;&lt;br /&gt;
#include &amp;lt;LIDARLite.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
LIDARLite myLidarLite;&lt;br /&gt;
int distance_reelle ;&lt;br /&gt;
&lt;br /&gt;
void setup()&lt;br /&gt;
{&lt;br /&gt;
  Serial.begin(9600); // Initialize serial connection to display distance readings&lt;br /&gt;
&lt;br /&gt;
  myLidarLite.begin(0, true); // Set configuration to default and I2C to 400 kHz&lt;br /&gt;
&lt;br /&gt;
  myLidarLite.configure(0); // Change this number to try out alternate configurations&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop()&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
  // Take a measurement with receiver bias correction and print to serial terminal&lt;br /&gt;
  distance_reelle = (myLidarLite.distance());&lt;br /&gt;
  if(distance_reelle &amp;lt; 1)&lt;br /&gt;
  {&lt;br /&gt;
	Serial.println('O');&lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
	Serial.println('N');&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la troisième séance==&lt;br /&gt;
&lt;br /&gt;
* Poursuite de la création du circuit (shield) pour la matrice LED. &lt;br /&gt;
Cela n'a pas été une tâche facile en raison de la répartition des différentes pâtes dont nous avions besoin et des liaisons à effectuer.&lt;br /&gt;
&lt;br /&gt;
* Test du GPS et codage du programme de calcul de vitesse.&lt;br /&gt;
Nous avons rencontré des problèmes avec le GPS, celui-ci ne renvoyait des message d'erreurs &amp;quot;NO GPS DETECTED&amp;quot; ou bien des données nulles du type &amp;quot;Date: 00/00/0000&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la quatrième séance==&lt;br /&gt;
&lt;br /&gt;
* Finition du circuit (shield) pour la matrice LED et envoi de la demande de fabrication&lt;br /&gt;
&lt;br /&gt;
Nous avons rencontré un problème avec le logiciel nous avons donc dû refaire entièrement le circuit, cela nous a pas mal retardé dans notre projet.&lt;br /&gt;
&lt;br /&gt;
''[INSERER IMAGES DU CIRCUIT (Différentes vues)]''&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Exemple.jpg]]&lt;br /&gt;
&lt;br /&gt;
* Test du GPS et résolution des problèmes.&lt;br /&gt;
Nous avons rencontré beaucoup de problèmes avec le GPS, celui-ci se connectait bien aux satellites mais ne nous renvoyais que des données nulles ou bien un message d'erreur.&lt;br /&gt;
&lt;br /&gt;
Il s'est en faite avéré que selon la position du GPD receiver sur le shield celui-ci affichait ou non les données. &lt;br /&gt;
&lt;br /&gt;
Le problème a donc été résolu.&lt;br /&gt;
&lt;br /&gt;
''[INSERER LE CODE GPS]''&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la cinquième séance==&lt;br /&gt;
* Soudage des barrettes et des ponts sur le circuit pour la Matrice LED (Shield)&lt;br /&gt;
''[INSERER IMAGE CIRCUIT]''&lt;br /&gt;
&lt;br /&gt;
* Test de la matrice LED et codage du programme pour l'affichage d'un message personnalisé coloré&lt;br /&gt;
Message choisi: Ne me collez pas au cul, PUTAIN!!&lt;br /&gt;
&lt;br /&gt;
''[INSERER LE CODE LED Matrix]''&lt;br /&gt;
&lt;br /&gt;
* Configuartion de la RPI&lt;br /&gt;
'''[PARTIE ARAME]'''&lt;br /&gt;
&lt;br /&gt;
''[INSERER CODE RPI]''&lt;br /&gt;
&lt;br /&gt;
* Codage de l'application Mobile &lt;br /&gt;
'''[PARTIE ARAME]'''&lt;br /&gt;
&lt;br /&gt;
''[INSERER CODE APPLI]''&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la sixième séance==&lt;br /&gt;
* Test du fonctionnement du système complet&lt;br /&gt;
Problèmes rencontrés:&lt;br /&gt;
&lt;br /&gt;
'''[Partie ARAME]'''&lt;br /&gt;
&lt;br /&gt;
''[INSERER Code final]''&lt;br /&gt;
&lt;br /&gt;
* Préparation de l'oral et finition du poster&lt;br /&gt;
&lt;br /&gt;
=Rendu=&lt;br /&gt;
&lt;br /&gt;
==Poster==&lt;br /&gt;
Version électronique du poster :&lt;br /&gt;
[[Fichier:2017_IOT_P5_poster.png|center|500px]]&lt;br /&gt;
&lt;br /&gt;
==Fichiers rendus==&lt;br /&gt;
&lt;br /&gt;
Notre application : [[Media:2017_IOT_P0_application.zip]]&lt;/div&gt;</summary>
		<author><name>Mdiop</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P5_IOT_2017&amp;diff=46970</id>
		<title>P5 IOT 2017</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P5_IOT_2017&amp;diff=46970"/>
				<updated>2018-01-29T01:22:34Z</updated>
		
		<summary type="html">&lt;p&gt;Mdiop : /* Détail du travail de la deuxième séance */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation du sujet =&lt;br /&gt;
&lt;br /&gt;
==Contexte==&lt;br /&gt;
&lt;br /&gt;
Nous effectuons ce projet dans le cadre du module internet des objets (Internet of things). &lt;br /&gt;
&lt;br /&gt;
L'objectif de ce module est de créer l'objet connecté de notre choix.&lt;br /&gt;
&lt;br /&gt;
Nous avons donc choisi de créer un objet en rapport avec la sécurité routière: le système Safe&amp;amp;Drive.&lt;br /&gt;
&lt;br /&gt;
==Description du projet==&lt;br /&gt;
&lt;br /&gt;
Pour veiller au respect des distances de sécurité, le système S&amp;amp;D va tout d'abord évaluer la distance entre votre voiture et celle qui vous suit. &lt;br /&gt;
&lt;br /&gt;
Grâce au GPS intégré, la distance de sécurité à respecter sera calculée en fonction de votre vitesse de circulation.&lt;br /&gt;
&lt;br /&gt;
Si cette distance de sécurité n'est pas respectée, un message de mise en garde sera affiché sur votre pare-brise arrière à destination du conducteur qui vous suit de trop prêt.&lt;br /&gt;
&lt;br /&gt;
Bien évidemment, ce message ne sera envoyé qu'après confirmation de l'utilisateur depuis l'application mobile du système Safe&amp;amp;Drive.&lt;br /&gt;
&lt;br /&gt;
En mode marche arrière, le système devient une aide à la manœuvre avec une caméra de recul et un détecteur d'obstacle.&lt;br /&gt;
&lt;br /&gt;
=Réalisation=&lt;br /&gt;
&lt;br /&gt;
==Matériel utilisé==&lt;br /&gt;
&lt;br /&gt;
* Raspberry Pi&lt;br /&gt;
* Arduino Uno&lt;br /&gt;
* Arduino Mega2560&lt;br /&gt;
* SparkFun GPS Shield&lt;br /&gt;
* Adafruit 64x32 RGB LED Matrix - 5mm pitch&lt;br /&gt;
* Garmin LIDAR-Lite v3&lt;br /&gt;
&lt;br /&gt;
==Suivi de réalisation==&lt;br /&gt;
 {| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 1 (08/01/2018)&lt;br /&gt;
 | Choix de l'objet + Choix du matériel&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 2 (09/01/2018)&lt;br /&gt;
 | Circuit shield pour la matrice LED + Test Li-DAR Lite&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 3 (16/01/2018)&lt;br /&gt;
 | Circuit shield pour la matrice LED + Test du shield GPS&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 4 (17/01/2018)&lt;br /&gt;
 | Circuit shield pour la matrice LED + Test Shield GPS&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 5 (22/01/2018)&lt;br /&gt;
 | Soudage circuit shield pour la matrice LED + Test LED Matrix + RaspberryPI + Application mobile&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 6 (24/01/2018)&lt;br /&gt;
 | Finitions + Resolutions des problèmes + Préparation orale (+poster)&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la première séance==&lt;br /&gt;
&lt;br /&gt;
Pour choisir notre projet nous avons débuté en faisant un pseudo-brainstorming duquel est ressorti 4 projets.&lt;br /&gt;
&lt;br /&gt;
Nous donc dû réduire notre choix à un seul de ces quatre possibilités.&lt;br /&gt;
&lt;br /&gt;
Notre choix final s'est donc porté sur le système Safe&amp;amp;Drive.&lt;br /&gt;
&lt;br /&gt;
Après avoir affiné les divers fonctionnalités de notre projet, nous avons commencé à réunir le matériel dont nous aurions besoin.&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la deuxième séance==&lt;br /&gt;
&lt;br /&gt;
* Début de la création du shield de la matrice de LED qui viendra se positionner sur l’Arduino Mega2560.&lt;br /&gt;
&lt;br /&gt;
* Test du capteur optique LI-DAR Lite et codage du programme pour le calcul de distance.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 LIDARLite Arduino Library&lt;br /&gt;
  GetDistanceI2c&lt;br /&gt;
&lt;br /&gt;
  This example shows how to initialize, configure, and read distance from a&lt;br /&gt;
  LIDAR-Lite connected over the I2C interface.&lt;br /&gt;
&lt;br /&gt;
  Connections:&lt;br /&gt;
  LIDAR-Lite 5 Vdc (red) to Arduino 5v&lt;br /&gt;
  LIDAR-Lite I2C SCL (green) to Arduino SCL&lt;br /&gt;
  LIDAR-Lite I2C SDA (blue) to Arduino SDA&lt;br /&gt;
  LIDAR-Lite Ground (black) to Arduino GND&lt;br /&gt;
  &lt;br /&gt;
  (Capacitor recommended to mitigate inrush current when device is enabled)&lt;br /&gt;
  680uF capacitor (+) to Arduino 5v&lt;br /&gt;
  680uF capacitor (-) to Arduino GND&lt;br /&gt;
&lt;br /&gt;
  See the Operation Manual for wiring diagrams and more information:&lt;br /&gt;
  http://www.robotshop.com/media/files/pdf2/pli-06-instruction.pdf&lt;br /&gt;
&lt;br /&gt;
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;Wire.h&amp;gt;&lt;br /&gt;
#include &amp;lt;LIDARLite.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
LIDARLite myLidarLite;&lt;br /&gt;
int distance_reelle ;&lt;br /&gt;
&lt;br /&gt;
void setup()&lt;br /&gt;
{&lt;br /&gt;
  Serial.begin(9600); // Initialize serial connection to display distance readings&lt;br /&gt;
&lt;br /&gt;
  myLidarLite.begin(0, true); // Set configuration to default and I2C to 400 kHz&lt;br /&gt;
&lt;br /&gt;
  myLidarLite.configure(0); // Change this number to try out alternate configurations&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop()&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
  // Take a measurement with receiver bias correction and print to serial terminal&lt;br /&gt;
  distance_reelle = (myLidarLite.distance());&lt;br /&gt;
  if(distance_reelle &amp;lt; 1)&lt;br /&gt;
  {&lt;br /&gt;
	Serial.println('O');&lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
	Serial.println('N');&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la troisième séance==&lt;br /&gt;
&lt;br /&gt;
* Poursuite de la création du circuit (shield) pour la matrice LED. &lt;br /&gt;
Cela n'a pas été une tâche facile en raison de la répartition des différentes pâtes dont nous avions besoin et des liaisons à effectuer.&lt;br /&gt;
&lt;br /&gt;
* Test du GPS et codage du programme de calcul de vitesse.&lt;br /&gt;
Nous avons rencontré des problèmes avec le GPS, celui-ci ne renvoyait des message d'erreurs &amp;quot;NO GPS DETECTED&amp;quot; ou bien des données nulles du type &amp;quot;Date: 00/00/0000&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la quatrième séance==&lt;br /&gt;
&lt;br /&gt;
* Finition du circuit (shield) pour la matrice LED et envoi de la demande de fabrication&lt;br /&gt;
&lt;br /&gt;
Nous avons rencontré un problème avec le logiciel nous avons donc dû refaire entièrement le circuit, cela nous a pas mal retardé dans notre projet.&lt;br /&gt;
&lt;br /&gt;
''[INSERER IMAGES DU CIRCUIT (Différentes vues)]''&lt;br /&gt;
&lt;br /&gt;
* Test du GPS et résolution des problèmes.&lt;br /&gt;
Nous avons rencontré beaucoup de problèmes avec le GPS, celui-ci se connectait bien aux satellites mais ne nous renvoyais que des données nulles ou bien un message d'erreur.&lt;br /&gt;
&lt;br /&gt;
Il s'est en faite avéré que selon la position du GPD receiver sur le shield celui-ci affichait ou non les données. &lt;br /&gt;
&lt;br /&gt;
Le problème a donc été résolu.&lt;br /&gt;
&lt;br /&gt;
''[INSERER LE CODE GPS]''&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la cinquième séance==&lt;br /&gt;
* Soudage des barrettes et des ponts sur le circuit pour la Matrice LED (Shield)&lt;br /&gt;
''[INSERER IMAGE CIRCUIT]''&lt;br /&gt;
&lt;br /&gt;
* Test de la matrice LED et codage du programme pour l'affichage d'un message personnalisé coloré&lt;br /&gt;
Message choisi: Ne me collez pas au cul, PUTAIN!!&lt;br /&gt;
&lt;br /&gt;
''[INSERER LE CODE LED Matrix]''&lt;br /&gt;
&lt;br /&gt;
* Configuartion de la RPI&lt;br /&gt;
'''[PARTIE ARAME]'''&lt;br /&gt;
&lt;br /&gt;
''[INSERER CODE RPI]''&lt;br /&gt;
&lt;br /&gt;
* Codage de l'application Mobile &lt;br /&gt;
'''[PARTIE ARAME]'''&lt;br /&gt;
&lt;br /&gt;
''[INSERER CODE APPLI]''&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la sixième séance==&lt;br /&gt;
* Test du fonctionnement du système complet&lt;br /&gt;
Problèmes rencontrés:&lt;br /&gt;
&lt;br /&gt;
'''[Partie ARAME]'''&lt;br /&gt;
&lt;br /&gt;
''[INSERER Code final]''&lt;br /&gt;
&lt;br /&gt;
* Préparation de l'oral et finition du poster&lt;br /&gt;
&lt;br /&gt;
=Rendu=&lt;br /&gt;
&lt;br /&gt;
==Poster==&lt;br /&gt;
Version électronique du poster :&lt;br /&gt;
[[Fichier:2017_IOT_P5_poster.png|center|500px]]&lt;br /&gt;
&lt;br /&gt;
==Fichiers rendus==&lt;br /&gt;
&lt;br /&gt;
Notre application : [[Media:2017_IOT_P0_application.zip]]&lt;/div&gt;</summary>
		<author><name>Mdiop</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P5_IOT_2017&amp;diff=46969</id>
		<title>P5 IOT 2017</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P5_IOT_2017&amp;diff=46969"/>
				<updated>2018-01-29T01:21:34Z</updated>
		
		<summary type="html">&lt;p&gt;Mdiop : /* Détail du travail de la deuxième séance */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation du sujet =&lt;br /&gt;
&lt;br /&gt;
==Contexte==&lt;br /&gt;
&lt;br /&gt;
Nous effectuons ce projet dans le cadre du module internet des objets (Internet of things). &lt;br /&gt;
&lt;br /&gt;
L'objectif de ce module est de créer l'objet connecté de notre choix.&lt;br /&gt;
&lt;br /&gt;
Nous avons donc choisi de créer un objet en rapport avec la sécurité routière: le système Safe&amp;amp;Drive.&lt;br /&gt;
&lt;br /&gt;
==Description du projet==&lt;br /&gt;
&lt;br /&gt;
Pour veiller au respect des distances de sécurité, le système S&amp;amp;D va tout d'abord évaluer la distance entre votre voiture et celle qui vous suit. &lt;br /&gt;
&lt;br /&gt;
Grâce au GPS intégré, la distance de sécurité à respecter sera calculée en fonction de votre vitesse de circulation.&lt;br /&gt;
&lt;br /&gt;
Si cette distance de sécurité n'est pas respectée, un message de mise en garde sera affiché sur votre pare-brise arrière à destination du conducteur qui vous suit de trop prêt.&lt;br /&gt;
&lt;br /&gt;
Bien évidemment, ce message ne sera envoyé qu'après confirmation de l'utilisateur depuis l'application mobile du système Safe&amp;amp;Drive.&lt;br /&gt;
&lt;br /&gt;
En mode marche arrière, le système devient une aide à la manœuvre avec une caméra de recul et un détecteur d'obstacle.&lt;br /&gt;
&lt;br /&gt;
=Réalisation=&lt;br /&gt;
&lt;br /&gt;
==Matériel utilisé==&lt;br /&gt;
&lt;br /&gt;
* Raspberry Pi&lt;br /&gt;
* Arduino Uno&lt;br /&gt;
* Arduino Mega2560&lt;br /&gt;
* SparkFun GPS Shield&lt;br /&gt;
* Adafruit 64x32 RGB LED Matrix - 5mm pitch&lt;br /&gt;
* Garmin LIDAR-Lite v3&lt;br /&gt;
&lt;br /&gt;
==Suivi de réalisation==&lt;br /&gt;
 {| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 1 (08/01/2018)&lt;br /&gt;
 | Choix de l'objet + Choix du matériel&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 2 (09/01/2018)&lt;br /&gt;
 | Circuit shield pour la matrice LED + Test Li-DAR Lite&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 3 (16/01/2018)&lt;br /&gt;
 | Circuit shield pour la matrice LED + Test du shield GPS&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 4 (17/01/2018)&lt;br /&gt;
 | Circuit shield pour la matrice LED + Test Shield GPS&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 5 (22/01/2018)&lt;br /&gt;
 | Soudage circuit shield pour la matrice LED + Test LED Matrix + RaspberryPI + Application mobile&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 6 (24/01/2018)&lt;br /&gt;
 | Finitions + Resolutions des problèmes + Préparation orale (+poster)&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la première séance==&lt;br /&gt;
&lt;br /&gt;
Pour choisir notre projet nous avons débuté en faisant un pseudo-brainstorming duquel est ressorti 4 projets.&lt;br /&gt;
&lt;br /&gt;
Nous donc dû réduire notre choix à un seul de ces quatre possibilités.&lt;br /&gt;
&lt;br /&gt;
Notre choix final s'est donc porté sur le système Safe&amp;amp;Drive.&lt;br /&gt;
&lt;br /&gt;
Après avoir affiné les divers fonctionnalités de notre projet, nous avons commencé à réunir le matériel dont nous aurions besoin.&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la deuxième séance==&lt;br /&gt;
&lt;br /&gt;
* Début de la création du shield de la matrice de LED qui viendra se positionner sur l’Arduino Mega2560.&lt;br /&gt;
&lt;br /&gt;
* Test du capteur optique LI-DAR Lite et codage du programme pour le calcul de distance.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 LIDARLite Arduino Library&lt;br /&gt;
  GetDistanceI2c&lt;br /&gt;
&lt;br /&gt;
  This example shows how to initialize, configure, and read distance from a&lt;br /&gt;
  LIDAR-Lite connected over the I2C interface.&lt;br /&gt;
&lt;br /&gt;
  Connections:&lt;br /&gt;
  LIDAR-Lite 5 Vdc (red) to Arduino 5v&lt;br /&gt;
  LIDAR-Lite I2C SCL (green) to Arduino SCL&lt;br /&gt;
  LIDAR-Lite I2C SDA (blue) to Arduino SDA&lt;br /&gt;
  LIDAR-Lite Ground (black) to Arduino GND&lt;br /&gt;
  &lt;br /&gt;
  (Capacitor recommended to mitigate inrush current when device is enabled)&lt;br /&gt;
  680uF capacitor (+) to Arduino 5v&lt;br /&gt;
  680uF capacitor (-) to Arduino GND&lt;br /&gt;
&lt;br /&gt;
  See the Operation Manual for wiring diagrams and more information:&lt;br /&gt;
  http://www.robotshop.com/media/files/pdf2/pli-06-instruction.pdf&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;Wire.h&amp;gt;&lt;br /&gt;
#include &amp;lt;LIDARLite.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
LIDARLite myLidarLite;&lt;br /&gt;
int distance_reelle ;&lt;br /&gt;
&lt;br /&gt;
void setup()&lt;br /&gt;
{&lt;br /&gt;
  Serial.begin(9600); // Initialize serial connection to display distance readings&lt;br /&gt;
&lt;br /&gt;
  myLidarLite.begin(0, true); // Set configuration to default and I2C to 400 kHz&lt;br /&gt;
&lt;br /&gt;
  myLidarLite.configure(0); // Change this number to try out alternate configurations&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop()&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
  // Take a measurement with receiver bias correction and print to serial terminal&lt;br /&gt;
  distance_reelle = (myLidarLite.distance());&lt;br /&gt;
  if(distance_reelle &amp;lt; 1)&lt;br /&gt;
  {&lt;br /&gt;
	Serial.println('O');&lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
	Serial.println('N');&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la troisième séance==&lt;br /&gt;
&lt;br /&gt;
* Poursuite de la création du circuit (shield) pour la matrice LED. &lt;br /&gt;
Cela n'a pas été une tâche facile en raison de la répartition des différentes pâtes dont nous avions besoin et des liaisons à effectuer.&lt;br /&gt;
&lt;br /&gt;
* Test du GPS et codage du programme de calcul de vitesse.&lt;br /&gt;
Nous avons rencontré des problèmes avec le GPS, celui-ci ne renvoyait des message d'erreurs &amp;quot;NO GPS DETECTED&amp;quot; ou bien des données nulles du type &amp;quot;Date: 00/00/0000&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la quatrième séance==&lt;br /&gt;
&lt;br /&gt;
* Finition du circuit (shield) pour la matrice LED et envoi de la demande de fabrication&lt;br /&gt;
&lt;br /&gt;
Nous avons rencontré un problème avec le logiciel nous avons donc dû refaire entièrement le circuit, cela nous a pas mal retardé dans notre projet.&lt;br /&gt;
&lt;br /&gt;
''[INSERER IMAGES DU CIRCUIT (Différentes vues)]''&lt;br /&gt;
&lt;br /&gt;
* Test du GPS et résolution des problèmes.&lt;br /&gt;
Nous avons rencontré beaucoup de problèmes avec le GPS, celui-ci se connectait bien aux satellites mais ne nous renvoyais que des données nulles ou bien un message d'erreur.&lt;br /&gt;
&lt;br /&gt;
Il s'est en faite avéré que selon la position du GPD receiver sur le shield celui-ci affichait ou non les données. &lt;br /&gt;
&lt;br /&gt;
Le problème a donc été résolu.&lt;br /&gt;
&lt;br /&gt;
''[INSERER LE CODE GPS]''&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la cinquième séance==&lt;br /&gt;
* Soudage des barrettes et des ponts sur le circuit pour la Matrice LED (Shield)&lt;br /&gt;
''[INSERER IMAGE CIRCUIT]''&lt;br /&gt;
&lt;br /&gt;
* Test de la matrice LED et codage du programme pour l'affichage d'un message personnalisé coloré&lt;br /&gt;
Message choisi: Ne me collez pas au cul, PUTAIN!!&lt;br /&gt;
&lt;br /&gt;
''[INSERER LE CODE LED Matrix]''&lt;br /&gt;
&lt;br /&gt;
* Configuartion de la RPI&lt;br /&gt;
'''[PARTIE ARAME]'''&lt;br /&gt;
&lt;br /&gt;
''[INSERER CODE RPI]''&lt;br /&gt;
&lt;br /&gt;
* Codage de l'application Mobile &lt;br /&gt;
'''[PARTIE ARAME]'''&lt;br /&gt;
&lt;br /&gt;
''[INSERER CODE APPLI]''&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la sixième séance==&lt;br /&gt;
* Test du fonctionnement du système complet&lt;br /&gt;
Problèmes rencontrés:&lt;br /&gt;
&lt;br /&gt;
'''[Partie ARAME]'''&lt;br /&gt;
&lt;br /&gt;
''[INSERER Code final]''&lt;br /&gt;
&lt;br /&gt;
* Préparation de l'oral et finition du poster&lt;br /&gt;
&lt;br /&gt;
=Rendu=&lt;br /&gt;
&lt;br /&gt;
==Poster==&lt;br /&gt;
Version électronique du poster :&lt;br /&gt;
[[Fichier:2017_IOT_P5_poster.png|center|500px]]&lt;br /&gt;
&lt;br /&gt;
==Fichiers rendus==&lt;br /&gt;
&lt;br /&gt;
Notre application : [[Media:2017_IOT_P0_application.zip]]&lt;/div&gt;</summary>
		<author><name>Mdiop</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P5_IOT_2017&amp;diff=46968</id>
		<title>P5 IOT 2017</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P5_IOT_2017&amp;diff=46968"/>
				<updated>2018-01-29T01:15:35Z</updated>
		
		<summary type="html">&lt;p&gt;Mdiop : /* Détail du travail de la deuxième séance */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation du sujet =&lt;br /&gt;
&lt;br /&gt;
==Contexte==&lt;br /&gt;
&lt;br /&gt;
Nous effectuons ce projet dans le cadre du module internet des objets (Internet of things). &lt;br /&gt;
&lt;br /&gt;
L'objectif de ce module est de créer l'objet connecté de notre choix.&lt;br /&gt;
&lt;br /&gt;
Nous avons donc choisi de créer un objet en rapport avec la sécurité routière: le système Safe&amp;amp;Drive.&lt;br /&gt;
&lt;br /&gt;
==Description du projet==&lt;br /&gt;
&lt;br /&gt;
Pour veiller au respect des distances de sécurité, le système S&amp;amp;D va tout d'abord évaluer la distance entre votre voiture et celle qui vous suit. &lt;br /&gt;
&lt;br /&gt;
Grâce au GPS intégré, la distance de sécurité à respecter sera calculée en fonction de votre vitesse de circulation.&lt;br /&gt;
&lt;br /&gt;
Si cette distance de sécurité n'est pas respectée, un message de mise en garde sera affiché sur votre pare-brise arrière à destination du conducteur qui vous suit de trop prêt.&lt;br /&gt;
&lt;br /&gt;
Bien évidemment, ce message ne sera envoyé qu'après confirmation de l'utilisateur depuis l'application mobile du système Safe&amp;amp;Drive.&lt;br /&gt;
&lt;br /&gt;
En mode marche arrière, le système devient une aide à la manœuvre avec une caméra de recul et un détecteur d'obstacle.&lt;br /&gt;
&lt;br /&gt;
=Réalisation=&lt;br /&gt;
&lt;br /&gt;
==Matériel utilisé==&lt;br /&gt;
&lt;br /&gt;
* Raspberry Pi&lt;br /&gt;
* Arduino Uno&lt;br /&gt;
* Arduino Mega2560&lt;br /&gt;
* SparkFun GPS Shield&lt;br /&gt;
* Adafruit 64x32 RGB LED Matrix - 5mm pitch&lt;br /&gt;
* Garmin LIDAR-Lite v3&lt;br /&gt;
&lt;br /&gt;
==Suivi de réalisation==&lt;br /&gt;
 {| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 1 (08/01/2018)&lt;br /&gt;
 | Choix de l'objet + Choix du matériel&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 2 (09/01/2018)&lt;br /&gt;
 | Circuit shield pour la matrice LED + Test Li-DAR Lite&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 3 (16/01/2018)&lt;br /&gt;
 | Circuit shield pour la matrice LED + Test du shield GPS&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 4 (17/01/2018)&lt;br /&gt;
 | Circuit shield pour la matrice LED + Test Shield GPS&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 5 (22/01/2018)&lt;br /&gt;
 | Soudage circuit shield pour la matrice LED + Test LED Matrix + RaspberryPI + Application mobile&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 6 (24/01/2018)&lt;br /&gt;
 | Finitions + Resolutions des problèmes + Préparation orale (+poster)&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la première séance==&lt;br /&gt;
&lt;br /&gt;
Pour choisir notre projet nous avons débuté en faisant un pseudo-brainstorming duquel est ressorti 4 projets.&lt;br /&gt;
&lt;br /&gt;
Nous donc dû réduire notre choix à un seul de ces quatre possibilités.&lt;br /&gt;
&lt;br /&gt;
Notre choix final s'est donc porté sur le système Safe&amp;amp;Drive.&lt;br /&gt;
&lt;br /&gt;
Après avoir affiné les divers fonctionnalités de notre projet, nous avons commencé à réunir le matériel dont nous aurions besoin.&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la deuxième séance==&lt;br /&gt;
&lt;br /&gt;
* Début de la création du shield de la matrice de LED qui viendra se positionner sur l’Arduino Mega2560.&lt;br /&gt;
&lt;br /&gt;
* Test du capteur optique LI-DAR Lite et codage du programme pour le calcul de distance.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:iotLidar.doc]]&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la troisième séance==&lt;br /&gt;
&lt;br /&gt;
* Poursuite de la création du circuit (shield) pour la matrice LED. &lt;br /&gt;
Cela n'a pas été une tâche facile en raison de la répartition des différentes pâtes dont nous avions besoin et des liaisons à effectuer.&lt;br /&gt;
&lt;br /&gt;
* Test du GPS et codage du programme de calcul de vitesse.&lt;br /&gt;
Nous avons rencontré des problèmes avec le GPS, celui-ci ne renvoyait des message d'erreurs &amp;quot;NO GPS DETECTED&amp;quot; ou bien des données nulles du type &amp;quot;Date: 00/00/0000&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la quatrième séance==&lt;br /&gt;
&lt;br /&gt;
* Finition du circuit (shield) pour la matrice LED et envoi de la demande de fabrication&lt;br /&gt;
&lt;br /&gt;
Nous avons rencontré un problème avec le logiciel nous avons donc dû refaire entièrement le circuit, cela nous a pas mal retardé dans notre projet.&lt;br /&gt;
&lt;br /&gt;
''[INSERER IMAGES DU CIRCUIT (Différentes vues)]''&lt;br /&gt;
&lt;br /&gt;
* Test du GPS et résolution des problèmes.&lt;br /&gt;
Nous avons rencontré beaucoup de problèmes avec le GPS, celui-ci se connectait bien aux satellites mais ne nous renvoyais que des données nulles ou bien un message d'erreur.&lt;br /&gt;
&lt;br /&gt;
Il s'est en faite avéré que selon la position du GPD receiver sur le shield celui-ci affichait ou non les données. &lt;br /&gt;
&lt;br /&gt;
Le problème a donc été résolu.&lt;br /&gt;
&lt;br /&gt;
''[INSERER LE CODE GPS]''&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la cinquième séance==&lt;br /&gt;
* Soudage des barrettes et des ponts sur le circuit pour la Matrice LED (Shield)&lt;br /&gt;
''[INSERER IMAGE CIRCUIT]''&lt;br /&gt;
&lt;br /&gt;
* Test de la matrice LED et codage du programme pour l'affichage d'un message personnalisé coloré&lt;br /&gt;
Message choisi: Ne me collez pas au cul, PUTAIN!!&lt;br /&gt;
&lt;br /&gt;
''[INSERER LE CODE LED Matrix]''&lt;br /&gt;
&lt;br /&gt;
* Configuartion de la RPI&lt;br /&gt;
'''[PARTIE ARAME]'''&lt;br /&gt;
&lt;br /&gt;
''[INSERER CODE RPI]''&lt;br /&gt;
&lt;br /&gt;
* Codage de l'application Mobile &lt;br /&gt;
'''[PARTIE ARAME]'''&lt;br /&gt;
&lt;br /&gt;
''[INSERER CODE APPLI]''&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la sixième séance==&lt;br /&gt;
* Test du fonctionnement du système complet&lt;br /&gt;
Problèmes rencontrés:&lt;br /&gt;
&lt;br /&gt;
'''[Partie ARAME]'''&lt;br /&gt;
&lt;br /&gt;
''[INSERER Code final]''&lt;br /&gt;
&lt;br /&gt;
* Préparation de l'oral et finition du poster&lt;br /&gt;
&lt;br /&gt;
=Rendu=&lt;br /&gt;
&lt;br /&gt;
==Poster==&lt;br /&gt;
Version électronique du poster :&lt;br /&gt;
[[Fichier:2017_IOT_P5_poster.png|center|500px]]&lt;br /&gt;
&lt;br /&gt;
==Fichiers rendus==&lt;br /&gt;
&lt;br /&gt;
Notre application : [[Media:2017_IOT_P0_application.zip]]&lt;/div&gt;</summary>
		<author><name>Mdiop</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:IotLidar.doc&amp;diff=46967</id>
		<title>Fichier:IotLidar.doc</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:IotLidar.doc&amp;diff=46967"/>
				<updated>2018-01-29T01:14:01Z</updated>
		
		<summary type="html">&lt;p&gt;Mdiop : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Mdiop</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P5_IOT_2017&amp;diff=46703</id>
		<title>P5 IOT 2017</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P5_IOT_2017&amp;diff=46703"/>
				<updated>2018-01-08T17:13:03Z</updated>
		
		<summary type="html">&lt;p&gt;Mdiop : /* Description du projet */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation du sujet =&lt;br /&gt;
&lt;br /&gt;
==Contexte==&lt;br /&gt;
Nous effectuons ce projet dans le cadre du module internet des objets (Internet of things). &lt;br /&gt;
L'objectif de ce module est de créer un objet connecté de notre choix.&lt;br /&gt;
&lt;br /&gt;
==Description du projet==&lt;br /&gt;
Combiné avec une application sur smartphone, le capteur de voiture connecté permettra d'effectuer les actions suivantes:&lt;br /&gt;
 Détecter la distance entre sa voiture et celle de derrière&lt;br /&gt;
 Si la distance de sécurité n'est pas respectée, affichage d'un message personnalisé (après confirmation par le conducteur)&lt;br /&gt;
 Calcul de la distance de sécurité que la voiture de derrière doit respecter en fonction de la vitesse du véhicule (Détection GPS)&lt;br /&gt;
 Aide à la manœuvre en marche-arrière (Détection d’obstacle)+ Signal sonore&lt;br /&gt;
&lt;br /&gt;
=Réalisation=&lt;br /&gt;
&lt;br /&gt;
==Matériel utilisé==&lt;br /&gt;
&lt;br /&gt;
* Matériel 1&lt;br /&gt;
* Matériel 2&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
==Suivi de réalisation==&lt;br /&gt;
 {| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 1 (08/01/2018)&lt;br /&gt;
 | activité ...&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 2 (09/01/2018)&lt;br /&gt;
 | activité ...&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 3 (16/01/2018)&lt;br /&gt;
 | activité ...&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 4 (17/01/2018)&lt;br /&gt;
 | activité ...&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 5 (22/01/2018)&lt;br /&gt;
 | activité ...&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 6 (24/01/2018)&lt;br /&gt;
 | activité ...&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la première séance==&lt;br /&gt;
Exemple d'inclusion d'image :&lt;br /&gt;
[[Fichier:2017_IOT_P0_circuit.png|center|400px|Un circuit]]&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la deuxième séance==&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la troisième séance==&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la quatrième séance==&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la cinquième séance==&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la sixième séance==&lt;br /&gt;
&lt;br /&gt;
=Rendu=&lt;br /&gt;
&lt;br /&gt;
==Poster==&lt;br /&gt;
Version électronique du poster :&lt;br /&gt;
[[Fichier:2017_IOT_P0_poster.png|center|500px|Notre poster]]&lt;br /&gt;
&lt;br /&gt;
==Fichiers rendus==&lt;br /&gt;
&lt;br /&gt;
Notre application : [[Media:2017_IOT_P0_application.zip]]&lt;/div&gt;</summary>
		<author><name>Mdiop</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P5_IOT_2017&amp;diff=46701</id>
		<title>P5 IOT 2017</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P5_IOT_2017&amp;diff=46701"/>
				<updated>2018-01-08T17:10:37Z</updated>
		
		<summary type="html">&lt;p&gt;Mdiop : /* Description du projet */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation du sujet =&lt;br /&gt;
&lt;br /&gt;
==Contexte==&lt;br /&gt;
Nous effectuons ce projet dans le cadre du module internet des objets (Internet of things). &lt;br /&gt;
L'objectif de ce module est de créer un objet connecté de notre choix.&lt;br /&gt;
&lt;br /&gt;
==Description du projet==&lt;br /&gt;
Combiné avec une application sur smartphone, le capteur de voiture connecté permettra d'effectuer les actions suivantes:&lt;br /&gt;
 Détecter la distance entre sa voiture et celle de derrière&lt;br /&gt;
 Si la distance de sécurité n'est pas respectée, affichage d'un message personnalisé&lt;br /&gt;
 Calcul de la distance de sécurité que la voiture de derrière doit respecter en fonction de la vitesse du véhicule (Détection GPS)&lt;br /&gt;
 Aide à la manœuvre en marche-arrière (Détection d’obstacle)&lt;br /&gt;
&lt;br /&gt;
=Réalisation=&lt;br /&gt;
&lt;br /&gt;
==Matériel utilisé==&lt;br /&gt;
&lt;br /&gt;
* Matériel 1&lt;br /&gt;
* Matériel 2&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
==Suivi de réalisation==&lt;br /&gt;
 {| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 1 (08/01/2018)&lt;br /&gt;
 | activité ...&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 2 (09/01/2018)&lt;br /&gt;
 | activité ...&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 3 (16/01/2018)&lt;br /&gt;
 | activité ...&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 4 (17/01/2018)&lt;br /&gt;
 | activité ...&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 5 (22/01/2018)&lt;br /&gt;
 | activité ...&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 6 (24/01/2018)&lt;br /&gt;
 | activité ...&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la première séance==&lt;br /&gt;
Exemple d'inclusion d'image :&lt;br /&gt;
[[Fichier:2017_IOT_P0_circuit.png|center|400px|Un circuit]]&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la deuxième séance==&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la troisième séance==&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la quatrième séance==&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la cinquième séance==&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la sixième séance==&lt;br /&gt;
&lt;br /&gt;
=Rendu=&lt;br /&gt;
&lt;br /&gt;
==Poster==&lt;br /&gt;
Version électronique du poster :&lt;br /&gt;
[[Fichier:2017_IOT_P0_poster.png|center|500px|Notre poster]]&lt;br /&gt;
&lt;br /&gt;
==Fichiers rendus==&lt;br /&gt;
&lt;br /&gt;
Notre application : [[Media:2017_IOT_P0_application.zip]]&lt;/div&gt;</summary>
		<author><name>Mdiop</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P5_IOT_2017&amp;diff=46699</id>
		<title>P5 IOT 2017</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P5_IOT_2017&amp;diff=46699"/>
				<updated>2018-01-08T17:09:56Z</updated>
		
		<summary type="html">&lt;p&gt;Mdiop : /* Description du projet */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation du sujet =&lt;br /&gt;
&lt;br /&gt;
==Contexte==&lt;br /&gt;
Nous effectuons ce projet dans le cadre du module internet des objets (Internet of things). &lt;br /&gt;
L'objectif de ce module est de créer un objet connecté de notre choix.&lt;br /&gt;
&lt;br /&gt;
==Description du projet==&lt;br /&gt;
Combiné avec une application sur smartphone, le capteur de voiture connecté permettra d'effectuer les actions suivantes:&lt;br /&gt;
-- Détecter la distance entre sa voiture et celle de derrière&lt;br /&gt;
- Si la distance de sécurité n'est pas respectée, affichage d'un message personnalisé&lt;br /&gt;
- Calcul de la distance de sécurité que la voiture de derrière doit respecter en fonction de la vitesse du véhicule (Détection GPS)&lt;br /&gt;
- Aide à la manœuvre en marche-arrière (Détection d’obstacle)&lt;br /&gt;
&lt;br /&gt;
=Réalisation=&lt;br /&gt;
&lt;br /&gt;
==Matériel utilisé==&lt;br /&gt;
&lt;br /&gt;
* Matériel 1&lt;br /&gt;
* Matériel 2&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
==Suivi de réalisation==&lt;br /&gt;
 {| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 1 (08/01/2018)&lt;br /&gt;
 | activité ...&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 2 (09/01/2018)&lt;br /&gt;
 | activité ...&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 3 (16/01/2018)&lt;br /&gt;
 | activité ...&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 4 (17/01/2018)&lt;br /&gt;
 | activité ...&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 5 (22/01/2018)&lt;br /&gt;
 | activité ...&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 6 (24/01/2018)&lt;br /&gt;
 | activité ...&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la première séance==&lt;br /&gt;
Exemple d'inclusion d'image :&lt;br /&gt;
[[Fichier:2017_IOT_P0_circuit.png|center|400px|Un circuit]]&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la deuxième séance==&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la troisième séance==&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la quatrième séance==&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la cinquième séance==&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la sixième séance==&lt;br /&gt;
&lt;br /&gt;
=Rendu=&lt;br /&gt;
&lt;br /&gt;
==Poster==&lt;br /&gt;
Version électronique du poster :&lt;br /&gt;
[[Fichier:2017_IOT_P0_poster.png|center|500px|Notre poster]]&lt;br /&gt;
&lt;br /&gt;
==Fichiers rendus==&lt;br /&gt;
&lt;br /&gt;
Notre application : [[Media:2017_IOT_P0_application.zip]]&lt;/div&gt;</summary>
		<author><name>Mdiop</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P5_IOT_2017&amp;diff=46697</id>
		<title>P5 IOT 2017</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P5_IOT_2017&amp;diff=46697"/>
				<updated>2018-01-08T17:08:27Z</updated>
		
		<summary type="html">&lt;p&gt;Mdiop : /* Description du projet */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation du sujet =&lt;br /&gt;
&lt;br /&gt;
==Contexte==&lt;br /&gt;
Nous effectuons ce projet dans le cadre du module internet des objets (Internet of things). &lt;br /&gt;
L'objectif de ce module est de créer un objet connecté de notre choix.&lt;br /&gt;
&lt;br /&gt;
==Description du projet==&lt;br /&gt;
Combiné avec une application sur smartphone, le capteur de voiture connecté permettra d'effectuer les actions suivantes:&lt;br /&gt;
- Détecter la distance entre sa voiture et celle de derrière&lt;br /&gt;
- Si la distance de sécurité n'est pas respectée, affichage d'un message personnalisé&lt;br /&gt;
- Calcul de la distance de sécurité que la voiture de derrière doit respecter en fonction de la vitesse du véhicule (Détection GPS)&lt;br /&gt;
- Aide à la manœuvre en marche-arrière (Détection d’obstacle)&lt;br /&gt;
&lt;br /&gt;
=Réalisation=&lt;br /&gt;
&lt;br /&gt;
==Matériel utilisé==&lt;br /&gt;
&lt;br /&gt;
* Matériel 1&lt;br /&gt;
* Matériel 2&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
==Suivi de réalisation==&lt;br /&gt;
 {| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 1 (08/01/2018)&lt;br /&gt;
 | activité ...&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 2 (09/01/2018)&lt;br /&gt;
 | activité ...&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 3 (16/01/2018)&lt;br /&gt;
 | activité ...&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 4 (17/01/2018)&lt;br /&gt;
 | activité ...&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 5 (22/01/2018)&lt;br /&gt;
 | activité ...&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 6 (24/01/2018)&lt;br /&gt;
 | activité ...&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la première séance==&lt;br /&gt;
Exemple d'inclusion d'image :&lt;br /&gt;
[[Fichier:2017_IOT_P0_circuit.png|center|400px|Un circuit]]&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la deuxième séance==&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la troisième séance==&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la quatrième séance==&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la cinquième séance==&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la sixième séance==&lt;br /&gt;
&lt;br /&gt;
=Rendu=&lt;br /&gt;
&lt;br /&gt;
==Poster==&lt;br /&gt;
Version électronique du poster :&lt;br /&gt;
[[Fichier:2017_IOT_P0_poster.png|center|500px|Notre poster]]&lt;br /&gt;
&lt;br /&gt;
==Fichiers rendus==&lt;br /&gt;
&lt;br /&gt;
Notre application : [[Media:2017_IOT_P0_application.zip]]&lt;/div&gt;</summary>
		<author><name>Mdiop</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P5_IOT_2017&amp;diff=46695</id>
		<title>P5 IOT 2017</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P5_IOT_2017&amp;diff=46695"/>
				<updated>2018-01-08T16:59:07Z</updated>
		
		<summary type="html">&lt;p&gt;Mdiop : /* Contexte */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation du sujet =&lt;br /&gt;
&lt;br /&gt;
==Contexte==&lt;br /&gt;
Nous effectuons ce projet dans le cadre du module internet des objets (Internet of things). &lt;br /&gt;
L'objectif de ce module est de créer un objet connecté de notre choix.&lt;br /&gt;
&lt;br /&gt;
==Description du projet==&lt;br /&gt;
&lt;br /&gt;
=Réalisation=&lt;br /&gt;
&lt;br /&gt;
==Matériel utilisé==&lt;br /&gt;
&lt;br /&gt;
* Matériel 1&lt;br /&gt;
* Matériel 2&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
==Suivi de réalisation==&lt;br /&gt;
 {| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 1 (08/01/2018)&lt;br /&gt;
 | activité ...&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 2 (09/01/2018)&lt;br /&gt;
 | activité ...&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 3 (16/01/2018)&lt;br /&gt;
 | activité ...&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 4 (17/01/2018)&lt;br /&gt;
 | activité ...&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 5 (22/01/2018)&lt;br /&gt;
 | activité ...&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 6 (24/01/2018)&lt;br /&gt;
 | activité ...&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la première séance==&lt;br /&gt;
Exemple d'inclusion d'image :&lt;br /&gt;
[[Fichier:2017_IOT_P0_circuit.png|center|400px|Un circuit]]&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la deuxième séance==&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la troisième séance==&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la quatrième séance==&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la cinquième séance==&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la sixième séance==&lt;br /&gt;
&lt;br /&gt;
=Rendu=&lt;br /&gt;
&lt;br /&gt;
==Poster==&lt;br /&gt;
Version électronique du poster :&lt;br /&gt;
[[Fichier:2017_IOT_P0_poster.png|center|500px|Notre poster]]&lt;br /&gt;
&lt;br /&gt;
==Fichiers rendus==&lt;br /&gt;
&lt;br /&gt;
Notre application : [[Media:2017_IOT_P0_application.zip]]&lt;/div&gt;</summary>
		<author><name>Mdiop</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Option_Internet_des_objets_2017/2018&amp;diff=46692</id>
		<title>Option Internet des objets 2017/2018</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Option_Internet_des_objets_2017/2018&amp;diff=46692"/>
				<updated>2018-01-08T16:55:47Z</updated>
		
		<summary type="html">&lt;p&gt;Mdiop : /* 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. Modifiez aussi l'intitulé de votre projet.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Projet !! Elèves&lt;br /&gt;
|-&lt;br /&gt;
| [[P1_IOT_2017|Plaisir connecté ]] || Benoît Verhaeghe, Simon Fourquez&lt;br /&gt;
|-&lt;br /&gt;
| [[P2_IOT_2017|Lunettes bien-être]] || Nastassia Kaugarenia, Romain Houppeaux, Edmur Lopes&lt;br /&gt;
|-&lt;br /&gt;
| [[P3_IOT_2017|Patch connecté pour matériel sportif]] || Maerten Clément, Bouissou Cyprien&lt;br /&gt;
|-&lt;br /&gt;
| [[P4_IOT_2017|Veilleuse mobile]] || Maher Bencherif, Bacem Hagui&lt;br /&gt;
|-&lt;br /&gt;
| [[P5_IOT_2017|Capteur voiture connecté]] || Laurène GUILLONNET, Mame Arame DIOP&lt;br /&gt;
|-&lt;br /&gt;
| [[P6_IOT_2017|Intitulé du projet 6]] || Prénom Nom, Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Mdiop</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P18&amp;diff=43069</id>
		<title>IMA4 2016/2017 P18</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P18&amp;diff=43069"/>
				<updated>2017-05-20T21:10:36Z</updated>
		
		<summary type="html">&lt;p&gt;Mdiop : /* Fichiers rendus */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===Présentation générale du projet=== &lt;br /&gt;
&lt;br /&gt;
===Objectif du projet===&lt;br /&gt;
Rééducation de la position de la tête.&lt;br /&gt;
&lt;br /&gt;
===Contexte===&lt;br /&gt;
L’évolution de l'informatique a engendré une modification de la place du salarié dans l'entreprise. Ainsi, nombreux sont ceux qui travaillent dans un bureau face à un ordinateur. De ce fait, il a été remarqué par une association de la santé que les maux de dos sont en majorité dus à une mauvaise hygiène de vie notamment liée à une mauvaise posture au travail.&lt;br /&gt;
 &lt;br /&gt;
C'est après différentes études, notamment un bilan postural montrant où se situe la tête par rapport à une position idéale que l'on a remarqué que ces dernières années, 50% des personnes ayant des maux de dos sont en réalité dûs aux cervicales contre 20 % seulement il y a une dizaine d’années.&lt;br /&gt;
 &lt;br /&gt;
Du constat précédent découle ce projet ayant pour but de faciliter aux kinésithérapeutes la rééducation de la position de la tête des patients se plaignants de leur dos.&lt;br /&gt;
&lt;br /&gt;
=== Description du projet ===&lt;br /&gt;
 &lt;br /&gt;
La rééducation de la posture de la tête chez un kinésithérapeute pourrait être améliorée si le travail pouvait se faire en autonomie.&lt;br /&gt;
 &lt;br /&gt;
Ce projet propose de réaliser un système de suivi de la position de la tête d'un patient en rééducation grâce à un monitoring continu de la position de la tête, ainsi qu'un mécanisme pour aider le patient à reprendre une position correcte. En effet on lancera le système pendant environ 30 min durant lesquelles nous détecterons les variations de position et indiquerons au patient le moment ou sa position n’est plus bonne.&lt;br /&gt;
 &lt;br /&gt;
Ce projet devra ainsi comparer la position actuelle de la tête du patient à une position idéale (celle de la verticale) et lui signaler s’il doit ou non ajuster sa position.&lt;br /&gt;
&lt;br /&gt;
=== Choix techniques : matériel et logiciels ===&lt;br /&gt;
 &lt;br /&gt;
Nous avons choisi d’utiliser des accéléromètres afin de pouvoir récupérer des données décrivant la position de la tête. Les accéléromètres nous permettent de calculer l'angle d'inclinaison à partir de la force gravitationnelle qu'ils peuvent mesurer selon les trois axes. Lorsque la position idéale du patient sera choisie par le médecin, nous pourrons enregistrer cette position en mémorisant l'inclinaison de chaque accéléromètre pour cette position. Ainsi un changement de position sera identifié par une variation des angles d'inclinaison précédemment pris. Nous allons utilisé les accéléromètres analogiques de type adxl335. Une fois que nous aurons à disposition les valeurs de l'accéléromètre et, par conséquent les angles d'inclinaison, nous aurons besoin d'un moyen d'affichage des ces données. Pour ce faire, nous avons opté dans un premier temps pour une affichage sur smartphone. Les données vont être envoyées au smartphone à travers un module WIFI connectés au même réseau que le smartphone.  En récapitulant, nous aurons finalement besoin de:&lt;br /&gt;
* 5 accéléromètres adxl335.&lt;br /&gt;
* un arduino Mega&lt;br /&gt;
* un module WIFI &lt;br /&gt;
* des fils pour la liaison.&lt;br /&gt;
&lt;br /&gt;
===Calendrier prévisionnel===&lt;br /&gt;
&lt;br /&gt;
====Liste des tâches à effectuer====&lt;br /&gt;
Etude et choix des accéléromètres&lt;br /&gt;
*fonctionnement : accéléromètres à sortie analogique. Nous aurons donc besoin de 3 sorties analogiques par capteur (donc 3*5 sorties analogiques)&lt;br /&gt;
&lt;br /&gt;
*type de données collectées: force gravitationnelle selon les trois axes qu'il faudra transformer de telle sorte à avoir l'inclinaison de l'accéléromètre par rapport à l'axe x, y et z&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*mise en œuvre du programme d'acquisition.&lt;br /&gt;
&lt;br /&gt;
Moyen d'affichage des résultats &lt;br /&gt;
&lt;br /&gt;
*si position correcte par rapport à celle idéale ;&lt;br /&gt;
*envoi des résultats sur un smartphone.&lt;br /&gt;
&lt;br /&gt;
Réalisation d'un prototype &lt;br /&gt;
 &lt;br /&gt;
*identification et acquisition de la position idéale à l'aide des accéléromètres placées le long de la colonne vertébrale;&lt;br /&gt;
*notification au patient (à travers le smartphone) lorsqu'une position différente de celle idéale a été détectée.&lt;br /&gt;
&lt;br /&gt;
====Calendrier====&lt;br /&gt;
==tâches à réaliser==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! Avancement !! Commentaires&lt;br /&gt;
|-&lt;br /&gt;
| acquisition des données 10DOF&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| connexion au WIFI (esp9266)&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| connexion à un wifi standard prédéfinit lors de la programmation&lt;br /&gt;
|-&lt;br /&gt;
| pages application smartphone&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
|  &lt;br /&gt;
|-&lt;br /&gt;
| envois et réception de données sur smartphone&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| terminé et testé &lt;br /&gt;
|-&lt;br /&gt;
| acquisition des données de l'accéléromètre avec l'arduino mini&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| donnée récupérer à partir de 2 accéléromètre mais on peut en ajouter plus&lt;br /&gt;
|-&lt;br /&gt;
| liaison série arduino mini et esp8266&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;testé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Communication réalisé mais quelque amélioration à faire, il faut optimiser le code&lt;br /&gt;
|-&lt;br /&gt;
| mise en commun de la partie wifi et acquisition de données&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Inachevé&amp;lt;/font&amp;gt;&lt;br /&gt;
| la mise en commun pose quelque problème notamment la réception de donnée non cohérente par le smartphone&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! Prélude !! Heures S1 !! Heures S2 !! Heures S3 !! Heures S4 !! Heures S5 !! Heures S6 !! Heures S7 !! Heures S8 !! Heures S9 !! Heures S10 + Heures supplémentairements !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Définition cahier des charges &lt;br /&gt;
| 2H&lt;br /&gt;
| &lt;br /&gt;
| 8H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| documentation&lt;br /&gt;
| 2h&lt;br /&gt;
| 4h&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 4h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| liste du matériel &lt;br /&gt;
| &lt;br /&gt;
| 2h&lt;br /&gt;
| 6h&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| étude du module Wi-fi&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 8H&lt;br /&gt;
| 2H&lt;br /&gt;
| 4H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 12h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| étude, programmation, câblage du 10 DOF &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 4H&lt;br /&gt;
| 8H&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Accéléromètre &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| 2H&lt;br /&gt;
| étude 3H &lt;br /&gt;
| &lt;br /&gt;
| schématique 2H &lt;br /&gt;
| 12h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| liaison arduino esp&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 16H&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| étude et programmation arduino mini&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 16H&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| application mobile&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|2H&lt;br /&gt;
|4H&lt;br /&gt;
|4H&lt;br /&gt;
|&lt;br /&gt;
|10h&lt;br /&gt;
|10H&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avancement du Projet==&lt;br /&gt;
&lt;br /&gt;
===Semaine 1===&lt;br /&gt;
&lt;br /&gt;
Nous avons été confronté à différents choix matériel notamment dans la référence des accéléromètres ou encore le moyen de transmission des données. &lt;br /&gt;
&lt;br /&gt;
L'accéléromètre doit être assez précis pour des petites variations de position. Après avoir parcouru les catalogues de fournisseurs nous avons trouvé le ADXL335. &lt;br /&gt;
&lt;br /&gt;
De plus, nous devions choisir le mode de transmission des données vers un smartphone. Nous avions le choix entre un module Bluetooth et un module wifi. Le module Bluetooth est plus rapide que le module bluetooth. Cependant, ce dernier ne consomme pas beaucoup de charge de la batterie du smartphone mais il fonctionne  essentiellement sur de petites distances et avec des données de petite taille. En revanche le module WIFI lui consomme beaucoup plus de batterie mais couvre des distances beaucoup plus grandes ainsi que des tailles de données beaucoup plus importantes.&lt;br /&gt;
&lt;br /&gt;
Finalement, nous avons opté pour le module WIFI pour limiter le moins possible l'utilisateur en ce qui concerne la distance entre les appareils et le volume de données transmis.&lt;br /&gt;
&lt;br /&gt;
*Confirmation de la liste de matériel: &lt;br /&gt;
  *accéléromètre ADXL335&lt;br /&gt;
  *Smartphone sous Android&lt;br /&gt;
  *15 longs fils mâle-femelle, mâle-mâle&lt;br /&gt;
  *Arduino pro -mini&lt;br /&gt;
  *Module WIFI&lt;br /&gt;
&lt;br /&gt;
===Semaine 2===&lt;br /&gt;
&lt;br /&gt;
Réalisation d'un cahier des charges fonctionnelles avec les outils de gestions de projet telle que le FAST, la bete à corne, SADT.&lt;br /&gt;
[https://docs.google.com/document/d/1e6291kst6O6Ic0IWnadg5l10HiiZeqsw72GxfXC7O7U/edit cahier des charges fonctionnels]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:cad1_1.PNG| 900px ]]&lt;br /&gt;
[[Fichier:cad1.PNG| 900px ]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
&lt;br /&gt;
En début de semaine, nous avons reçus un premier capteur, l’accéléromètre 10 DOF, ainsi que l'arduino MEGA qui sera utilisé pour l’acquisition des données. L'accéléromètre 10DOF incorpore un gyroscope et un magnétomètre. Ceux-ci nous permettront d'avoir une meilleure précision des mesures notamment avec la mesure des orientations (vitesses angulaires).&lt;br /&gt;
&lt;br /&gt;
Nous avons ensuite étudié le capteur et réalisé le premier montage en connectant ce capteur de manière à pouvoir lire les données récupérées en direct sur l'ordinateur.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:10dof.PNG| 400px ]]&lt;br /&gt;
&lt;br /&gt;
Nous nous sommes également intéressé au calcule de l'angle à partir de l’accélération. &lt;br /&gt;
Prenons l'exemple de l’accéléromètre penché de la manière suivante.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:exemple5.PNG| 400px ]]&lt;br /&gt;
&lt;br /&gt;
Le triangle G,Gx Gz forme un triangle rectangle, dans notre cas nous avons Gx,Gy et Gz qui sont les valeurs du vecteur gravitationnel G sur les trois axes et nous devons déduire 𝝰 (l’angle que fait Gx avec l’axe x), 𝝋 (l’angle que fait Gy avec l’axe y) et ᴪ (l’angle que fait Gz avec l’axe z). La norme de G est&lt;br /&gt;
[[Fichier:Norme2.PNG| 200px ]]&lt;br /&gt;
On récupére ensuite chaque angle de la manière suivante: &lt;br /&gt;
[[Fichier:Calcule_angle.PNG| 200px ]]&lt;br /&gt;
&lt;br /&gt;
Nous avons ensuite réalisé un premier programme afin de lire les données du 10DOF que nous testerons la semaine suivante.&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
&lt;br /&gt;
Nous avons débuté le traitement des données directement sur le MEGA en réalisant de code de récupération de l'angle réalisé par l'accéléromètre.( Dans le code suivant nous avons uniquement l'acquisition des données)&lt;br /&gt;
&lt;br /&gt;
[[Fichier:10dof_code.PNG| 200px ]]&lt;br /&gt;
&lt;br /&gt;
Nous nous sommes rendus compte que les calculs ne sont pas réalisés correctement par le MEGA. En effet la mesure de l'angle n'était pas précis car le MEGA n'a pas assez de puissance de calcul pour faire les différentes divisions.  &lt;br /&gt;
&lt;br /&gt;
[[Fichier:Exempleaccelero.PNG| 100px ]]&lt;br /&gt;
&lt;br /&gt;
Nous avons donc décidé que le MEGA servira uniquement à récupérer les données et à les envoyer via module WIFI. Ce sera donc à l'application Android d'effectuer le traitement des données.&lt;br /&gt;
&lt;br /&gt;
Nous avons ensuite étudié le module WIFI ESP8266 que nous utiliserons, afin de nous faire une idée de son utilisation.&lt;br /&gt;
&lt;br /&gt;
Nous avons également installé les logiciels nécessaires ( Android studio,... )&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
&lt;br /&gt;
Nous nous sommes intéressées  au module wifi, en commençant par lire la fiche technique de l'esp 8266, nous avons également cherché les différents types d'exemples . &lt;br /&gt;
&lt;br /&gt;
Des recherches sur le mode de connexion entre le smartphone et le Mega à travers le module WIFI ont également été effectuer dans le but de se faire une idée, nous hésitons sur l'utilisation de Sockets UDP , ou de réaliser une transmission en TCP .&lt;br /&gt;
&lt;br /&gt;
Le programme réalisée lors de la séance précédente a été testé, notamment les tests de récupération des données de l'accéléromètre 10-DOF sur le Mega.&lt;br /&gt;
&lt;br /&gt;
Le code pour les autres accéléromètres en attendant la livraison de l'ADXL335 a également été entamé.&lt;br /&gt;
&lt;br /&gt;
Nous avons également rencontré un certain nombre de problème :&lt;br /&gt;
&lt;br /&gt;
Afin se connecter en WIFI à partir de n’importe où, nous avons décidé de se connecter premièrement à un réseau standard (point d'accès fourni par le smartphone dans un premier temps) puis de modifier le réseau sur lequel nous sommes connecté à partir du smartphone. Ce dernier enverra le SSID et le mot de passe du nouveau réseau souhaité au module et on  modifiera le paramètre de  cette manière.&lt;br /&gt;
[[Fichier:connection.PNG| 500px ]]&lt;br /&gt;
&lt;br /&gt;
La possibilité et l'utilité de l'ajout de l'acquisition des données du gyroscope pour avoir plus de précision sur l'accéléromètre 10-DOF qui sera sur la tête ( gérer les rotations).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
En parallèle, nous avons également avancé avec la création d'une application android pour la réception et l'affichage de données.&lt;br /&gt;
Nous avons décidé de:&lt;br /&gt;
* faire une page d'accueil dans laquelle le kinésithérapeute devra appuyer sur un bouton lorsqu'il aura bien positionné le patient pour enregistrer la bonne position.&lt;br /&gt;
* à l'appui du bouton, le smartphone va contacter le module WIFI à travers un message broadcast (en utilisant une communication UDP) dans le réseau. &lt;br /&gt;
* Le MODULE WIFI, qui est déjà en attente d'une trame venant du smartphone, reçoit le message broadcast, extrait l'adresse IP du smartphone, puis, lui envoie des données du capteur.&lt;br /&gt;
* le smartphone, à son tour va utiliser ces données pour calculer les angles d'inclinaison sur les différents axes et les afficher. Notons que les premiers angles calculés sont ceux correspondant à la bonne position. &lt;br /&gt;
* A intervalle régulier, le module ESP va envoyer de nouvelles données que le smartphone va traiter et comparer avec les angles de la bonne position et prévenir le patient si la position a changer.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:transmition.PNG| 600px ]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
* Réception du matériel&lt;br /&gt;
&lt;br /&gt;
[[Fichier:ADXL345.PNG| 100px ]]&lt;br /&gt;
&lt;br /&gt;
Nous avons commencé par étudier l'accéléromètre reçu, en effet la référence de ce dernier est ADXL345 et est digital à l’inverse de celui choisi qui était analogique. De ce fait, nous avons modifié une partie du cahier des charges.&lt;br /&gt;
&lt;br /&gt;
Les accéléromètres adxl345 sont alimentés en 3.3V et sont digitaux. Par conséquent, nous n'aurons plus besoin de sortie analogique.  &lt;br /&gt;
&lt;br /&gt;
*fonctionnement : accéléromètres digitaux pouvant fonctionner en SPI comme en I2C et supportant 3.3V. Résolution: 10 bits, régler en mode +/-2g. Donc les valeurs de notre registre de données seront dans la plage [-512 ,512]. Mais puisque nous ne mesurons que la force gravitationnelle, nous aurons des valeurs comprises entre [-256,256] qui est la plage correspondant à -/1g. 1g correspond à la valeur de 9.80m/s2.&lt;br /&gt;
&lt;br /&gt;
*type de données collectées: des entiers de -512 à 512 qu'il faudra transformer de telle sorte à avoir l'inclinaison de l'accéléromètre selon l'axe x, y et z&lt;br /&gt;
&lt;br /&gt;
L'établissement des activités nécessairement et documentation sur le choix des sockets à utiliser pour l'envoi des données a également été entamé.&lt;br /&gt;
&lt;br /&gt;
Coté Smartphone: &lt;br /&gt;
&lt;br /&gt;
*Créations de la page d'accueil et de la page de visualisation des angles d'inclinaisons&lt;br /&gt;
&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
&lt;br /&gt;
Nous avons réalisé l'étude de l'accéléromètre digital, nous avons choisis de travailler avec le mode SPI qui consiste à donner la parole à chaque accéléromètre l'un après l'autre en alimentant chaque pin CS l'un après l'autre. ( Le mode SPI utilise les ports digitaux )&lt;br /&gt;
&lt;br /&gt;
Seulement les pins de l’accéléromètre n'acceptent que des tensions de 3.3V alors que ceux du Mega fournissent des tensions de 5v. Nous aurons donc besoin d'un mécanisme de régulation des tensions en sortie de Mega.&lt;br /&gt;
&lt;br /&gt;
Nous nous sommes alors documenté sur les circuits de régulations et conversions de tension. Nous devons réaliser un dispositif de préférence réversible qui fourni une tension de 3.3v en sortie lorsqu'on lui injecte une tension de 5v en entré.&lt;br /&gt;
&lt;br /&gt;
Les premières connections à partir se l'esp8266. Nous nous sommes donc connecté à notre téléphone utilisé comme point d’accès.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:espconnect.PNG| 300px ]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 8===&lt;br /&gt;
Nous avons réalisé une carte électronique grâce au logiciel fritzing pour réaliser l’adaptation de tensions entre l’accéléromètre adxl345 et la carte MEGA. En effet l'accéléromètre supporte des tensions maximales de 3.3V alors que le MEGA donne en sortie 5V.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:carte_elec1.PNG| 400px ]]&lt;br /&gt;
&lt;br /&gt;
Coté Smartphone:&lt;br /&gt;
&lt;br /&gt;
* création de la page d'accueil avec implémentation du code pour la communication UDP entre le smartphone et l'ESP8266.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:page_daccueil.jpg | 200px]]&lt;br /&gt;
&lt;br /&gt;
Nous avons également commencé la transmission de donnée avec le smartphone en fixant des valeur à envoyer.&lt;br /&gt;
Dans la photo suivante, on peut voir l'esp connecté et attendant le message venant du smartphone.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:wifi_conect.png | 300px]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 9===&lt;br /&gt;
&lt;br /&gt;
Nous avons testé la carte électronique faite la semaine précédente. &lt;br /&gt;
&lt;br /&gt;
[[Fichier:carte_elec2.PNG| 200px ]]&lt;br /&gt;
&lt;br /&gt;
Afin de tester la carte, nous avons alimenter les pins d’entrée par des 5v et avons observé la sortie du circuit. Malheureusement, seulement un pin en sortie &lt;br /&gt;
fournissait une tension de 3.3V.&lt;br /&gt;
Elle ne fonctionne pas et nous n'avons pas pu comprendre pourquoi. &lt;br /&gt;
&lt;br /&gt;
Par conséquent, nous avons changé de microcontrôleur. Nous avons reçu un arduino pro mini 3.3V compatible avec nos capteurs ( mais qui ne l'est pas avec le 10DOF ). &lt;br /&gt;
Nous commençons par conséquent à recueillir les données du capteurs. Pour cela, nous avons utilisé une librairie pour les ADXL345.&lt;br /&gt;
La première étape est de sélectionner le chip Select en définissant un ADXL grâce à la fonction suivante:&lt;br /&gt;
[[Fichier:def_adxl.PNG| 200px ]]&lt;br /&gt;
Cette fonction prend en paramètre le pin lié au chip Select de accéléromètre.&lt;br /&gt;
&lt;br /&gt;
Ensuite on récupère les données grâce à la fonction readaccel comme suit:&lt;br /&gt;
[[Fichier:readaccel.PNG| 200px ]]&lt;br /&gt;
La fonction stocke alors les valeurs lues par l'accéléromètre dans x,y et z.&lt;br /&gt;
&lt;br /&gt;
 code :&lt;br /&gt;
 [[Fichier:codemini1.PNG| 400px ]]&lt;br /&gt;
 &lt;br /&gt;
 [[Fichier:codemini2.PNG| 600px ]]&lt;br /&gt;
&lt;br /&gt;
Nous réalisons ensuite le montage suivant de manière à pouvoir lire sur le port série les valeurs .&lt;br /&gt;
&lt;br /&gt;
[[Fichier:montageaccel.PNG| 600px ]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Partie smartphone:&lt;br /&gt;
succès de la connexion au wi-fi partagé d'un smartphone. Coté ESP comme coté smartphone.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:affichage_valeur.jpg | 200px]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 10===&lt;br /&gt;
&lt;br /&gt;
'''Etude de la partie communication entre l'arduino pro mini et l'ESP8266 pour l'envoie des données du capteur'''&lt;br /&gt;
&lt;br /&gt;
Nous avons implémenté le module Wifi de manière à ce que l’on puisse recevoir les données des accélérations reçus par l’arduino mini.7&lt;br /&gt;
&lt;br /&gt;
Pour cela, nous avons utilisée la bibliothèque SoftwareSerial d’arduino et avons défini deux liaisons série (l'une du côté du mini et l’autre du coté esp).Le mini envois un “a” indiquant à l'esp qu'il commence à envoyer une série de données.Ensuite on ramène les valeurs de l'accéléromètre sur l'échelle de g (gravitation terrestre ) grâce à un produit en croix . Pour finir, nous envoyons les données grâce à un serial write qui écrit sur les pins de l’esp ( pin 14 RX et 12 TX).&lt;br /&gt;
&lt;br /&gt;
Du côté de l’esp, on définit une liaison du nom de swSer au même baudrate que la précédente (9600). On attend la réception de 72 ( l'équivalent de ‘a’ en integer) indiquant que l’on commence à transmettre des données de l'accéléromètre. Une fois ce nombre reçu on incrémente un compteur à chaque réception d’un chiffre et à partir de la valeur de ce compteur nous plaçons la donnée dans la variable qui la définit ( la première donnée est celle de x1 donc si compteur est à 1 on place la valeur lue par swSer.read dans la variable x1 )&lt;br /&gt;
&lt;br /&gt;
'''Mise en commun de la partie Wifi et arduino mini'''&lt;br /&gt;
&lt;br /&gt;
L’union de ces deux partie n'est pas un succès dans le sens ou bien que la connexion aboutit, les donnée qui sont envoyé au smartphone ne sont pas celle envoyé par le mini. Il se pourrait qu'il y ai un problème dans le software serial mis en place entre les deux éléments. Pour résoudre ce problème il faudrait optimiser le code au maximum en enlevant tous ce qui pourrait paraître excédent.&lt;br /&gt;
&lt;br /&gt;
===Fichiers rendus===&lt;br /&gt;
&lt;br /&gt;
Rapport de projet : [[Fichier:Rapport_Fahem_Diop.pdf]]&lt;br /&gt;
&lt;br /&gt;
Code de la partie smartphone: [https://archives.plil.fr/mdiop/ima4_position_de_la_tete/tree/master/clientServerEspApp]&lt;br /&gt;
&lt;br /&gt;
Code de la partie arduino : [https://archives.plil.fr/mdiop/ima4_position_de_la_tete/blob/master/minipro.ino]&lt;br /&gt;
&lt;br /&gt;
Code de la partie esp: [https://archives.plil.fr/mdiop/ima4_position_de_la_tete/blob/master/espfinal21.ino]&lt;/div&gt;</summary>
		<author><name>Mdiop</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P18&amp;diff=43068</id>
		<title>IMA4 2016/2017 P18</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P18&amp;diff=43068"/>
				<updated>2017-05-20T21:10:15Z</updated>
		
		<summary type="html">&lt;p&gt;Mdiop : /* Fichiers rendus */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===Présentation générale du projet=== &lt;br /&gt;
&lt;br /&gt;
===Objectif du projet===&lt;br /&gt;
Rééducation de la position de la tête.&lt;br /&gt;
&lt;br /&gt;
===Contexte===&lt;br /&gt;
L’évolution de l'informatique a engendré une modification de la place du salarié dans l'entreprise. Ainsi, nombreux sont ceux qui travaillent dans un bureau face à un ordinateur. De ce fait, il a été remarqué par une association de la santé que les maux de dos sont en majorité dus à une mauvaise hygiène de vie notamment liée à une mauvaise posture au travail.&lt;br /&gt;
 &lt;br /&gt;
C'est après différentes études, notamment un bilan postural montrant où se situe la tête par rapport à une position idéale que l'on a remarqué que ces dernières années, 50% des personnes ayant des maux de dos sont en réalité dûs aux cervicales contre 20 % seulement il y a une dizaine d’années.&lt;br /&gt;
 &lt;br /&gt;
Du constat précédent découle ce projet ayant pour but de faciliter aux kinésithérapeutes la rééducation de la position de la tête des patients se plaignants de leur dos.&lt;br /&gt;
&lt;br /&gt;
=== Description du projet ===&lt;br /&gt;
 &lt;br /&gt;
La rééducation de la posture de la tête chez un kinésithérapeute pourrait être améliorée si le travail pouvait se faire en autonomie.&lt;br /&gt;
 &lt;br /&gt;
Ce projet propose de réaliser un système de suivi de la position de la tête d'un patient en rééducation grâce à un monitoring continu de la position de la tête, ainsi qu'un mécanisme pour aider le patient à reprendre une position correcte. En effet on lancera le système pendant environ 30 min durant lesquelles nous détecterons les variations de position et indiquerons au patient le moment ou sa position n’est plus bonne.&lt;br /&gt;
 &lt;br /&gt;
Ce projet devra ainsi comparer la position actuelle de la tête du patient à une position idéale (celle de la verticale) et lui signaler s’il doit ou non ajuster sa position.&lt;br /&gt;
&lt;br /&gt;
=== Choix techniques : matériel et logiciels ===&lt;br /&gt;
 &lt;br /&gt;
Nous avons choisi d’utiliser des accéléromètres afin de pouvoir récupérer des données décrivant la position de la tête. Les accéléromètres nous permettent de calculer l'angle d'inclinaison à partir de la force gravitationnelle qu'ils peuvent mesurer selon les trois axes. Lorsque la position idéale du patient sera choisie par le médecin, nous pourrons enregistrer cette position en mémorisant l'inclinaison de chaque accéléromètre pour cette position. Ainsi un changement de position sera identifié par une variation des angles d'inclinaison précédemment pris. Nous allons utilisé les accéléromètres analogiques de type adxl335. Une fois que nous aurons à disposition les valeurs de l'accéléromètre et, par conséquent les angles d'inclinaison, nous aurons besoin d'un moyen d'affichage des ces données. Pour ce faire, nous avons opté dans un premier temps pour une affichage sur smartphone. Les données vont être envoyées au smartphone à travers un module WIFI connectés au même réseau que le smartphone.  En récapitulant, nous aurons finalement besoin de:&lt;br /&gt;
* 5 accéléromètres adxl335.&lt;br /&gt;
* un arduino Mega&lt;br /&gt;
* un module WIFI &lt;br /&gt;
* des fils pour la liaison.&lt;br /&gt;
&lt;br /&gt;
===Calendrier prévisionnel===&lt;br /&gt;
&lt;br /&gt;
====Liste des tâches à effectuer====&lt;br /&gt;
Etude et choix des accéléromètres&lt;br /&gt;
*fonctionnement : accéléromètres à sortie analogique. Nous aurons donc besoin de 3 sorties analogiques par capteur (donc 3*5 sorties analogiques)&lt;br /&gt;
&lt;br /&gt;
*type de données collectées: force gravitationnelle selon les trois axes qu'il faudra transformer de telle sorte à avoir l'inclinaison de l'accéléromètre par rapport à l'axe x, y et z&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*mise en œuvre du programme d'acquisition.&lt;br /&gt;
&lt;br /&gt;
Moyen d'affichage des résultats &lt;br /&gt;
&lt;br /&gt;
*si position correcte par rapport à celle idéale ;&lt;br /&gt;
*envoi des résultats sur un smartphone.&lt;br /&gt;
&lt;br /&gt;
Réalisation d'un prototype &lt;br /&gt;
 &lt;br /&gt;
*identification et acquisition de la position idéale à l'aide des accéléromètres placées le long de la colonne vertébrale;&lt;br /&gt;
*notification au patient (à travers le smartphone) lorsqu'une position différente de celle idéale a été détectée.&lt;br /&gt;
&lt;br /&gt;
====Calendrier====&lt;br /&gt;
==tâches à réaliser==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! Avancement !! Commentaires&lt;br /&gt;
|-&lt;br /&gt;
| acquisition des données 10DOF&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| connexion au WIFI (esp9266)&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| connexion à un wifi standard prédéfinit lors de la programmation&lt;br /&gt;
|-&lt;br /&gt;
| pages application smartphone&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
|  &lt;br /&gt;
|-&lt;br /&gt;
| envois et réception de données sur smartphone&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| terminé et testé &lt;br /&gt;
|-&lt;br /&gt;
| acquisition des données de l'accéléromètre avec l'arduino mini&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| donnée récupérer à partir de 2 accéléromètre mais on peut en ajouter plus&lt;br /&gt;
|-&lt;br /&gt;
| liaison série arduino mini et esp8266&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;testé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Communication réalisé mais quelque amélioration à faire, il faut optimiser le code&lt;br /&gt;
|-&lt;br /&gt;
| mise en commun de la partie wifi et acquisition de données&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Inachevé&amp;lt;/font&amp;gt;&lt;br /&gt;
| la mise en commun pose quelque problème notamment la réception de donnée non cohérente par le smartphone&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! Prélude !! Heures S1 !! Heures S2 !! Heures S3 !! Heures S4 !! Heures S5 !! Heures S6 !! Heures S7 !! Heures S8 !! Heures S9 !! Heures S10 + Heures supplémentairements !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Définition cahier des charges &lt;br /&gt;
| 2H&lt;br /&gt;
| &lt;br /&gt;
| 8H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| documentation&lt;br /&gt;
| 2h&lt;br /&gt;
| 4h&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 4h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| liste du matériel &lt;br /&gt;
| &lt;br /&gt;
| 2h&lt;br /&gt;
| 6h&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| étude du module Wi-fi&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 8H&lt;br /&gt;
| 2H&lt;br /&gt;
| 4H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 12h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| étude, programmation, câblage du 10 DOF &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 4H&lt;br /&gt;
| 8H&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Accéléromètre &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| 2H&lt;br /&gt;
| étude 3H &lt;br /&gt;
| &lt;br /&gt;
| schématique 2H &lt;br /&gt;
| 12h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| liaison arduino esp&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 16H&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| étude et programmation arduino mini&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 16H&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| application mobile&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|2H&lt;br /&gt;
|4H&lt;br /&gt;
|4H&lt;br /&gt;
|&lt;br /&gt;
|10h&lt;br /&gt;
|10H&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avancement du Projet==&lt;br /&gt;
&lt;br /&gt;
===Semaine 1===&lt;br /&gt;
&lt;br /&gt;
Nous avons été confronté à différents choix matériel notamment dans la référence des accéléromètres ou encore le moyen de transmission des données. &lt;br /&gt;
&lt;br /&gt;
L'accéléromètre doit être assez précis pour des petites variations de position. Après avoir parcouru les catalogues de fournisseurs nous avons trouvé le ADXL335. &lt;br /&gt;
&lt;br /&gt;
De plus, nous devions choisir le mode de transmission des données vers un smartphone. Nous avions le choix entre un module Bluetooth et un module wifi. Le module Bluetooth est plus rapide que le module bluetooth. Cependant, ce dernier ne consomme pas beaucoup de charge de la batterie du smartphone mais il fonctionne  essentiellement sur de petites distances et avec des données de petite taille. En revanche le module WIFI lui consomme beaucoup plus de batterie mais couvre des distances beaucoup plus grandes ainsi que des tailles de données beaucoup plus importantes.&lt;br /&gt;
&lt;br /&gt;
Finalement, nous avons opté pour le module WIFI pour limiter le moins possible l'utilisateur en ce qui concerne la distance entre les appareils et le volume de données transmis.&lt;br /&gt;
&lt;br /&gt;
*Confirmation de la liste de matériel: &lt;br /&gt;
  *accéléromètre ADXL335&lt;br /&gt;
  *Smartphone sous Android&lt;br /&gt;
  *15 longs fils mâle-femelle, mâle-mâle&lt;br /&gt;
  *Arduino pro -mini&lt;br /&gt;
  *Module WIFI&lt;br /&gt;
&lt;br /&gt;
===Semaine 2===&lt;br /&gt;
&lt;br /&gt;
Réalisation d'un cahier des charges fonctionnelles avec les outils de gestions de projet telle que le FAST, la bete à corne, SADT.&lt;br /&gt;
[https://docs.google.com/document/d/1e6291kst6O6Ic0IWnadg5l10HiiZeqsw72GxfXC7O7U/edit cahier des charges fonctionnels]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:cad1_1.PNG| 900px ]]&lt;br /&gt;
[[Fichier:cad1.PNG| 900px ]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
&lt;br /&gt;
En début de semaine, nous avons reçus un premier capteur, l’accéléromètre 10 DOF, ainsi que l'arduino MEGA qui sera utilisé pour l’acquisition des données. L'accéléromètre 10DOF incorpore un gyroscope et un magnétomètre. Ceux-ci nous permettront d'avoir une meilleure précision des mesures notamment avec la mesure des orientations (vitesses angulaires).&lt;br /&gt;
&lt;br /&gt;
Nous avons ensuite étudié le capteur et réalisé le premier montage en connectant ce capteur de manière à pouvoir lire les données récupérées en direct sur l'ordinateur.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:10dof.PNG| 400px ]]&lt;br /&gt;
&lt;br /&gt;
Nous nous sommes également intéressé au calcule de l'angle à partir de l’accélération. &lt;br /&gt;
Prenons l'exemple de l’accéléromètre penché de la manière suivante.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:exemple5.PNG| 400px ]]&lt;br /&gt;
&lt;br /&gt;
Le triangle G,Gx Gz forme un triangle rectangle, dans notre cas nous avons Gx,Gy et Gz qui sont les valeurs du vecteur gravitationnel G sur les trois axes et nous devons déduire 𝝰 (l’angle que fait Gx avec l’axe x), 𝝋 (l’angle que fait Gy avec l’axe y) et ᴪ (l’angle que fait Gz avec l’axe z). La norme de G est&lt;br /&gt;
[[Fichier:Norme2.PNG| 200px ]]&lt;br /&gt;
On récupére ensuite chaque angle de la manière suivante: &lt;br /&gt;
[[Fichier:Calcule_angle.PNG| 200px ]]&lt;br /&gt;
&lt;br /&gt;
Nous avons ensuite réalisé un premier programme afin de lire les données du 10DOF que nous testerons la semaine suivante.&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
&lt;br /&gt;
Nous avons débuté le traitement des données directement sur le MEGA en réalisant de code de récupération de l'angle réalisé par l'accéléromètre.( Dans le code suivant nous avons uniquement l'acquisition des données)&lt;br /&gt;
&lt;br /&gt;
[[Fichier:10dof_code.PNG| 200px ]]&lt;br /&gt;
&lt;br /&gt;
Nous nous sommes rendus compte que les calculs ne sont pas réalisés correctement par le MEGA. En effet la mesure de l'angle n'était pas précis car le MEGA n'a pas assez de puissance de calcul pour faire les différentes divisions.  &lt;br /&gt;
&lt;br /&gt;
[[Fichier:Exempleaccelero.PNG| 100px ]]&lt;br /&gt;
&lt;br /&gt;
Nous avons donc décidé que le MEGA servira uniquement à récupérer les données et à les envoyer via module WIFI. Ce sera donc à l'application Android d'effectuer le traitement des données.&lt;br /&gt;
&lt;br /&gt;
Nous avons ensuite étudié le module WIFI ESP8266 que nous utiliserons, afin de nous faire une idée de son utilisation.&lt;br /&gt;
&lt;br /&gt;
Nous avons également installé les logiciels nécessaires ( Android studio,... )&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
&lt;br /&gt;
Nous nous sommes intéressées  au module wifi, en commençant par lire la fiche technique de l'esp 8266, nous avons également cherché les différents types d'exemples . &lt;br /&gt;
&lt;br /&gt;
Des recherches sur le mode de connexion entre le smartphone et le Mega à travers le module WIFI ont également été effectuer dans le but de se faire une idée, nous hésitons sur l'utilisation de Sockets UDP , ou de réaliser une transmission en TCP .&lt;br /&gt;
&lt;br /&gt;
Le programme réalisée lors de la séance précédente a été testé, notamment les tests de récupération des données de l'accéléromètre 10-DOF sur le Mega.&lt;br /&gt;
&lt;br /&gt;
Le code pour les autres accéléromètres en attendant la livraison de l'ADXL335 a également été entamé.&lt;br /&gt;
&lt;br /&gt;
Nous avons également rencontré un certain nombre de problème :&lt;br /&gt;
&lt;br /&gt;
Afin se connecter en WIFI à partir de n’importe où, nous avons décidé de se connecter premièrement à un réseau standard (point d'accès fourni par le smartphone dans un premier temps) puis de modifier le réseau sur lequel nous sommes connecté à partir du smartphone. Ce dernier enverra le SSID et le mot de passe du nouveau réseau souhaité au module et on  modifiera le paramètre de  cette manière.&lt;br /&gt;
[[Fichier:connection.PNG| 500px ]]&lt;br /&gt;
&lt;br /&gt;
La possibilité et l'utilité de l'ajout de l'acquisition des données du gyroscope pour avoir plus de précision sur l'accéléromètre 10-DOF qui sera sur la tête ( gérer les rotations).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
En parallèle, nous avons également avancé avec la création d'une application android pour la réception et l'affichage de données.&lt;br /&gt;
Nous avons décidé de:&lt;br /&gt;
* faire une page d'accueil dans laquelle le kinésithérapeute devra appuyer sur un bouton lorsqu'il aura bien positionné le patient pour enregistrer la bonne position.&lt;br /&gt;
* à l'appui du bouton, le smartphone va contacter le module WIFI à travers un message broadcast (en utilisant une communication UDP) dans le réseau. &lt;br /&gt;
* Le MODULE WIFI, qui est déjà en attente d'une trame venant du smartphone, reçoit le message broadcast, extrait l'adresse IP du smartphone, puis, lui envoie des données du capteur.&lt;br /&gt;
* le smartphone, à son tour va utiliser ces données pour calculer les angles d'inclinaison sur les différents axes et les afficher. Notons que les premiers angles calculés sont ceux correspondant à la bonne position. &lt;br /&gt;
* A intervalle régulier, le module ESP va envoyer de nouvelles données que le smartphone va traiter et comparer avec les angles de la bonne position et prévenir le patient si la position a changer.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:transmition.PNG| 600px ]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
* Réception du matériel&lt;br /&gt;
&lt;br /&gt;
[[Fichier:ADXL345.PNG| 100px ]]&lt;br /&gt;
&lt;br /&gt;
Nous avons commencé par étudier l'accéléromètre reçu, en effet la référence de ce dernier est ADXL345 et est digital à l’inverse de celui choisi qui était analogique. De ce fait, nous avons modifié une partie du cahier des charges.&lt;br /&gt;
&lt;br /&gt;
Les accéléromètres adxl345 sont alimentés en 3.3V et sont digitaux. Par conséquent, nous n'aurons plus besoin de sortie analogique.  &lt;br /&gt;
&lt;br /&gt;
*fonctionnement : accéléromètres digitaux pouvant fonctionner en SPI comme en I2C et supportant 3.3V. Résolution: 10 bits, régler en mode +/-2g. Donc les valeurs de notre registre de données seront dans la plage [-512 ,512]. Mais puisque nous ne mesurons que la force gravitationnelle, nous aurons des valeurs comprises entre [-256,256] qui est la plage correspondant à -/1g. 1g correspond à la valeur de 9.80m/s2.&lt;br /&gt;
&lt;br /&gt;
*type de données collectées: des entiers de -512 à 512 qu'il faudra transformer de telle sorte à avoir l'inclinaison de l'accéléromètre selon l'axe x, y et z&lt;br /&gt;
&lt;br /&gt;
L'établissement des activités nécessairement et documentation sur le choix des sockets à utiliser pour l'envoi des données a également été entamé.&lt;br /&gt;
&lt;br /&gt;
Coté Smartphone: &lt;br /&gt;
&lt;br /&gt;
*Créations de la page d'accueil et de la page de visualisation des angles d'inclinaisons&lt;br /&gt;
&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
&lt;br /&gt;
Nous avons réalisé l'étude de l'accéléromètre digital, nous avons choisis de travailler avec le mode SPI qui consiste à donner la parole à chaque accéléromètre l'un après l'autre en alimentant chaque pin CS l'un après l'autre. ( Le mode SPI utilise les ports digitaux )&lt;br /&gt;
&lt;br /&gt;
Seulement les pins de l’accéléromètre n'acceptent que des tensions de 3.3V alors que ceux du Mega fournissent des tensions de 5v. Nous aurons donc besoin d'un mécanisme de régulation des tensions en sortie de Mega.&lt;br /&gt;
&lt;br /&gt;
Nous nous sommes alors documenté sur les circuits de régulations et conversions de tension. Nous devons réaliser un dispositif de préférence réversible qui fourni une tension de 3.3v en sortie lorsqu'on lui injecte une tension de 5v en entré.&lt;br /&gt;
&lt;br /&gt;
Les premières connections à partir se l'esp8266. Nous nous sommes donc connecté à notre téléphone utilisé comme point d’accès.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:espconnect.PNG| 300px ]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 8===&lt;br /&gt;
Nous avons réalisé une carte électronique grâce au logiciel fritzing pour réaliser l’adaptation de tensions entre l’accéléromètre adxl345 et la carte MEGA. En effet l'accéléromètre supporte des tensions maximales de 3.3V alors que le MEGA donne en sortie 5V.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:carte_elec1.PNG| 400px ]]&lt;br /&gt;
&lt;br /&gt;
Coté Smartphone:&lt;br /&gt;
&lt;br /&gt;
* création de la page d'accueil avec implémentation du code pour la communication UDP entre le smartphone et l'ESP8266.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:page_daccueil.jpg | 200px]]&lt;br /&gt;
&lt;br /&gt;
Nous avons également commencé la transmission de donnée avec le smartphone en fixant des valeur à envoyer.&lt;br /&gt;
Dans la photo suivante, on peut voir l'esp connecté et attendant le message venant du smartphone.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:wifi_conect.png | 300px]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 9===&lt;br /&gt;
&lt;br /&gt;
Nous avons testé la carte électronique faite la semaine précédente. &lt;br /&gt;
&lt;br /&gt;
[[Fichier:carte_elec2.PNG| 200px ]]&lt;br /&gt;
&lt;br /&gt;
Afin de tester la carte, nous avons alimenter les pins d’entrée par des 5v et avons observé la sortie du circuit. Malheureusement, seulement un pin en sortie &lt;br /&gt;
fournissait une tension de 3.3V.&lt;br /&gt;
Elle ne fonctionne pas et nous n'avons pas pu comprendre pourquoi. &lt;br /&gt;
&lt;br /&gt;
Par conséquent, nous avons changé de microcontrôleur. Nous avons reçu un arduino pro mini 3.3V compatible avec nos capteurs ( mais qui ne l'est pas avec le 10DOF ). &lt;br /&gt;
Nous commençons par conséquent à recueillir les données du capteurs. Pour cela, nous avons utilisé une librairie pour les ADXL345.&lt;br /&gt;
La première étape est de sélectionner le chip Select en définissant un ADXL grâce à la fonction suivante:&lt;br /&gt;
[[Fichier:def_adxl.PNG| 200px ]]&lt;br /&gt;
Cette fonction prend en paramètre le pin lié au chip Select de accéléromètre.&lt;br /&gt;
&lt;br /&gt;
Ensuite on récupère les données grâce à la fonction readaccel comme suit:&lt;br /&gt;
[[Fichier:readaccel.PNG| 200px ]]&lt;br /&gt;
La fonction stocke alors les valeurs lues par l'accéléromètre dans x,y et z.&lt;br /&gt;
&lt;br /&gt;
 code :&lt;br /&gt;
 [[Fichier:codemini1.PNG| 400px ]]&lt;br /&gt;
 &lt;br /&gt;
 [[Fichier:codemini2.PNG| 600px ]]&lt;br /&gt;
&lt;br /&gt;
Nous réalisons ensuite le montage suivant de manière à pouvoir lire sur le port série les valeurs .&lt;br /&gt;
&lt;br /&gt;
[[Fichier:montageaccel.PNG| 600px ]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Partie smartphone:&lt;br /&gt;
succès de la connexion au wi-fi partagé d'un smartphone. Coté ESP comme coté smartphone.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:affichage_valeur.jpg | 200px]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 10===&lt;br /&gt;
&lt;br /&gt;
'''Etude de la partie communication entre l'arduino pro mini et l'ESP8266 pour l'envoie des données du capteur'''&lt;br /&gt;
&lt;br /&gt;
Nous avons implémenté le module Wifi de manière à ce que l’on puisse recevoir les données des accélérations reçus par l’arduino mini.7&lt;br /&gt;
&lt;br /&gt;
Pour cela, nous avons utilisée la bibliothèque SoftwareSerial d’arduino et avons défini deux liaisons série (l'une du côté du mini et l’autre du coté esp).Le mini envois un “a” indiquant à l'esp qu'il commence à envoyer une série de données.Ensuite on ramène les valeurs de l'accéléromètre sur l'échelle de g (gravitation terrestre ) grâce à un produit en croix . Pour finir, nous envoyons les données grâce à un serial write qui écrit sur les pins de l’esp ( pin 14 RX et 12 TX).&lt;br /&gt;
&lt;br /&gt;
Du côté de l’esp, on définit une liaison du nom de swSer au même baudrate que la précédente (9600). On attend la réception de 72 ( l'équivalent de ‘a’ en integer) indiquant que l’on commence à transmettre des données de l'accéléromètre. Une fois ce nombre reçu on incrémente un compteur à chaque réception d’un chiffre et à partir de la valeur de ce compteur nous plaçons la donnée dans la variable qui la définit ( la première donnée est celle de x1 donc si compteur est à 1 on place la valeur lue par swSer.read dans la variable x1 )&lt;br /&gt;
&lt;br /&gt;
'''Mise en commun de la partie Wifi et arduino mini'''&lt;br /&gt;
&lt;br /&gt;
L’union de ces deux partie n'est pas un succès dans le sens ou bien que la connexion aboutit, les donnée qui sont envoyé au smartphone ne sont pas celle envoyé par le mini. Il se pourrait qu'il y ai un problème dans le software serial mis en place entre les deux éléments. Pour résoudre ce problème il faudrait optimiser le code au maximum en enlevant tous ce qui pourrait paraître excédent.&lt;br /&gt;
&lt;br /&gt;
===Fichiers rendus===&lt;br /&gt;
&lt;br /&gt;
Rapport de projet : [[Fichier:Rapport_Fahem_Diop.pdf]]&lt;br /&gt;
&lt;br /&gt;
Code de la partie smartphone: [https://archives.plil.fr/mdiop/ima4_position_de_la_tete/tree/master/clientServerEspApp]&lt;br /&gt;
&lt;br /&gt;
Code de la partie arduino : [https://archives.plil.fr/mdiop/ima4_position_de_la_tete/blob/master/minipro.ino]&lt;br /&gt;
Code de la partie esp: [https://archives.plil.fr/mdiop/ima4_position_de_la_tete/blob/master/espfinal21.ino]&lt;/div&gt;</summary>
		<author><name>Mdiop</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P18&amp;diff=43061</id>
		<title>IMA4 2016/2017 P18</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P18&amp;diff=43061"/>
				<updated>2017-05-20T20:42:44Z</updated>
		
		<summary type="html">&lt;p&gt;Mdiop : /* Fichiers rendus */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===Présentation générale du projet=== &lt;br /&gt;
&lt;br /&gt;
===Objectif du projet===&lt;br /&gt;
Rééducation de la position de la tête.&lt;br /&gt;
&lt;br /&gt;
===Contexte===&lt;br /&gt;
L’évolution de l'informatique a engendré une modification de la place du salarié dans l'entreprise. Ainsi, nombreux sont ceux qui travaillent dans un bureau face à un ordinateur. De ce fait, il a été remarqué par une association de la santé que les maux de dos sont en majorité dus à une mauvaise hygiène de vie notamment liée à une mauvaise posture au travail.&lt;br /&gt;
 &lt;br /&gt;
C'est après différentes études, notamment un bilan postural montrant où se situe la tête par rapport à une position idéale que l'on a remarqué que ces dernières années, 50% des personnes ayant des maux de dos sont en réalité dûs aux cervicales contre 20 % seulement il y a une dizaine d’années.&lt;br /&gt;
 &lt;br /&gt;
Du constat précédent découle ce projet ayant pour but de faciliter aux kinésithérapeutes la rééducation de la position de la tête des patients se plaignants de leur dos.&lt;br /&gt;
&lt;br /&gt;
=== Description du projet ===&lt;br /&gt;
 &lt;br /&gt;
La rééducation de la posture de la tête chez un kinésithérapeute pourrait être améliorée si le travail pouvait se faire en autonomie.&lt;br /&gt;
 &lt;br /&gt;
Ce projet propose de réaliser un système de suivi de la position de la tête d'un patient en rééducation grâce à un monitoring continu de la position de la tête, ainsi qu'un mécanisme pour aider le patient à reprendre une position correcte. En effet on lancera le système pendant environ 30 min durant lesquelles nous détecterons les variations de position et indiquerons au patient le moment ou sa position n’est plus bonne.&lt;br /&gt;
 &lt;br /&gt;
Ce projet devra ainsi comparer la position actuelle de la tête du patient à une position idéale (celle de la verticale) et lui signaler s’il doit ou non ajuster sa position.&lt;br /&gt;
&lt;br /&gt;
=== Choix techniques : matériel et logiciels ===&lt;br /&gt;
 &lt;br /&gt;
Nous avons choisi d’utiliser des accéléromètres afin de pouvoir récupérer des données décrivant la position de la tête. Les accéléromètres nous permettent de calculer l'angle d'inclinaison à partir de la force gravitationnelle qu'ils peuvent mesurer selon les trois axes. Lorsque la position idéale du patient sera choisie par le médecin, nous pourrons enregistrer cette position en mémorisant l'inclinaison de chaque accéléromètre pour cette position. Ainsi un changement de position sera identifié par une variation des angles d'inclinaison précédemment pris. Nous allons utilisé les accéléromètres analogiques de type adxl335. Une fois que nous aurons à disposition les valeurs de l'accéléromètre et, par conséquent les angles d'inclinaison, nous aurons besoin d'un moyen d'affichage des ces données. Pour ce faire, nous avons opté dans un premier temps pour une affichage sur smartphone. Les données vont être envoyées au smartphone à travers un module WIFI connectés au même réseau que le smartphone.  En récapitulant, nous aurons finalement besoin de:&lt;br /&gt;
* 5 accéléromètres adxl335.&lt;br /&gt;
* un arduino Mega&lt;br /&gt;
* un module WIFI &lt;br /&gt;
* des fils pour la liaison.&lt;br /&gt;
&lt;br /&gt;
===Calendrier prévisionnel===&lt;br /&gt;
&lt;br /&gt;
====Liste des tâches à effectuer====&lt;br /&gt;
Etude et choix des accéléromètres&lt;br /&gt;
*fonctionnement : accéléromètres à sortie analogique. Nous aurons donc besoin de 3 sorties analogiques par capteur (donc 3*5 sorties analogiques)&lt;br /&gt;
&lt;br /&gt;
*type de données collectées: force gravitationnelle selon les trois axes qu'il faudra transformer de telle sorte à avoir l'inclinaison de l'accéléromètre par rapport à l'axe x, y et z&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*mise en œuvre du programme d'acquisition.&lt;br /&gt;
&lt;br /&gt;
Moyen d'affichage des résultats &lt;br /&gt;
&lt;br /&gt;
*si position correcte par rapport à celle idéale ;&lt;br /&gt;
*envoi des résultats sur un smartphone.&lt;br /&gt;
&lt;br /&gt;
Réalisation d'un prototype &lt;br /&gt;
 &lt;br /&gt;
*identification et acquisition de la position idéale à l'aide des accéléromètres placées le long de la colonne vertébrale;&lt;br /&gt;
*notification au patient (à travers le smartphone) lorsqu'une position différente de celle idéale a été détectée.&lt;br /&gt;
&lt;br /&gt;
====Calendrier====&lt;br /&gt;
==tâches à réaliser==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! Avancement !! Commentaires&lt;br /&gt;
|-&lt;br /&gt;
| acquisition des données 10DOF&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| connexion au WIFI (esp9266)&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| connexion à un wifi standard prédéfinit lors de la programmation&lt;br /&gt;
|-&lt;br /&gt;
| pages application smartphone&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
|  &lt;br /&gt;
|-&lt;br /&gt;
| envois et réception de données sur smartphone&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| terminé et testé &lt;br /&gt;
|-&lt;br /&gt;
| acquisition des données de l'accéléromètre avec l'arduino mini&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| donnée récupérer à partir de 2 accéléromètre mais on peut en ajouter plus&lt;br /&gt;
|-&lt;br /&gt;
| liaison série arduino mini et esp8266&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;testé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Communication réalisé mais quelque amélioration à faire, il faut optimiser le code&lt;br /&gt;
|-&lt;br /&gt;
| mise en commun de la partie wifi et acquisition de données&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Inachevé&amp;lt;/font&amp;gt;&lt;br /&gt;
| la mise en commun pose quelque problème notamment la réception de donnée non cohérente par le smartphone&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! Prélude !! Heures S1 !! Heures S2 !! Heures S3 !! Heures S4 !! Heures S5 !! Heures S6 !! Heures S7 !! Heures S8 !! Heures S9 !! Heures S10 + Heures supplémentairements !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Définition cahier des charges &lt;br /&gt;
| 2H&lt;br /&gt;
| &lt;br /&gt;
| 8H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| documentation&lt;br /&gt;
| 2h&lt;br /&gt;
| 4h&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 4h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| liste du matériel &lt;br /&gt;
| &lt;br /&gt;
| 2h&lt;br /&gt;
| 6h&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| étude du module Wi-fi&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 8H&lt;br /&gt;
| 2H&lt;br /&gt;
| 4H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 12h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| étude, programmation, câblage du 10 DOF &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 4H&lt;br /&gt;
| 8H&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Accéléromètre &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| 2H&lt;br /&gt;
| étude 3H &lt;br /&gt;
| &lt;br /&gt;
| schématique 2H &lt;br /&gt;
| 12h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| liaison arduino esp&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 16H&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| étude et programmation arduino mini&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 16H&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| application mobile&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|2H&lt;br /&gt;
|4H&lt;br /&gt;
|4H&lt;br /&gt;
|&lt;br /&gt;
|10h&lt;br /&gt;
|10H&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avancement du Projet==&lt;br /&gt;
&lt;br /&gt;
===Semaine 1===&lt;br /&gt;
&lt;br /&gt;
Nous avons été confronté à différents choix matériel notamment dans la référence des accéléromètres ou encore le moyen de transmission des données. &lt;br /&gt;
&lt;br /&gt;
L'accéléromètre doit être assez précis pour des petites variations de position. Après avoir parcouru les catalogues de fournisseurs nous avons trouvé le ADXL335. &lt;br /&gt;
&lt;br /&gt;
De plus, nous devions choisir le mode de transmission des données vers un smartphone. Nous avions le choix entre un module Bluetooth et un module wifi. Le module Bluetooth est plus rapide que le module bluetooth. Cependant, ce dernier ne consomme pas beaucoup de charge de la batterie du smartphone mais il fonctionne  essentiellement sur de petites distances et avec des données de petite taille. En revanche le module WIFI lui consomme beaucoup plus de batterie mais couvre des distances beaucoup plus grandes ainsi que des tailles de données beaucoup plus importantes.&lt;br /&gt;
&lt;br /&gt;
Finalement, nous avons opté pour le module WIFI pour limiter le moins possible l'utilisateur en ce qui concerne la distance entre les appareils et le volume de données transmis.&lt;br /&gt;
&lt;br /&gt;
*Confirmation de la liste de matériel: &lt;br /&gt;
  *accéléromètre ADXL335&lt;br /&gt;
  *Smartphone sous Android&lt;br /&gt;
  *15 longs fils mâle-femelle, mâle-mâle&lt;br /&gt;
  *Arduino pro -mini&lt;br /&gt;
  *Module WIFI&lt;br /&gt;
&lt;br /&gt;
===Semaine 2===&lt;br /&gt;
&lt;br /&gt;
Réalisation d'un cahier des charges fonctionnelles avec les outils de gestions de projet telle que le FAST, la bete à corne, SADT.&lt;br /&gt;
[https://docs.google.com/document/d/1e6291kst6O6Ic0IWnadg5l10HiiZeqsw72GxfXC7O7U/edit cahier des charges fonctionnels]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:cad1_1.PNG| 900px ]]&lt;br /&gt;
[[Fichier:cad1.PNG| 900px ]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
&lt;br /&gt;
En début de semaine, nous avons reçus un premier capteur, l’accéléromètre 10 DOF, ainsi que l'arduino MEGA qui sera utilisé pour l’acquisition des données. L'accéléromètre 10DOF incorpore un gyroscope et un magnétomètre. Ceux-ci nous permettront d'avoir une meilleure précision des mesures notamment avec la mesure des orientations (vitesses angulaires).&lt;br /&gt;
&lt;br /&gt;
Nous avons ensuite étudié le capteur et réalisé le premier montage en connectant ce capteur de manière à pouvoir lire les données récupérées en direct sur l'ordinateur.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:10dof.PNG| 400px ]]&lt;br /&gt;
&lt;br /&gt;
Nous nous sommes également intéressé au calcule de l'angle à partir de l’accélération. &lt;br /&gt;
Prenons l'exemple de l’accéléromètre penché de la manière suivante.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:exemple5.PNG| 400px ]]&lt;br /&gt;
&lt;br /&gt;
Le triangle G,Gx Gz forme un triangle rectangle, dans notre cas nous avons Gx,Gy et Gz qui sont les valeurs du vecteur gravitationnel G sur les trois axes et nous devons déduire 𝝰 (l’angle que fait Gx avec l’axe x), 𝝋 (l’angle que fait Gy avec l’axe y) et ᴪ (l’angle que fait Gz avec l’axe z). La norme de G est&lt;br /&gt;
[[Fichier:Norme2.PNG| 200px ]]&lt;br /&gt;
On récupére ensuite chaque angle de la manière suivante: &lt;br /&gt;
[[Fichier:Calcule_angle.PNG| 200px ]]&lt;br /&gt;
&lt;br /&gt;
Nous avons ensuite réalisé un premier programme afin de lire les données du 10DOF que nous testerons la semaine suivante.&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
&lt;br /&gt;
Nous avons débuté le traitement des données directement sur le MEGA en réalisant de code de récupération de l'angle réalisé par l'accéléromètre.( Dans le code suivant nous avons uniquement l'acquisition des données)&lt;br /&gt;
&lt;br /&gt;
[[Fichier:10dof_code.PNG| 200px ]]&lt;br /&gt;
&lt;br /&gt;
Nous nous sommes rendus compte que les calculs ne sont pas réalisés correctement par le MEGA. En effet la mesure de l'angle n'était pas précis car le MEGA n'a pas assez de puissance de calcul pour faire les différentes divisions.  &lt;br /&gt;
&lt;br /&gt;
[[Fichier:Exempleaccelero.PNG| 100px ]]&lt;br /&gt;
&lt;br /&gt;
Nous avons donc décidé que le MEGA servira uniquement à récupérer les données et à les envoyer via module WIFI. Ce sera donc à l'application Android d'effectuer le traitement des données.&lt;br /&gt;
&lt;br /&gt;
Nous avons ensuite étudié le module WIFI ESP8266 que nous utiliserons, afin de nous faire une idée de son utilisation.&lt;br /&gt;
&lt;br /&gt;
Nous avons également installé les logiciels nécessaires ( Android studio,... )&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
&lt;br /&gt;
Nous nous sommes intéressées  au module wifi, en commençant par lire la fiche technique de l'esp 8266, nous avons également cherché les différents types d'exemples . &lt;br /&gt;
&lt;br /&gt;
Des recherches sur le mode de connexion entre le smartphone et le Mega à travers le module WIFI ont également été effectuer dans le but de se faire une idée, nous hésitons sur l'utilisation de Sockets UDP , ou de réaliser une transmission en TCP .&lt;br /&gt;
&lt;br /&gt;
Le programme réalisée lors de la séance précédente a été testé, notamment les tests de récupération des données de l'accéléromètre 10-DOF sur le Mega.&lt;br /&gt;
&lt;br /&gt;
Le code pour les autres accéléromètres en attendant la livraison de l'ADXL335 a également été entamé.&lt;br /&gt;
&lt;br /&gt;
Nous avons également rencontré un certain nombre de problème :&lt;br /&gt;
&lt;br /&gt;
Afin se connecter en WIFI à partir de n’importe où, nous avons décidé de se connecter premièrement à un réseau standard (point d'accès fourni par le smartphone dans un premier temps) puis de modifier le réseau sur lequel nous sommes connecté à partir du smartphone. Ce dernier enverra le SSID et le mot de passe du nouveau réseau souhaité au module et on  modifiera le paramètre de  cette manière.&lt;br /&gt;
[[Fichier:connection.PNG| 500px ]]&lt;br /&gt;
&lt;br /&gt;
La possibilité et l'utilité de l'ajout de l'acquisition des données du gyroscope pour avoir plus de précision sur l'accéléromètre 10-DOF qui sera sur la tête ( gérer les rotations).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
En parallèle, nous avons également avancé avec la création d'une application android pour la réception et l'affichage de données.&lt;br /&gt;
Nous avons décidé de:&lt;br /&gt;
* faire une page d'accueil dans laquelle le kinésithérapeute devra appuyer sur un bouton lorsqu'il aura bien positionné le patient pour enregistrer la bonne position.&lt;br /&gt;
* à l'appui du bouton, le smartphone va contacter le module WIFI à travers un message broadcast (en utilisant une communication UDP) dans le réseau. &lt;br /&gt;
* Le MODULE WIFI, qui est déjà en attente d'une trame venant du smartphone, reçoit le message broadcast, extrait l'adresse IP du smartphone, puis, lui envoie des données du capteur.&lt;br /&gt;
* le smartphone, à son tour va utiliser ces données pour calculer les angles d'inclinaison sur les différents axes et les afficher. Notons que les premiers angles calculés sont ceux correspondant à la bonne position. &lt;br /&gt;
* A intervalle régulier, le module ESP va envoyer de nouvelles données que le smartphone va traiter et comparer avec les angles de la bonne position et prévenir le patient si la position a changer.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:transmition.PNG| 600px ]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
* Réception du matériel&lt;br /&gt;
&lt;br /&gt;
[[Fichier:ADXL345.PNG| 100px ]]&lt;br /&gt;
&lt;br /&gt;
Nous avons commencé par étudier l'accéléromètre reçu, en effet la référence de ce dernier est ADXL345 et est digital à l’inverse de celui choisi qui était analogique. De ce fait, nous avons modifié une partie du cahier des charges.&lt;br /&gt;
&lt;br /&gt;
Les accéléromètres adxl345 sont alimentés en 3.3V et sont digitaux. Par conséquent, nous n'aurons plus besoin de sortie analogique.  &lt;br /&gt;
&lt;br /&gt;
*fonctionnement : accéléromètres digitaux pouvant fonctionner en SPI comme en I2C et supportant 3.3V. Résolution: 10 bits, régler en mode +/-2g. Donc les valeurs de notre registre de données seront dans la plage [-512 ,512]. Mais puisque nous ne mesurons que la force gravitationnelle, nous aurons des valeurs comprises entre [-256,256] qui est la plage correspondant à -/1g. 1g correspond à la valeur de 9.80m/s2.&lt;br /&gt;
&lt;br /&gt;
*type de données collectées: des entiers de -512 à 512 qu'il faudra transformer de telle sorte à avoir l'inclinaison de l'accéléromètre selon l'axe x, y et z&lt;br /&gt;
&lt;br /&gt;
L'établissement des activités nécessairement et documentation sur le choix des sockets à utiliser pour l'envoi des données a également été entamé.&lt;br /&gt;
&lt;br /&gt;
Coté Smartphone: &lt;br /&gt;
&lt;br /&gt;
*Créations de la page d'accueil et de la page de visualisation des angles d'inclinaisons&lt;br /&gt;
&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
&lt;br /&gt;
Nous avons réalisé l'étude de l'accéléromètre digital, nous avons choisis de travailler avec le mode SPI qui consiste à donner la parole à chaque accéléromètre l'un après l'autre en alimentant chaque pin CS l'un après l'autre. ( Le mode SPI utilise les ports digitaux )&lt;br /&gt;
&lt;br /&gt;
Seulement les pins de l’accéléromètre n'acceptent que des tensions de 3.3V alors que ceux du Mega fournissent des tensions de 5v. Nous aurons donc besoin d'un mécanisme de régulation des tensions en sortie de Mega.&lt;br /&gt;
&lt;br /&gt;
Nous nous sommes alors documenté sur les circuits de régulations et conversions de tension. Nous devons réaliser un dispositif de préférence réversible qui fourni une tension de 3.3v en sortie lorsqu'on lui injecte une tension de 5v en entré.&lt;br /&gt;
&lt;br /&gt;
Les premières connections à partir se l'esp8266. Nous nous sommes donc connecté à notre téléphone utilisé comme point d’accès.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:espconnect.PNG| 300px ]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 8===&lt;br /&gt;
Nous avons réalisé une carte électronique grâce au logiciel fritzing pour réaliser l’adaptation de tensions entre l’accéléromètre adxl345 et la carte MEGA. En effet l'accéléromètre supporte des tensions maximales de 3.3V alors que le MEGA donne en sortie 5V.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:carte_elec1.PNG| 400px ]]&lt;br /&gt;
&lt;br /&gt;
Coté Smartphone:&lt;br /&gt;
&lt;br /&gt;
* création de la page d'accueil avec implémentation du code pour la communication UDP entre le smartphone et l'ESP8266.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:page_daccueil.jpg | 200px]]&lt;br /&gt;
&lt;br /&gt;
Nous avons également commencé la transmission de donnée avec le smartphone en fixant des valeur à envoyer.&lt;br /&gt;
Dans la photo suivante, on peut voir l'esp connecté et attendant le message venant du smartphone.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:wifi_conect.png | 300px]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 9===&lt;br /&gt;
&lt;br /&gt;
Nous avons testé la carte électronique faite la semaine précédente. &lt;br /&gt;
&lt;br /&gt;
[[Fichier:carte_elec2.PNG| 200px ]]&lt;br /&gt;
&lt;br /&gt;
Afin de tester la carte, nous avons alimenter les pins d’entrée par des 5v et avons observé la sortie du circuit. Malheureusement, seulement un pin en sortie &lt;br /&gt;
fournissait une tension de 3.3V.&lt;br /&gt;
Elle ne fonctionne pas et nous n'avons pas pu comprendre pourquoi. &lt;br /&gt;
&lt;br /&gt;
Par conséquent, nous avons changé de microcontrôleur. Nous avons reçu un arduino pro mini 3.3V compatible avec nos capteurs ( mais qui ne l'est pas avec le 10DOF ). &lt;br /&gt;
Nous commençons par conséquent à recueillir les données du capteurs. Pour cela, nous avons utilisé une librairie pour les ADXL345.&lt;br /&gt;
La première étape est de sélectionner le chip Select en définissant un ADXL grâce à la fonction suivante:&lt;br /&gt;
[[Fichier:def_adxl.PNG| 200px ]]&lt;br /&gt;
Cette fonction prend en paramètre le pin lié au chip Select de accéléromètre.&lt;br /&gt;
&lt;br /&gt;
Ensuite on récupère les données grâce à la fonction readaccel comme suit:&lt;br /&gt;
[[Fichier:readaccel.PNG| 200px ]]&lt;br /&gt;
La fonction stocke alors les valeurs lues par l'accéléromètre dans x,y et z.&lt;br /&gt;
&lt;br /&gt;
 code :&lt;br /&gt;
 [[Fichier:codemini1.PNG| 400px ]]&lt;br /&gt;
 &lt;br /&gt;
 [[Fichier:codemini2.PNG| 600px ]]&lt;br /&gt;
&lt;br /&gt;
Nous réalisons ensuite le montage suivant de manière à pouvoir lire sur le port série les valeurs .&lt;br /&gt;
&lt;br /&gt;
[[Fichier:montageaccel.PNG| 600px ]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Partie smartphone:&lt;br /&gt;
succès de la connexion au wi-fi partagé d'un smartphone. Coté ESP comme coté smartphone.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:affichage_valeur.jpg | 200px]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 10===&lt;br /&gt;
&lt;br /&gt;
'''Etude de la partie communication entre l'arduino pro mini et l'ESP8266 pour l'envoie des données du capteur'''&lt;br /&gt;
&lt;br /&gt;
Nous avons implémenté le module Wifi de manière à ce que l’on puisse recevoir les données des accélérations reçus par l’arduino mini.7&lt;br /&gt;
&lt;br /&gt;
Pour cela, nous avons utilisée la bibliothèque SoftwareSerial d’arduino et avons défini deux liaisons série (l'une du côté du mini et l’autre du coté esp).Le mini envois un “a” indiquant à l'esp qu'il commence à envoyer une série de données.Ensuite on ramène les valeurs de l'accéléromètre sur l'échelle de g (gravitation terrestre ) grâce à un produit en croix . Pour finir, nous envoyons les données grâce à un serial write qui écrit sur les pins de l’esp ( pin 14 RX et 12 TX).&lt;br /&gt;
&lt;br /&gt;
Du côté de l’esp, on définit une liaison du nom de swSer au même baudrate que la précédente (9600). On attend la réception de 72 ( l'équivalent de ‘a’ en integer) indiquant que l’on commence à transmettre des données de l'accéléromètre. Une fois ce nombre reçu on incrémente un compteur à chaque réception d’un chiffre et à partir de la valeur de ce compteur nous plaçons la donnée dans la variable qui la définit ( la première donnée est celle de x1 donc si compteur est à 1 on place la valeur lue par swSer.read dans la variable x1 )&lt;br /&gt;
&lt;br /&gt;
'''Mise en commun de la partie Wifi et arduino mini'''&lt;br /&gt;
&lt;br /&gt;
L’union de ces deux partie n'est pas un succès dans le sens ou bien que la connexion aboutit, les donnée qui sont envoyé au smartphone ne sont pas celle envoyé par le mini. Il se pourrait qu'il y ai un problème dans le software serial mis en place entre les deux éléments. Pour résoudre ce problème il faudrait optimiser le code au maximum en enlevant tous ce qui pourrait paraître excédent.&lt;br /&gt;
&lt;br /&gt;
===Fichiers rendus===&lt;br /&gt;
&lt;br /&gt;
Rapport de projet : [[Fichier:Rapport_Fahem_Diop.pdf]]&lt;br /&gt;
&lt;br /&gt;
Code de la partie smartphone: [https://archives.plil.fr/mdiop/ima4_position_de_la_tete/tree/master/clientServerEspApp]&lt;br /&gt;
&lt;br /&gt;
Code de la partie arduino et esp: [[https://drive.google.com/open?id=0B-4pCR18G57KbDA0ejlSTm1YZmM] fichier zip ]&lt;/div&gt;</summary>
		<author><name>Mdiop</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P18&amp;diff=42849</id>
		<title>IMA4 2016/2017 P18</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P18&amp;diff=42849"/>
				<updated>2017-05-20T15:32:27Z</updated>
		
		<summary type="html">&lt;p&gt;Mdiop : /* Semaine 8 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===Présentation générale du projet=== &lt;br /&gt;
&lt;br /&gt;
===Objectif du projet===&lt;br /&gt;
Rééducation de la position de la tête.&lt;br /&gt;
&lt;br /&gt;
===Contexte===&lt;br /&gt;
L’évolution de l'informatique a engendré une modification de la place du salarié dans l'entreprise. Ainsi, nombreux sont ceux qui travaillent dans un bureau face à un ordinateur. De ce fait, il a été remarqué par une association de la santé que les maux de dos sont en majorité dus à une mauvaise hygiène de vie notamment liée à une mauvaise posture au travail.&lt;br /&gt;
 &lt;br /&gt;
C'est après différentes études, notamment un bilan postural montrant où se situe la tête par rapport à une position idéale que l'on a remarqué que ces dernières années, 50% des personnes ayant des maux de dos sont en réalité dûs aux cervicales contre 20 % seulement il y a une dizaine d’années.&lt;br /&gt;
 &lt;br /&gt;
Du constat précédent découle ce projet ayant pour but de faciliter aux kinésithérapeutes la rééducation de la position de la tête des patients se plaignants de leur dos.&lt;br /&gt;
&lt;br /&gt;
=== Description du projet ===&lt;br /&gt;
 &lt;br /&gt;
La rééducation de la posture de la tête chez un kinésithérapeute pourrait être améliorée si le travail pouvait se faire en autonomie.&lt;br /&gt;
 &lt;br /&gt;
Ce projet propose de réaliser un système de suivi de la position de la tête d'un patient en rééducation grâce à un monitoring continu de la position de la tête, ainsi qu'un mécanisme pour aider le patient à reprendre une position correcte. En effet on lancera le système pendant environ 30 min durant lesquelles nous détecterons les variations de position et indiquerons au patient le moment ou sa position n’est plus bonne.&lt;br /&gt;
 &lt;br /&gt;
Ce projet devra ainsi comparer la position actuelle de la tête du patient à une position idéale (celle de la verticale) et lui signaler s’il doit ou non ajuster sa position.&lt;br /&gt;
&lt;br /&gt;
=== Choix techniques : matériel et logiciels ===&lt;br /&gt;
 &lt;br /&gt;
Nous avons choisi d’utiliser des accéléromètres afin de pouvoir récupérer des données décrivant la position de la tête. Les accéléromètres nous permettent de calculer l'angle d'inclinaison à partir de la force gravitationnelle qu'ils peuvent mesurer selon les trois axes. Lorsque la position idéale du patient sera choisie par le médecin, nous pourrons enregistrer cette position en mémorisant l'inclinaison de chaque accéléromètre pour cette position. Ainsi un changement de position sera identifié par une variation des angles d'inclinaison précédemment pris. Nous allons utilisé les accéléromètres analogiques de type adxl335. Une fois que nous aurons à disposition les valeurs de l'accéléromètre et, par conséquent les angles d'inclinaison, nous aurons besoin d'un moyen d'affichage des ces données. Pour ce faire, nous avons opté dans un premier temps pour une affichage sur smartphone. Les données vont être envoyées au smartphone à travers un module WIFI connectés au même réseau que le smartphone.  En récapitulant, nous aurons finalement besoin de:&lt;br /&gt;
* 5 accéléromètres adxl335.&lt;br /&gt;
* un arduino Mega&lt;br /&gt;
* un module WIFI &lt;br /&gt;
* des fils pour la liaison.&lt;br /&gt;
&lt;br /&gt;
===Calendrier prévisionnel===&lt;br /&gt;
&lt;br /&gt;
====Liste des tâches à effectuer====&lt;br /&gt;
Etude et choix des accéléromètres&lt;br /&gt;
*fonctionnement : accéléromètres à sortie analogique. Nous aurons donc besoin de 3 sorties analogiques par capteur (donc 3*5 sorties analogiques)&lt;br /&gt;
&lt;br /&gt;
*type de données collectées: force gravitationnelle selon les trois axes qu'il faudra transformer de telle sorte à avoir l'inclinaison de l'accéléromètre par rapport à l'axe x, y et z&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*mise en œuvre du programme d'acquisition.&lt;br /&gt;
&lt;br /&gt;
Moyen d'affichage des résultats &lt;br /&gt;
&lt;br /&gt;
*si position correcte par rapport à celle idéale ;&lt;br /&gt;
*envoi des résultats sur un smartphone.&lt;br /&gt;
&lt;br /&gt;
Réalisation d'un prototype &lt;br /&gt;
 &lt;br /&gt;
*identification et acquisition de la position idéale à l'aide des accéléromètres placées le long de la colonne vertébrale;&lt;br /&gt;
*notification au patient (à travers le smartphone) lorsqu'une position différente de celle idéale a été détectée.&lt;br /&gt;
&lt;br /&gt;
====Calendrier====&lt;br /&gt;
==tâches à réaliser==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! Avancement !! Commentaires&lt;br /&gt;
|-&lt;br /&gt;
| acquisition des données 10DOF&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| connexion au WIFI (esp9266)&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| connexion à un wifi standard prédéfinit lors de la programmation&lt;br /&gt;
|-&lt;br /&gt;
| pages application smartphone&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
|  &lt;br /&gt;
|-&lt;br /&gt;
| envois et réception de données sur smartphone&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| terminé et testé &lt;br /&gt;
|-&lt;br /&gt;
| acquisition des données de l'accéléromètre avec l'arduino mini&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| donnée récupérer à partir de 2 accéléromètre mais on peut en ajouter plus&lt;br /&gt;
|-&lt;br /&gt;
| liaison série arduino mini et esp8266&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;testé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Communication réalisé mais quelque amélioration à faire, il faut optimiser le code&lt;br /&gt;
|-&lt;br /&gt;
| mise en commun de la partie wifi et acquisition de données&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Inachevé&amp;lt;/font&amp;gt;&lt;br /&gt;
| la mise en commun pose quelque problème notamment la réception de donnée non cohérente par le smartphone&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! Prélude !! Heures S1 !! Heures S2 !! Heures S3 !! Heures S4 !! Heures S5 !! Heures S6 !! Heures S7 !! Heures S8 !! Heures S9 !! Heures S10 + Heures supplémentairements !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Définition cahier des charges &lt;br /&gt;
| 2H&lt;br /&gt;
| &lt;br /&gt;
| 8H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| documentation&lt;br /&gt;
| 2h&lt;br /&gt;
| 4h&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 4h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| liste du matériel &lt;br /&gt;
| &lt;br /&gt;
| 2h&lt;br /&gt;
| 6h&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| étude du module Wi-fi&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 8H&lt;br /&gt;
| 2H&lt;br /&gt;
| 4H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 12h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| étude, programmation, câblage du 10 DOF &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 4H&lt;br /&gt;
| 8H&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Accéléromètre &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| 2H&lt;br /&gt;
| étude 3H &lt;br /&gt;
| &lt;br /&gt;
| schématique 2H &lt;br /&gt;
| 12h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| liaison arduino esp&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 16H&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| étude et programmation arduino mini&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 16H&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| application mobile&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|2H&lt;br /&gt;
|4H&lt;br /&gt;
|4H&lt;br /&gt;
|&lt;br /&gt;
|10h&lt;br /&gt;
|10H&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avancement du Projet==&lt;br /&gt;
&lt;br /&gt;
===Semaine 1===&lt;br /&gt;
&lt;br /&gt;
Nous avons été confronté à différents choix matériel notamment dans la référence des accéléromètres ou encore le moyen de transmission des données. &lt;br /&gt;
&lt;br /&gt;
L'accéléromètre doit être assez précis pour des petites variations de position. Après avoir parcouru les catalogues de fournisseurs nous avons trouvé le ADXL335. &lt;br /&gt;
&lt;br /&gt;
De plus, nous devions choisir le mode de transmission des données vers un smartphone. Nous avions le choix entre un module Bluetooth et un module wifi. Le module Bluetooth est plus rapide que le module bluetooth. Cependant, ce dernier ne consomme pas beaucoup de charge de la batterie du smartphone mais il fonctionne  essentiellement sur de petites distances et avec des données de petite taille. En revanche le module WIFI lui consomme beaucoup plus de batterie mais couvre des distances beaucoup plus grandes ainsi que des tailles de données beaucoup plus importantes.&lt;br /&gt;
&lt;br /&gt;
Finalement, nous avons opté pour le module WIFI pour limiter le moins possible l'utilisateur en ce qui concerne la distance entre les appareils et le volume de données transmis.&lt;br /&gt;
&lt;br /&gt;
*Confirmation de la liste de matériel: &lt;br /&gt;
  *accéléromètre ADXL335&lt;br /&gt;
  *Smartphone sous Android&lt;br /&gt;
  *15 longs fils mâle-femelle, mâle-mâle&lt;br /&gt;
  *Arduino pro -mini&lt;br /&gt;
  *Module WIFI&lt;br /&gt;
&lt;br /&gt;
===Semaine 2===&lt;br /&gt;
&lt;br /&gt;
Réalisation d'un cahier des charges fonctionnelles avec les outils de gestions de projet telle que le FAST, la bete à corne, SADT.&lt;br /&gt;
[https://docs.google.com/document/d/1e6291kst6O6Ic0IWnadg5l10HiiZeqsw72GxfXC7O7U/edit cahier des charges fonctionnels]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:cad1_1.PNG| 900px ]]&lt;br /&gt;
[[Fichier:cad1.PNG| 900px ]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
&lt;br /&gt;
En début de semaine, nous avons reçus un premier capteur, l’accéléromètre 10 DOF, ainsi que l'arduino MEGA qui sera utilisé pour l’acquisition des données. L'accéléromètre 10DOF incorpore un gyroscope et un magnétomètre. Ceux-ci nous permettront d'avoir une meilleure précision des mesures notamment avec la mesure des orientations (vitesses angulaires).&lt;br /&gt;
&lt;br /&gt;
Nous avons ensuite étudié le capteur et réalisé le premier montage en connectant ce capteur de manière à pouvoir lire les données récupérées en direct sur l'ordinateur.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:10dof.PNG| 400px ]]&lt;br /&gt;
&lt;br /&gt;
Nous nous sommes également intéressé au calcule de l'angle à partir de l’accélération. &lt;br /&gt;
Prenons l'exemple de l’accéléromètre penché de la manière suivante.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:exemple5.PNG| 400px ]]&lt;br /&gt;
&lt;br /&gt;
Le triangle G,Gx Gz forme un triangle rectangle, dans notre cas nous avons Gx,Gy et Gz qui sont les valeurs du vecteur gravitationnel G sur les trois axes et nous devons déduire 𝝰 (l’angle que fait Gx avec l’axe x), 𝝋 (l’angle que fait Gy avec l’axe y) et ᴪ (l’angle que fait Gz avec l’axe z). La norme de G est&lt;br /&gt;
[[Fichier:Norme2.PNG| 200px ]]&lt;br /&gt;
On récupére ensuite chaque angle de la manière suivante: &lt;br /&gt;
[[Fichier:Calcule_angle.PNG| 200px ]]&lt;br /&gt;
&lt;br /&gt;
Nous avons ensuite réalisé un premier programme afin de lire les données du 10DOF que nous testerons la semaine suivante.&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
&lt;br /&gt;
Nous avons débuté le traitement des données directement sur le MEGA en réalisant de code de récupération de l'angle réalisé par l'accéléromètre.( Dans le code suivant nous avons uniquement l'acquisition des données)&lt;br /&gt;
&lt;br /&gt;
[[Fichier:10dof_code.PNG| 200px ]]&lt;br /&gt;
&lt;br /&gt;
Nous nous sommes rendus compte que les calculs ne sont pas réalisés correctement par le MEGA. En effet la mesure de l'angle n'était pas précis car le MEGA n'a pas assez de puissance de calcul pour faire les différentes divisions.  &lt;br /&gt;
&lt;br /&gt;
[[Fichier:Exempleaccelero.PNG| 100px ]]&lt;br /&gt;
&lt;br /&gt;
Nous avons donc décidé que le MEGA servira uniquement à récupérer les données et à les envoyer via module WIFI. Ce sera donc à l'application Android d'effectuer le traitement des données.&lt;br /&gt;
&lt;br /&gt;
Nous avons ensuite étudié le module WIFI ESP8266 que nous utiliserons, afin de nous faire une idée de son utilisation.&lt;br /&gt;
&lt;br /&gt;
Nous avons également installé les logiciels nécessaires ( Android studio,... )&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
&lt;br /&gt;
Nous nous sommes intéressées  au module wifi, en commençant par lire la fiche technique de l'esp 8266, nous avons également cherché les différents types d'exemples . &lt;br /&gt;
&lt;br /&gt;
Des recherches sur le mode de connexion entre le smartphone et le Mega à travers le module WIFI ont également été effectuer dans le but de se faire une idée, nous hésitons sur l'utilisation de Sockets UDP , ou de réaliser une transmission en TCP .&lt;br /&gt;
&lt;br /&gt;
Le programme réalisée lors de la séance précédente a été testé, notamment les tests de récupération des données de l'accéléromètre 10-DOF sur le Mega.&lt;br /&gt;
&lt;br /&gt;
Le code pour les autres accéléromètres en attendant la livraison de l'ADXL335 a également été entamé.&lt;br /&gt;
&lt;br /&gt;
Nous avons également rencontré un certain nombre de problème :&lt;br /&gt;
&lt;br /&gt;
Afin se connecter en WIFI à partir de n’importe où, nous avons décidé de se connecter premièrement à un réseau standard (point d'accès fourni par le smartphone dans un premier temps) puis de modifier le réseau sur lequel nous sommes connecté à partir du smartphone. Ce dernier enverra le SSID et le mot de passe du nouveau réseau souhaité au module et on  modifiera le paramètre de  cette manière.&lt;br /&gt;
[[Fichier:connection.PNG| 500px ]]&lt;br /&gt;
&lt;br /&gt;
La possibilité et l'utilité de l'ajout de l'acquisition des données du gyroscope pour avoir plus de précision sur l'accéléromètre 10-DOF qui sera sur la tête ( gérer les rotations).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
En parallèle, nous avons également avancé avec la création d'une application android pour la réception et l'affichage de données.&lt;br /&gt;
Nous avons décidé de:&lt;br /&gt;
* faire une page d'accueil dans laquelle le kinésithérapeute devra appuyer sur un bouton lorsqu'il aura bien positionné le patient pour enregistrer la bonne position.&lt;br /&gt;
* à l'appui du bouton, le smartphone va contacter le module WIFI à travers un message broadcast (en utilisant une communication UDP) dans le réseau. &lt;br /&gt;
* Le MODULE WIFI, qui est déjà en attente d'une trame venant du smartphone, reçoit le message broadcast, extrait l'adresse IP du smartphone, puis, lui envoie des données du capteur.&lt;br /&gt;
* le smartphone, à son tour va utiliser ces données pour calculer les angles d'inclinaison sur les différents axes et les afficher. Notons que les premiers angles calculés sont ceux correspondant à la bonne position. &lt;br /&gt;
* A intervalle régulier, le module ESP va envoyer de nouvelles données que le smartphone va traiter et comparer avec les angles de la bonne position et prévenir le patient si la position a changer.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:transmition.PNG| 600px ]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
* Réception du matériel&lt;br /&gt;
&lt;br /&gt;
[[Fichier:ADXL345.PNG| 100px ]]&lt;br /&gt;
&lt;br /&gt;
Nous avons commencé par étudier l'accéléromètre reçu, en effet la référence de ce dernier est ADXL345 et est digital à l’inverse de celui choisi qui était analogique. De ce fait, nous avons modifié une partie du cahier des charges.&lt;br /&gt;
&lt;br /&gt;
Les accéléromètres adxl345 sont alimentés en 3.3V et sont digitaux. Par conséquent, nous n'aurons plus besoin de sortie analogique.  &lt;br /&gt;
&lt;br /&gt;
*fonctionnement : accéléromètres digitaux pouvant fonctionner en SPI comme en I2C et supportant 3.3V. Résolution: 10 bits, régler en mode +/-2g. Donc les valeurs de notre registre de données seront dans la plage [-512 ,512]. Mais puisque nous ne mesurons que la force gravitationnelle, nous aurons des valeurs comprises entre [-256,256] qui est la plage correspondant à -/1g. 1g correspond à la valeur de 9.80m/s2.&lt;br /&gt;
&lt;br /&gt;
*type de données collectées: des entiers de -512 à 512 qu'il faudra transformer de telle sorte à avoir l'inclinaison de l'accéléromètre selon l'axe x, y et z&lt;br /&gt;
&lt;br /&gt;
L'établissement des activités nécessairement et documentation sur le choix des sockets à utiliser pour l'envoi des données a également été entamé.&lt;br /&gt;
&lt;br /&gt;
Coté Smartphone: &lt;br /&gt;
&lt;br /&gt;
*Créations de la page d'accueil et de la page de visualisation des angles d'inclinaisons&lt;br /&gt;
&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
&lt;br /&gt;
Nous avons réalisé l'étude de l'accéléromètre digital, nous devrons nous servir des ports digitaux du MEGA et choisir l’accéléromètre à partir duquel nous récupérons les données grâce à un chip select. Pour cela nous devrons utiliser la bibliothèque SPI.h et brancher le pin CS de l'accéléromètre à des pin digitaux du mega.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Mais les pin de l'accéleromètre n'acceptent que des tensions de 3.3V alors que ceux du Mega fournissent des tensions de 5v. Nous aurons donc besoin d'un mécanisme de régulation des tensions en sortie de Mega.&lt;br /&gt;
&lt;br /&gt;
===Semaine 8===&lt;br /&gt;
Nous avons réalisé une carte électronique grâce au logiciel fritzing pour réaliser l’adaptation de tensions entre l’accéléromètre adxl345 et la carte MEGA. En effet l'accéléromètre supporte des tensions maximales de 3.3V alors que le MEGA donne en sortie 5V.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:carte_elec1.PNG| 400px ]]&lt;br /&gt;
&lt;br /&gt;
Coté Smartphone:&lt;br /&gt;
&lt;br /&gt;
* création de la page d'accueil avec implémentation du code pour la communication UDP entre le smartphone et l'ESP8266.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:page_daccueil.jpg | 200px]]&lt;br /&gt;
* Nous rencontrons des problèmes en ce qui concerne la l'implémentation du programme coté ESP.&lt;br /&gt;
&lt;br /&gt;
===Semaine 9===&lt;br /&gt;
&lt;br /&gt;
Nous avons testé la carte électronique faite la semaine précédente. &lt;br /&gt;
&lt;br /&gt;
[[Fichier:carte_elec2.PNG| 200px ]]&lt;br /&gt;
&lt;br /&gt;
Afin de tester la carte, nous avons alimenter les pins d’entrée par des 5v et avons observé la sortie du circuit. Malheureusement, seulement un pin en sortie &lt;br /&gt;
fournissait une tension de 3.3V.&lt;br /&gt;
Elle ne fonctionne pas et nous n'avons pas pu comprendre pourquoi. &lt;br /&gt;
&lt;br /&gt;
Par conséquent, nous avons changé de microcontrôleur. Nous avons reçu un arduino pro mini 3.3V compatible avec nos capteurs ( mais qui ne l'est pas avec le 10DOF ). &lt;br /&gt;
Nous commençons par conséquent à recueillir les données du capteurs. Pour cela, nous avons utilisé une librairie pour les ADXL345.&lt;br /&gt;
La première étape est de sélectionner le chip Select en définissant un ADXL grâce à la fonction suivante:&lt;br /&gt;
[[Fichier:def_adxl.PNG| 200px ]]&lt;br /&gt;
Cette fonction prend en paramètre le pin lié au chip Select de accéléromètre.&lt;br /&gt;
&lt;br /&gt;
Ensuite on récupère les données grâce à la fonction readaccel comme suit:&lt;br /&gt;
[[Fichier:readaccel.PNG| 200px ]]&lt;br /&gt;
La fonction stocke alors les valeurs lues par l'accéléromètre dans x,y et z.&lt;br /&gt;
&lt;br /&gt;
 code :&lt;br /&gt;
 [[Fichier:codemini1.PNG| 400px ]]&lt;br /&gt;
 &lt;br /&gt;
 [[Fichier:codemini2.PNG| 600px ]]&lt;br /&gt;
&lt;br /&gt;
Nous réalisons ensuite le montage suivant de manière à pouvoir lire sur le port série les valeurs .&lt;br /&gt;
&lt;br /&gt;
[[Fichier:montageaccel.PNG| 600px ]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Partie smartphone:&lt;br /&gt;
succès de la connexion au wi-fi partagé d'un smartphone. Coté ESP comme coté smartphone.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:affichage_valeur.jpg | 200px]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 10===&lt;br /&gt;
&lt;br /&gt;
'''Etude de la partie communication entre l'arduino pro mini et l'ESP8266 pour l'envoie des données du capteur'''&lt;br /&gt;
&lt;br /&gt;
Nous avons implémenté le module Wifi de manière à ce que l’on puisse recevoir les données des accélérations reçus par l’arduino mini.7&lt;br /&gt;
&lt;br /&gt;
Pour cela, nous avons utilisée la bibliothèque SoftwareSerial d’arduino et avons défini deux liaisons série (l'une du côté du mini et l’autre du coté esp).Le mini envois un “a” indiquant à l'esp qu'il commence à envoyer une serie de données.Ensuite on ramène les valeurs de l'accéléromètre sur l'échelle de g (gravitation terrestre ) gracz à un produit en croix . Pour finir, nous envoyons les données grâce à un serial write qui écrit sur les pins de l’esp ( pin 14 RX et 12 TX).&lt;br /&gt;
&lt;br /&gt;
Du côté de l’esp, on définit une liaison du nom de swSer au même baudrate que la précédente (9600). On attend la réception de 72 ( l'équivalent de ‘a’ en integer) indiquant que l’on commence à transmettre des données de l'accéléromètre. Une fois ce nombre reçu on incrémente un compteur à chaque réception d’un chiffre et à partir de la valeur de ce compteur nous plaçons la donnée dans la variable qui la définit ( la première donnée est celle de x1 donc si compteur est à 1 on place la valeur lue par swSer.read dans la variable x1 )&lt;br /&gt;
&lt;br /&gt;
===Fichiers rendus===&lt;br /&gt;
&lt;br /&gt;
rapport de projet : [[Fichier:Rapport_Fahem_Diop.pdf]]&lt;br /&gt;
Code de la partie smartphone: [[Fichier:]]&lt;/div&gt;</summary>
		<author><name>Mdiop</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P18&amp;diff=42848</id>
		<title>IMA4 2016/2017 P18</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P18&amp;diff=42848"/>
				<updated>2017-05-20T15:31:45Z</updated>
		
		<summary type="html">&lt;p&gt;Mdiop : /* Semaine 9 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===Présentation générale du projet=== &lt;br /&gt;
&lt;br /&gt;
===Objectif du projet===&lt;br /&gt;
Rééducation de la position de la tête.&lt;br /&gt;
&lt;br /&gt;
===Contexte===&lt;br /&gt;
L’évolution de l'informatique a engendré une modification de la place du salarié dans l'entreprise. Ainsi, nombreux sont ceux qui travaillent dans un bureau face à un ordinateur. De ce fait, il a été remarqué par une association de la santé que les maux de dos sont en majorité dus à une mauvaise hygiène de vie notamment liée à une mauvaise posture au travail.&lt;br /&gt;
 &lt;br /&gt;
C'est après différentes études, notamment un bilan postural montrant où se situe la tête par rapport à une position idéale que l'on a remarqué que ces dernières années, 50% des personnes ayant des maux de dos sont en réalité dûs aux cervicales contre 20 % seulement il y a une dizaine d’années.&lt;br /&gt;
 &lt;br /&gt;
Du constat précédent découle ce projet ayant pour but de faciliter aux kinésithérapeutes la rééducation de la position de la tête des patients se plaignants de leur dos.&lt;br /&gt;
&lt;br /&gt;
=== Description du projet ===&lt;br /&gt;
 &lt;br /&gt;
La rééducation de la posture de la tête chez un kinésithérapeute pourrait être améliorée si le travail pouvait se faire en autonomie.&lt;br /&gt;
 &lt;br /&gt;
Ce projet propose de réaliser un système de suivi de la position de la tête d'un patient en rééducation grâce à un monitoring continu de la position de la tête, ainsi qu'un mécanisme pour aider le patient à reprendre une position correcte. En effet on lancera le système pendant environ 30 min durant lesquelles nous détecterons les variations de position et indiquerons au patient le moment ou sa position n’est plus bonne.&lt;br /&gt;
 &lt;br /&gt;
Ce projet devra ainsi comparer la position actuelle de la tête du patient à une position idéale (celle de la verticale) et lui signaler s’il doit ou non ajuster sa position.&lt;br /&gt;
&lt;br /&gt;
=== Choix techniques : matériel et logiciels ===&lt;br /&gt;
 &lt;br /&gt;
Nous avons choisi d’utiliser des accéléromètres afin de pouvoir récupérer des données décrivant la position de la tête. Les accéléromètres nous permettent de calculer l'angle d'inclinaison à partir de la force gravitationnelle qu'ils peuvent mesurer selon les trois axes. Lorsque la position idéale du patient sera choisie par le médecin, nous pourrons enregistrer cette position en mémorisant l'inclinaison de chaque accéléromètre pour cette position. Ainsi un changement de position sera identifié par une variation des angles d'inclinaison précédemment pris. Nous allons utilisé les accéléromètres analogiques de type adxl335. Une fois que nous aurons à disposition les valeurs de l'accéléromètre et, par conséquent les angles d'inclinaison, nous aurons besoin d'un moyen d'affichage des ces données. Pour ce faire, nous avons opté dans un premier temps pour une affichage sur smartphone. Les données vont être envoyées au smartphone à travers un module WIFI connectés au même réseau que le smartphone.  En récapitulant, nous aurons finalement besoin de:&lt;br /&gt;
* 5 accéléromètres adxl335.&lt;br /&gt;
* un arduino Mega&lt;br /&gt;
* un module WIFI &lt;br /&gt;
* des fils pour la liaison.&lt;br /&gt;
&lt;br /&gt;
===Calendrier prévisionnel===&lt;br /&gt;
&lt;br /&gt;
====Liste des tâches à effectuer====&lt;br /&gt;
Etude et choix des accéléromètres&lt;br /&gt;
*fonctionnement : accéléromètres à sortie analogique. Nous aurons donc besoin de 3 sorties analogiques par capteur (donc 3*5 sorties analogiques)&lt;br /&gt;
&lt;br /&gt;
*type de données collectées: force gravitationnelle selon les trois axes qu'il faudra transformer de telle sorte à avoir l'inclinaison de l'accéléromètre par rapport à l'axe x, y et z&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*mise en œuvre du programme d'acquisition.&lt;br /&gt;
&lt;br /&gt;
Moyen d'affichage des résultats &lt;br /&gt;
&lt;br /&gt;
*si position correcte par rapport à celle idéale ;&lt;br /&gt;
*envoi des résultats sur un smartphone.&lt;br /&gt;
&lt;br /&gt;
Réalisation d'un prototype &lt;br /&gt;
 &lt;br /&gt;
*identification et acquisition de la position idéale à l'aide des accéléromètres placées le long de la colonne vertébrale;&lt;br /&gt;
*notification au patient (à travers le smartphone) lorsqu'une position différente de celle idéale a été détectée.&lt;br /&gt;
&lt;br /&gt;
====Calendrier====&lt;br /&gt;
==tâches à réaliser==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! Avancement !! Commentaires&lt;br /&gt;
|-&lt;br /&gt;
| acquisition des données 10DOF&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| connexion au WIFI (esp9266)&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| connexion à un wifi standard prédéfinit lors de la programmation&lt;br /&gt;
|-&lt;br /&gt;
| pages application smartphone&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
|  &lt;br /&gt;
|-&lt;br /&gt;
| envois et réception de données sur smartphone&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| terminé et testé &lt;br /&gt;
|-&lt;br /&gt;
| acquisition des données de l'accéléromètre avec l'arduino mini&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| donnée récupérer à partir de 2 accéléromètre mais on peut en ajouter plus&lt;br /&gt;
|-&lt;br /&gt;
| liaison série arduino mini et esp8266&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;testé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Communication réalisé mais quelque amélioration à faire, il faut optimiser le code&lt;br /&gt;
|-&lt;br /&gt;
| mise en commun de la partie wifi et acquisition de données&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Inachevé&amp;lt;/font&amp;gt;&lt;br /&gt;
| la mise en commun pose quelque problème notamment la réception de donnée non cohérente par le smartphone&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! Prélude !! Heures S1 !! Heures S2 !! Heures S3 !! Heures S4 !! Heures S5 !! Heures S6 !! Heures S7 !! Heures S8 !! Heures S9 !! Heures S10 + Heures supplémentairements !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Définition cahier des charges &lt;br /&gt;
| 2H&lt;br /&gt;
| &lt;br /&gt;
| 8H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| documentation&lt;br /&gt;
| 2h&lt;br /&gt;
| 4h&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 4h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| liste du matériel &lt;br /&gt;
| &lt;br /&gt;
| 2h&lt;br /&gt;
| 6h&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| étude du module Wi-fi&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 8H&lt;br /&gt;
| 2H&lt;br /&gt;
| 4H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 12h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| étude, programmation, câblage du 10 DOF &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 4H&lt;br /&gt;
| 8H&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Accéléromètre &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| 2H&lt;br /&gt;
| étude 3H &lt;br /&gt;
| &lt;br /&gt;
| schématique 2H &lt;br /&gt;
| 12h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| liaison arduino esp&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 16H&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| étude et programmation arduino mini&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 16H&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| application mobile&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|2H&lt;br /&gt;
|4H&lt;br /&gt;
|4H&lt;br /&gt;
|&lt;br /&gt;
|10h&lt;br /&gt;
|10H&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avancement du Projet==&lt;br /&gt;
&lt;br /&gt;
===Semaine 1===&lt;br /&gt;
&lt;br /&gt;
Nous avons été confronté à différents choix matériel notamment dans la référence des accéléromètres ou encore le moyen de transmission des données. &lt;br /&gt;
&lt;br /&gt;
L'accéléromètre doit être assez précis pour des petites variations de position. Après avoir parcouru les catalogues de fournisseurs nous avons trouvé le ADXL335. &lt;br /&gt;
&lt;br /&gt;
De plus, nous devions choisir le mode de transmission des données vers un smartphone. Nous avions le choix entre un module Bluetooth et un module wifi. Le module Bluetooth est plus rapide que le module bluetooth. Cependant, ce dernier ne consomme pas beaucoup de charge de la batterie du smartphone mais il fonctionne  essentiellement sur de petites distances et avec des données de petite taille. En revanche le module WIFI lui consomme beaucoup plus de batterie mais couvre des distances beaucoup plus grandes ainsi que des tailles de données beaucoup plus importantes.&lt;br /&gt;
&lt;br /&gt;
Finalement, nous avons opté pour le module WIFI pour limiter le moins possible l'utilisateur en ce qui concerne la distance entre les appareils et le volume de données transmis.&lt;br /&gt;
&lt;br /&gt;
*Confirmation de la liste de matériel: &lt;br /&gt;
  *accéléromètre ADXL335&lt;br /&gt;
  *Smartphone sous Android&lt;br /&gt;
  *15 longs fils mâle-femelle, mâle-mâle&lt;br /&gt;
  *Arduino pro -mini&lt;br /&gt;
  *Module WIFI&lt;br /&gt;
&lt;br /&gt;
===Semaine 2===&lt;br /&gt;
&lt;br /&gt;
Réalisation d'un cahier des charges fonctionnelles avec les outils de gestions de projet telle que le FAST, la bete à corne, SADT.&lt;br /&gt;
[https://docs.google.com/document/d/1e6291kst6O6Ic0IWnadg5l10HiiZeqsw72GxfXC7O7U/edit cahier des charges fonctionnels]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:cad1_1.PNG| 900px ]]&lt;br /&gt;
[[Fichier:cad1.PNG| 900px ]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
&lt;br /&gt;
En début de semaine, nous avons reçus un premier capteur, l’accéléromètre 10 DOF, ainsi que l'arduino MEGA qui sera utilisé pour l’acquisition des données. L'accéléromètre 10DOF incorpore un gyroscope et un magnétomètre. Ceux-ci nous permettront d'avoir une meilleure précision des mesures notamment avec la mesure des orientations (vitesses angulaires).&lt;br /&gt;
&lt;br /&gt;
Nous avons ensuite étudié le capteur et réalisé le premier montage en connectant ce capteur de manière à pouvoir lire les données récupérées en direct sur l'ordinateur.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:10dof.PNG| 400px ]]&lt;br /&gt;
&lt;br /&gt;
Nous nous sommes également intéressé au calcule de l'angle à partir de l’accélération. &lt;br /&gt;
Prenons l'exemple de l’accéléromètre penché de la manière suivante.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:exemple5.PNG| 400px ]]&lt;br /&gt;
&lt;br /&gt;
Le triangle G,Gx Gz forme un triangle rectangle, dans notre cas nous avons Gx,Gy et Gz qui sont les valeurs du vecteur gravitationnel G sur les trois axes et nous devons déduire 𝝰 (l’angle que fait Gx avec l’axe x), 𝝋 (l’angle que fait Gy avec l’axe y) et ᴪ (l’angle que fait Gz avec l’axe z). La norme de G est&lt;br /&gt;
[[Fichier:Norme2.PNG| 200px ]]&lt;br /&gt;
On récupére ensuite chaque angle de la manière suivante: &lt;br /&gt;
[[Fichier:Calcule_angle.PNG| 200px ]]&lt;br /&gt;
&lt;br /&gt;
Nous avons ensuite réalisé un premier programme afin de lire les données du 10DOF que nous testerons la semaine suivante.&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
&lt;br /&gt;
Nous avons débuté le traitement des données directement sur le MEGA en réalisant de code de récupération de l'angle réalisé par l'accéléromètre.( Dans le code suivant nous avons uniquement l'acquisition des données)&lt;br /&gt;
&lt;br /&gt;
[[Fichier:10dof_code.PNG| 200px ]]&lt;br /&gt;
&lt;br /&gt;
Nous nous sommes rendus compte que les calculs ne sont pas réalisés correctement par le MEGA. En effet la mesure de l'angle n'était pas précis car le MEGA n'a pas assez de puissance de calcul pour faire les différentes divisions.  &lt;br /&gt;
&lt;br /&gt;
[[Fichier:Exempleaccelero.PNG| 100px ]]&lt;br /&gt;
&lt;br /&gt;
Nous avons donc décidé que le MEGA servira uniquement à récupérer les données et à les envoyer via module WIFI. Ce sera donc à l'application Android d'effectuer le traitement des données.&lt;br /&gt;
&lt;br /&gt;
Nous avons ensuite étudié le module WIFI ESP8266 que nous utiliserons, afin de nous faire une idée de son utilisation.&lt;br /&gt;
&lt;br /&gt;
Nous avons également installé les logiciels nécessaires ( Android studio,... )&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
&lt;br /&gt;
Nous nous sommes intéressées  au module wifi, en commençant par lire la fiche technique de l'esp 8266, nous avons également cherché les différents types d'exemples . &lt;br /&gt;
&lt;br /&gt;
Des recherches sur le mode de connexion entre le smartphone et le Mega à travers le module WIFI ont également été effectuer dans le but de se faire une idée, nous hésitons sur l'utilisation de Sockets UDP , ou de réaliser une transmission en TCP .&lt;br /&gt;
&lt;br /&gt;
Le programme réalisée lors de la séance précédente a été testé, notamment les tests de récupération des données de l'accéléromètre 10-DOF sur le Mega.&lt;br /&gt;
&lt;br /&gt;
Le code pour les autres accéléromètres en attendant la livraison de l'ADXL335 a également été entamé.&lt;br /&gt;
&lt;br /&gt;
Nous avons également rencontré un certain nombre de problème :&lt;br /&gt;
&lt;br /&gt;
Afin se connecter en WIFI à partir de n’importe où, nous avons décidé de se connecter premièrement à un réseau standard (point d'accès fourni par le smartphone dans un premier temps) puis de modifier le réseau sur lequel nous sommes connecté à partir du smartphone. Ce dernier enverra le SSID et le mot de passe du nouveau réseau souhaité au module et on  modifiera le paramètre de  cette manière.&lt;br /&gt;
[[Fichier:connection.PNG| 500px ]]&lt;br /&gt;
&lt;br /&gt;
La possibilité et l'utilité de l'ajout de l'acquisition des données du gyroscope pour avoir plus de précision sur l'accéléromètre 10-DOF qui sera sur la tête ( gérer les rotations).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
En parallèle, nous avons également avancé avec la création d'une application android pour la réception et l'affichage de données.&lt;br /&gt;
Nous avons décidé de:&lt;br /&gt;
* faire une page d'accueil dans laquelle le kinésithérapeute devra appuyer sur un bouton lorsqu'il aura bien positionné le patient pour enregistrer la bonne position.&lt;br /&gt;
* à l'appui du bouton, le smartphone va contacter le module WIFI à travers un message broadcast (en utilisant une communication UDP) dans le réseau. &lt;br /&gt;
* Le MODULE WIFI, qui est déjà en attente d'une trame venant du smartphone, reçoit le message broadcast, extrait l'adresse IP du smartphone, puis, lui envoie des données du capteur.&lt;br /&gt;
* le smartphone, à son tour va utiliser ces données pour calculer les angles d'inclinaison sur les différents axes et les afficher. Notons que les premiers angles calculés sont ceux correspondant à la bonne position. &lt;br /&gt;
* A intervalle régulier, le module ESP va envoyer de nouvelles données que le smartphone va traiter et comparer avec les angles de la bonne position et prévenir le patient si la position a changer.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:transmition.PNG| 600px ]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
* Réception du matériel&lt;br /&gt;
&lt;br /&gt;
[[Fichier:ADXL345.PNG| 100px ]]&lt;br /&gt;
&lt;br /&gt;
Nous avons commencé par étudier l'accéléromètre reçu, en effet la référence de ce dernier est ADXL345 et est digital à l’inverse de celui choisi qui était analogique. De ce fait, nous avons modifié une partie du cahier des charges.&lt;br /&gt;
&lt;br /&gt;
Les accéléromètres adxl345 sont alimentés en 3.3V et sont digitaux. Par conséquent, nous n'aurons plus besoin de sortie analogique.  &lt;br /&gt;
&lt;br /&gt;
*fonctionnement : accéléromètres digitaux pouvant fonctionner en SPI comme en I2C et supportant 3.3V. Résolution: 10 bits, régler en mode +/-2g. Donc les valeurs de notre registre de données seront dans la plage [-512 ,512]. Mais puisque nous ne mesurons que la force gravitationnelle, nous aurons des valeurs comprises entre [-256,256] qui est la plage correspondant à -/1g. 1g correspond à la valeur de 9.80m/s2.&lt;br /&gt;
&lt;br /&gt;
*type de données collectées: des entiers de -512 à 512 qu'il faudra transformer de telle sorte à avoir l'inclinaison de l'accéléromètre selon l'axe x, y et z&lt;br /&gt;
&lt;br /&gt;
L'établissement des activités nécessairement et documentation sur le choix des sockets à utiliser pour l'envoi des données a également été entamé.&lt;br /&gt;
&lt;br /&gt;
Coté Smartphone: &lt;br /&gt;
&lt;br /&gt;
*Créations de la page d'accueil et de la page de visualisation des angles d'inclinaisons&lt;br /&gt;
&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
&lt;br /&gt;
Nous avons réalisé l'étude de l'accéléromètre digital, nous devrons nous servir des ports digitaux du MEGA et choisir l’accéléromètre à partir duquel nous récupérons les données grâce à un chip select. Pour cela nous devrons utiliser la bibliothèque SPI.h et brancher le pin CS de l'accéléromètre à des pin digitaux du mega.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Mais les pin de l'accéleromètre n'acceptent que des tensions de 3.3V alors que ceux du Mega fournissent des tensions de 5v. Nous aurons donc besoin d'un mécanisme de régulation des tensions en sortie de Mega.&lt;br /&gt;
&lt;br /&gt;
===Semaine 8===&lt;br /&gt;
Nous avons réalisé une carte électronique grâce au logiciel fritzing pour réaliser l’adaptation de tensions entre l’accéléromètre adxl345 et la carte MEGA. En effet l'accéléromètre supporte des tensions maximales de 3.3V alors que le MEGA donne en sortie 5V.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:carte_elec1.PNG| 400px ]]&lt;br /&gt;
&lt;br /&gt;
Coté Smartphone:&lt;br /&gt;
&lt;br /&gt;
* création de la page d'accueil avec implémentation du code pour la communication UDP entre le smartphone et l'ESP8266.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:page_daccueil.jpg]]&lt;br /&gt;
* Nous rencontrons des problèmes en ce qui concerne la l'implémentation du programme coté ESP.&lt;br /&gt;
&lt;br /&gt;
===Semaine 9===&lt;br /&gt;
&lt;br /&gt;
Nous avons testé la carte électronique faite la semaine précédente. &lt;br /&gt;
&lt;br /&gt;
[[Fichier:carte_elec2.PNG| 200px ]]&lt;br /&gt;
&lt;br /&gt;
Afin de tester la carte, nous avons alimenter les pins d’entrée par des 5v et avons observé la sortie du circuit. Malheureusement, seulement un pin en sortie &lt;br /&gt;
fournissait une tension de 3.3V.&lt;br /&gt;
Elle ne fonctionne pas et nous n'avons pas pu comprendre pourquoi. &lt;br /&gt;
&lt;br /&gt;
Par conséquent, nous avons changé de microcontrôleur. Nous avons reçu un arduino pro mini 3.3V compatible avec nos capteurs ( mais qui ne l'est pas avec le 10DOF ). &lt;br /&gt;
Nous commençons par conséquent à recueillir les données du capteurs. Pour cela, nous avons utilisé une librairie pour les ADXL345.&lt;br /&gt;
La première étape est de sélectionner le chip Select en définissant un ADXL grâce à la fonction suivante:&lt;br /&gt;
[[Fichier:def_adxl.PNG| 200px ]]&lt;br /&gt;
Cette fonction prend en paramètre le pin lié au chip Select de accéléromètre.&lt;br /&gt;
&lt;br /&gt;
Ensuite on récupère les données grâce à la fonction readaccel comme suit:&lt;br /&gt;
[[Fichier:readaccel.PNG| 200px ]]&lt;br /&gt;
La fonction stocke alors les valeurs lues par l'accéléromètre dans x,y et z.&lt;br /&gt;
&lt;br /&gt;
 code :&lt;br /&gt;
 [[Fichier:codemini1.PNG| 400px ]]&lt;br /&gt;
 &lt;br /&gt;
 [[Fichier:codemini2.PNG| 600px ]]&lt;br /&gt;
&lt;br /&gt;
Nous réalisons ensuite le montage suivant de manière à pouvoir lire sur le port série les valeurs .&lt;br /&gt;
&lt;br /&gt;
[[Fichier:montageaccel.PNG| 600px ]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Partie smartphone:&lt;br /&gt;
succès de la connexion au wi-fi partagé d'un smartphone. Coté ESP comme coté smartphone.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:affichage_valeur.jpg | 200px]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 10===&lt;br /&gt;
&lt;br /&gt;
'''Etude de la partie communication entre l'arduino pro mini et l'ESP8266 pour l'envoie des données du capteur'''&lt;br /&gt;
&lt;br /&gt;
Nous avons implémenté le module Wifi de manière à ce que l’on puisse recevoir les données des accélérations reçus par l’arduino mini.7&lt;br /&gt;
&lt;br /&gt;
Pour cela, nous avons utilisée la bibliothèque SoftwareSerial d’arduino et avons défini deux liaisons série (l'une du côté du mini et l’autre du coté esp).Le mini envois un “a” indiquant à l'esp qu'il commence à envoyer une serie de données.Ensuite on ramène les valeurs de l'accéléromètre sur l'échelle de g (gravitation terrestre ) gracz à un produit en croix . Pour finir, nous envoyons les données grâce à un serial write qui écrit sur les pins de l’esp ( pin 14 RX et 12 TX).&lt;br /&gt;
&lt;br /&gt;
Du côté de l’esp, on définit une liaison du nom de swSer au même baudrate que la précédente (9600). On attend la réception de 72 ( l'équivalent de ‘a’ en integer) indiquant que l’on commence à transmettre des données de l'accéléromètre. Une fois ce nombre reçu on incrémente un compteur à chaque réception d’un chiffre et à partir de la valeur de ce compteur nous plaçons la donnée dans la variable qui la définit ( la première donnée est celle de x1 donc si compteur est à 1 on place la valeur lue par swSer.read dans la variable x1 )&lt;br /&gt;
&lt;br /&gt;
===Fichiers rendus===&lt;br /&gt;
&lt;br /&gt;
rapport de projet : [[Fichier:Rapport_Fahem_Diop.pdf]]&lt;br /&gt;
Code de la partie smartphone: [[Fichier:]]&lt;/div&gt;</summary>
		<author><name>Mdiop</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P18&amp;diff=42847</id>
		<title>IMA4 2016/2017 P18</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P18&amp;diff=42847"/>
				<updated>2017-05-20T15:31:07Z</updated>
		
		<summary type="html">&lt;p&gt;Mdiop : /* Semaine 9 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===Présentation générale du projet=== &lt;br /&gt;
&lt;br /&gt;
===Objectif du projet===&lt;br /&gt;
Rééducation de la position de la tête.&lt;br /&gt;
&lt;br /&gt;
===Contexte===&lt;br /&gt;
L’évolution de l'informatique a engendré une modification de la place du salarié dans l'entreprise. Ainsi, nombreux sont ceux qui travaillent dans un bureau face à un ordinateur. De ce fait, il a été remarqué par une association de la santé que les maux de dos sont en majorité dus à une mauvaise hygiène de vie notamment liée à une mauvaise posture au travail.&lt;br /&gt;
 &lt;br /&gt;
C'est après différentes études, notamment un bilan postural montrant où se situe la tête par rapport à une position idéale que l'on a remarqué que ces dernières années, 50% des personnes ayant des maux de dos sont en réalité dûs aux cervicales contre 20 % seulement il y a une dizaine d’années.&lt;br /&gt;
 &lt;br /&gt;
Du constat précédent découle ce projet ayant pour but de faciliter aux kinésithérapeutes la rééducation de la position de la tête des patients se plaignants de leur dos.&lt;br /&gt;
&lt;br /&gt;
=== Description du projet ===&lt;br /&gt;
 &lt;br /&gt;
La rééducation de la posture de la tête chez un kinésithérapeute pourrait être améliorée si le travail pouvait se faire en autonomie.&lt;br /&gt;
 &lt;br /&gt;
Ce projet propose de réaliser un système de suivi de la position de la tête d'un patient en rééducation grâce à un monitoring continu de la position de la tête, ainsi qu'un mécanisme pour aider le patient à reprendre une position correcte. En effet on lancera le système pendant environ 30 min durant lesquelles nous détecterons les variations de position et indiquerons au patient le moment ou sa position n’est plus bonne.&lt;br /&gt;
 &lt;br /&gt;
Ce projet devra ainsi comparer la position actuelle de la tête du patient à une position idéale (celle de la verticale) et lui signaler s’il doit ou non ajuster sa position.&lt;br /&gt;
&lt;br /&gt;
=== Choix techniques : matériel et logiciels ===&lt;br /&gt;
 &lt;br /&gt;
Nous avons choisi d’utiliser des accéléromètres afin de pouvoir récupérer des données décrivant la position de la tête. Les accéléromètres nous permettent de calculer l'angle d'inclinaison à partir de la force gravitationnelle qu'ils peuvent mesurer selon les trois axes. Lorsque la position idéale du patient sera choisie par le médecin, nous pourrons enregistrer cette position en mémorisant l'inclinaison de chaque accéléromètre pour cette position. Ainsi un changement de position sera identifié par une variation des angles d'inclinaison précédemment pris. Nous allons utilisé les accéléromètres analogiques de type adxl335. Une fois que nous aurons à disposition les valeurs de l'accéléromètre et, par conséquent les angles d'inclinaison, nous aurons besoin d'un moyen d'affichage des ces données. Pour ce faire, nous avons opté dans un premier temps pour une affichage sur smartphone. Les données vont être envoyées au smartphone à travers un module WIFI connectés au même réseau que le smartphone.  En récapitulant, nous aurons finalement besoin de:&lt;br /&gt;
* 5 accéléromètres adxl335.&lt;br /&gt;
* un arduino Mega&lt;br /&gt;
* un module WIFI &lt;br /&gt;
* des fils pour la liaison.&lt;br /&gt;
&lt;br /&gt;
===Calendrier prévisionnel===&lt;br /&gt;
&lt;br /&gt;
====Liste des tâches à effectuer====&lt;br /&gt;
Etude et choix des accéléromètres&lt;br /&gt;
*fonctionnement : accéléromètres à sortie analogique. Nous aurons donc besoin de 3 sorties analogiques par capteur (donc 3*5 sorties analogiques)&lt;br /&gt;
&lt;br /&gt;
*type de données collectées: force gravitationnelle selon les trois axes qu'il faudra transformer de telle sorte à avoir l'inclinaison de l'accéléromètre par rapport à l'axe x, y et z&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*mise en œuvre du programme d'acquisition.&lt;br /&gt;
&lt;br /&gt;
Moyen d'affichage des résultats &lt;br /&gt;
&lt;br /&gt;
*si position correcte par rapport à celle idéale ;&lt;br /&gt;
*envoi des résultats sur un smartphone.&lt;br /&gt;
&lt;br /&gt;
Réalisation d'un prototype &lt;br /&gt;
 &lt;br /&gt;
*identification et acquisition de la position idéale à l'aide des accéléromètres placées le long de la colonne vertébrale;&lt;br /&gt;
*notification au patient (à travers le smartphone) lorsqu'une position différente de celle idéale a été détectée.&lt;br /&gt;
&lt;br /&gt;
====Calendrier====&lt;br /&gt;
==tâches à réaliser==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! Avancement !! Commentaires&lt;br /&gt;
|-&lt;br /&gt;
| acquisition des données 10DOF&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| connexion au WIFI (esp9266)&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| connexion à un wifi standard prédéfinit lors de la programmation&lt;br /&gt;
|-&lt;br /&gt;
| pages application smartphone&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
|  &lt;br /&gt;
|-&lt;br /&gt;
| envois et réception de données sur smartphone&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| terminé et testé &lt;br /&gt;
|-&lt;br /&gt;
| acquisition des données de l'accéléromètre avec l'arduino mini&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| donnée récupérer à partir de 2 accéléromètre mais on peut en ajouter plus&lt;br /&gt;
|-&lt;br /&gt;
| liaison série arduino mini et esp8266&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;testé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Communication réalisé mais quelque amélioration à faire, il faut optimiser le code&lt;br /&gt;
|-&lt;br /&gt;
| mise en commun de la partie wifi et acquisition de données&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Inachevé&amp;lt;/font&amp;gt;&lt;br /&gt;
| la mise en commun pose quelque problème notamment la réception de donnée non cohérente par le smartphone&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! Prélude !! Heures S1 !! Heures S2 !! Heures S3 !! Heures S4 !! Heures S5 !! Heures S6 !! Heures S7 !! Heures S8 !! Heures S9 !! Heures S10 + Heures supplémentairements !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Définition cahier des charges &lt;br /&gt;
| 2H&lt;br /&gt;
| &lt;br /&gt;
| 8H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| documentation&lt;br /&gt;
| 2h&lt;br /&gt;
| 4h&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 4h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| liste du matériel &lt;br /&gt;
| &lt;br /&gt;
| 2h&lt;br /&gt;
| 6h&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| étude du module Wi-fi&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 8H&lt;br /&gt;
| 2H&lt;br /&gt;
| 4H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 12h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| étude, programmation, câblage du 10 DOF &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 4H&lt;br /&gt;
| 8H&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Accéléromètre &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| 2H&lt;br /&gt;
| étude 3H &lt;br /&gt;
| &lt;br /&gt;
| schématique 2H &lt;br /&gt;
| 12h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| liaison arduino esp&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 16H&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| étude et programmation arduino mini&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 16H&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| application mobile&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|2H&lt;br /&gt;
|4H&lt;br /&gt;
|4H&lt;br /&gt;
|&lt;br /&gt;
|10h&lt;br /&gt;
|10H&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avancement du Projet==&lt;br /&gt;
&lt;br /&gt;
===Semaine 1===&lt;br /&gt;
&lt;br /&gt;
Nous avons été confronté à différents choix matériel notamment dans la référence des accéléromètres ou encore le moyen de transmission des données. &lt;br /&gt;
&lt;br /&gt;
L'accéléromètre doit être assez précis pour des petites variations de position. Après avoir parcouru les catalogues de fournisseurs nous avons trouvé le ADXL335. &lt;br /&gt;
&lt;br /&gt;
De plus, nous devions choisir le mode de transmission des données vers un smartphone. Nous avions le choix entre un module Bluetooth et un module wifi. Le module Bluetooth est plus rapide que le module bluetooth. Cependant, ce dernier ne consomme pas beaucoup de charge de la batterie du smartphone mais il fonctionne  essentiellement sur de petites distances et avec des données de petite taille. En revanche le module WIFI lui consomme beaucoup plus de batterie mais couvre des distances beaucoup plus grandes ainsi que des tailles de données beaucoup plus importantes.&lt;br /&gt;
&lt;br /&gt;
Finalement, nous avons opté pour le module WIFI pour limiter le moins possible l'utilisateur en ce qui concerne la distance entre les appareils et le volume de données transmis.&lt;br /&gt;
&lt;br /&gt;
*Confirmation de la liste de matériel: &lt;br /&gt;
  *accéléromètre ADXL335&lt;br /&gt;
  *Smartphone sous Android&lt;br /&gt;
  *15 longs fils mâle-femelle, mâle-mâle&lt;br /&gt;
  *Arduino pro -mini&lt;br /&gt;
  *Module WIFI&lt;br /&gt;
&lt;br /&gt;
===Semaine 2===&lt;br /&gt;
&lt;br /&gt;
Réalisation d'un cahier des charges fonctionnelles avec les outils de gestions de projet telle que le FAST, la bete à corne, SADT.&lt;br /&gt;
[https://docs.google.com/document/d/1e6291kst6O6Ic0IWnadg5l10HiiZeqsw72GxfXC7O7U/edit cahier des charges fonctionnels]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:cad1_1.PNG| 900px ]]&lt;br /&gt;
[[Fichier:cad1.PNG| 900px ]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
&lt;br /&gt;
En début de semaine, nous avons reçus un premier capteur, l’accéléromètre 10 DOF, ainsi que l'arduino MEGA qui sera utilisé pour l’acquisition des données. L'accéléromètre 10DOF incorpore un gyroscope et un magnétomètre. Ceux-ci nous permettront d'avoir une meilleure précision des mesures notamment avec la mesure des orientations (vitesses angulaires).&lt;br /&gt;
&lt;br /&gt;
Nous avons ensuite étudié le capteur et réalisé le premier montage en connectant ce capteur de manière à pouvoir lire les données récupérées en direct sur l'ordinateur.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:10dof.PNG| 400px ]]&lt;br /&gt;
&lt;br /&gt;
Nous nous sommes également intéressé au calcule de l'angle à partir de l’accélération. &lt;br /&gt;
Prenons l'exemple de l’accéléromètre penché de la manière suivante.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:exemple5.PNG| 400px ]]&lt;br /&gt;
&lt;br /&gt;
Le triangle G,Gx Gz forme un triangle rectangle, dans notre cas nous avons Gx,Gy et Gz qui sont les valeurs du vecteur gravitationnel G sur les trois axes et nous devons déduire 𝝰 (l’angle que fait Gx avec l’axe x), 𝝋 (l’angle que fait Gy avec l’axe y) et ᴪ (l’angle que fait Gz avec l’axe z). La norme de G est&lt;br /&gt;
[[Fichier:Norme2.PNG| 200px ]]&lt;br /&gt;
On récupére ensuite chaque angle de la manière suivante: &lt;br /&gt;
[[Fichier:Calcule_angle.PNG| 200px ]]&lt;br /&gt;
&lt;br /&gt;
Nous avons ensuite réalisé un premier programme afin de lire les données du 10DOF que nous testerons la semaine suivante.&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
&lt;br /&gt;
Nous avons débuté le traitement des données directement sur le MEGA en réalisant de code de récupération de l'angle réalisé par l'accéléromètre.( Dans le code suivant nous avons uniquement l'acquisition des données)&lt;br /&gt;
&lt;br /&gt;
[[Fichier:10dof_code.PNG| 200px ]]&lt;br /&gt;
&lt;br /&gt;
Nous nous sommes rendus compte que les calculs ne sont pas réalisés correctement par le MEGA. En effet la mesure de l'angle n'était pas précis car le MEGA n'a pas assez de puissance de calcul pour faire les différentes divisions.  &lt;br /&gt;
&lt;br /&gt;
[[Fichier:Exempleaccelero.PNG| 100px ]]&lt;br /&gt;
&lt;br /&gt;
Nous avons donc décidé que le MEGA servira uniquement à récupérer les données et à les envoyer via module WIFI. Ce sera donc à l'application Android d'effectuer le traitement des données.&lt;br /&gt;
&lt;br /&gt;
Nous avons ensuite étudié le module WIFI ESP8266 que nous utiliserons, afin de nous faire une idée de son utilisation.&lt;br /&gt;
&lt;br /&gt;
Nous avons également installé les logiciels nécessaires ( Android studio,... )&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
&lt;br /&gt;
Nous nous sommes intéressées  au module wifi, en commençant par lire la fiche technique de l'esp 8266, nous avons également cherché les différents types d'exemples . &lt;br /&gt;
&lt;br /&gt;
Des recherches sur le mode de connexion entre le smartphone et le Mega à travers le module WIFI ont également été effectuer dans le but de se faire une idée, nous hésitons sur l'utilisation de Sockets UDP , ou de réaliser une transmission en TCP .&lt;br /&gt;
&lt;br /&gt;
Le programme réalisée lors de la séance précédente a été testé, notamment les tests de récupération des données de l'accéléromètre 10-DOF sur le Mega.&lt;br /&gt;
&lt;br /&gt;
Le code pour les autres accéléromètres en attendant la livraison de l'ADXL335 a également été entamé.&lt;br /&gt;
&lt;br /&gt;
Nous avons également rencontré un certain nombre de problème :&lt;br /&gt;
&lt;br /&gt;
Afin se connecter en WIFI à partir de n’importe où, nous avons décidé de se connecter premièrement à un réseau standard (point d'accès fourni par le smartphone dans un premier temps) puis de modifier le réseau sur lequel nous sommes connecté à partir du smartphone. Ce dernier enverra le SSID et le mot de passe du nouveau réseau souhaité au module et on  modifiera le paramètre de  cette manière.&lt;br /&gt;
[[Fichier:connection.PNG| 500px ]]&lt;br /&gt;
&lt;br /&gt;
La possibilité et l'utilité de l'ajout de l'acquisition des données du gyroscope pour avoir plus de précision sur l'accéléromètre 10-DOF qui sera sur la tête ( gérer les rotations).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
En parallèle, nous avons également avancé avec la création d'une application android pour la réception et l'affichage de données.&lt;br /&gt;
Nous avons décidé de:&lt;br /&gt;
* faire une page d'accueil dans laquelle le kinésithérapeute devra appuyer sur un bouton lorsqu'il aura bien positionné le patient pour enregistrer la bonne position.&lt;br /&gt;
* à l'appui du bouton, le smartphone va contacter le module WIFI à travers un message broadcast (en utilisant une communication UDP) dans le réseau. &lt;br /&gt;
* Le MODULE WIFI, qui est déjà en attente d'une trame venant du smartphone, reçoit le message broadcast, extrait l'adresse IP du smartphone, puis, lui envoie des données du capteur.&lt;br /&gt;
* le smartphone, à son tour va utiliser ces données pour calculer les angles d'inclinaison sur les différents axes et les afficher. Notons que les premiers angles calculés sont ceux correspondant à la bonne position. &lt;br /&gt;
* A intervalle régulier, le module ESP va envoyer de nouvelles données que le smartphone va traiter et comparer avec les angles de la bonne position et prévenir le patient si la position a changer.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:transmition.PNG| 600px ]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
* Réception du matériel&lt;br /&gt;
&lt;br /&gt;
[[Fichier:ADXL345.PNG| 100px ]]&lt;br /&gt;
&lt;br /&gt;
Nous avons commencé par étudier l'accéléromètre reçu, en effet la référence de ce dernier est ADXL345 et est digital à l’inverse de celui choisi qui était analogique. De ce fait, nous avons modifié une partie du cahier des charges.&lt;br /&gt;
&lt;br /&gt;
Les accéléromètres adxl345 sont alimentés en 3.3V et sont digitaux. Par conséquent, nous n'aurons plus besoin de sortie analogique.  &lt;br /&gt;
&lt;br /&gt;
*fonctionnement : accéléromètres digitaux pouvant fonctionner en SPI comme en I2C et supportant 3.3V. Résolution: 10 bits, régler en mode +/-2g. Donc les valeurs de notre registre de données seront dans la plage [-512 ,512]. Mais puisque nous ne mesurons que la force gravitationnelle, nous aurons des valeurs comprises entre [-256,256] qui est la plage correspondant à -/1g. 1g correspond à la valeur de 9.80m/s2.&lt;br /&gt;
&lt;br /&gt;
*type de données collectées: des entiers de -512 à 512 qu'il faudra transformer de telle sorte à avoir l'inclinaison de l'accéléromètre selon l'axe x, y et z&lt;br /&gt;
&lt;br /&gt;
L'établissement des activités nécessairement et documentation sur le choix des sockets à utiliser pour l'envoi des données a également été entamé.&lt;br /&gt;
&lt;br /&gt;
Coté Smartphone: &lt;br /&gt;
&lt;br /&gt;
*Créations de la page d'accueil et de la page de visualisation des angles d'inclinaisons&lt;br /&gt;
&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
&lt;br /&gt;
Nous avons réalisé l'étude de l'accéléromètre digital, nous devrons nous servir des ports digitaux du MEGA et choisir l’accéléromètre à partir duquel nous récupérons les données grâce à un chip select. Pour cela nous devrons utiliser la bibliothèque SPI.h et brancher le pin CS de l'accéléromètre à des pin digitaux du mega.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Mais les pin de l'accéleromètre n'acceptent que des tensions de 3.3V alors que ceux du Mega fournissent des tensions de 5v. Nous aurons donc besoin d'un mécanisme de régulation des tensions en sortie de Mega.&lt;br /&gt;
&lt;br /&gt;
===Semaine 8===&lt;br /&gt;
Nous avons réalisé une carte électronique grâce au logiciel fritzing pour réaliser l’adaptation de tensions entre l’accéléromètre adxl345 et la carte MEGA. En effet l'accéléromètre supporte des tensions maximales de 3.3V alors que le MEGA donne en sortie 5V.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:carte_elec1.PNG| 400px ]]&lt;br /&gt;
&lt;br /&gt;
Coté Smartphone:&lt;br /&gt;
&lt;br /&gt;
* création de la page d'accueil avec implémentation du code pour la communication UDP entre le smartphone et l'ESP8266.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:page_daccueil.jpg]]&lt;br /&gt;
* Nous rencontrons des problèmes en ce qui concerne la l'implémentation du programme coté ESP.&lt;br /&gt;
&lt;br /&gt;
===Semaine 9===&lt;br /&gt;
&lt;br /&gt;
Nous avons testé la carte électronique faite la semaine précédente. &lt;br /&gt;
&lt;br /&gt;
[[Fichier:carte_elec2.PNG| 200px ]]&lt;br /&gt;
&lt;br /&gt;
Afin de tester la carte, nous avons alimenter les pins d’entrée par des 5v et avons observé la sortie du circuit. Malheureusement, seulement un pin en sortie &lt;br /&gt;
fournissait une tension de 3.3V.&lt;br /&gt;
Elle ne fonctionne pas et nous n'avons pas pu comprendre pourquoi. &lt;br /&gt;
&lt;br /&gt;
Par conséquent, nous avons changé de microcontrôleur. Nous avons reçu un arduino pro mini 3.3V compatible avec nos capteurs ( mais qui ne l'est pas avec le 10DOF ). &lt;br /&gt;
Nous commençons par conséquent à recueillir les données du capteurs. Pour cela, nous avons utilisé une librairie pour les ADXL345.&lt;br /&gt;
La première étape est de sélectionner le chip Select en définissant un ADXL grâce à la fonction suivante:&lt;br /&gt;
[[Fichier:def_adxl.PNG| 200px ]]&lt;br /&gt;
Cette fonction prend en paramètre le pin lié au chip Select de accéléromètre.&lt;br /&gt;
&lt;br /&gt;
Ensuite on récupère les données grâce à la fonction readaccel comme suit:&lt;br /&gt;
[[Fichier:readaccel.PNG| 200px ]]&lt;br /&gt;
La fonction stocke alors les valeurs lues par l'accéléromètre dans x,y et z.&lt;br /&gt;
&lt;br /&gt;
 code :&lt;br /&gt;
 [[Fichier:codemini1.PNG| 400px ]]&lt;br /&gt;
 &lt;br /&gt;
 [[Fichier:codemini2.PNG| 600px ]]&lt;br /&gt;
&lt;br /&gt;
Nous réalisons ensuite le montage suivant de manière à pouvoir lire sur le port série les valeurs .&lt;br /&gt;
&lt;br /&gt;
[[Fichier:montageaccel.PNG| 600px ]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Partie smartphone:&lt;br /&gt;
succès de la connexion au wi-fi partagé d'un smartphone. Coté ESP comme coté smartphone.[[Fichier:affichage_valeur.jpg | 200px]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 10===&lt;br /&gt;
&lt;br /&gt;
'''Etude de la partie communication entre l'arduino pro mini et l'ESP8266 pour l'envoie des données du capteur'''&lt;br /&gt;
&lt;br /&gt;
Nous avons implémenté le module Wifi de manière à ce que l’on puisse recevoir les données des accélérations reçus par l’arduino mini.7&lt;br /&gt;
&lt;br /&gt;
Pour cela, nous avons utilisée la bibliothèque SoftwareSerial d’arduino et avons défini deux liaisons série (l'une du côté du mini et l’autre du coté esp).Le mini envois un “a” indiquant à l'esp qu'il commence à envoyer une serie de données.Ensuite on ramène les valeurs de l'accéléromètre sur l'échelle de g (gravitation terrestre ) gracz à un produit en croix . Pour finir, nous envoyons les données grâce à un serial write qui écrit sur les pins de l’esp ( pin 14 RX et 12 TX).&lt;br /&gt;
&lt;br /&gt;
Du côté de l’esp, on définit une liaison du nom de swSer au même baudrate que la précédente (9600). On attend la réception de 72 ( l'équivalent de ‘a’ en integer) indiquant que l’on commence à transmettre des données de l'accéléromètre. Une fois ce nombre reçu on incrémente un compteur à chaque réception d’un chiffre et à partir de la valeur de ce compteur nous plaçons la donnée dans la variable qui la définit ( la première donnée est celle de x1 donc si compteur est à 1 on place la valeur lue par swSer.read dans la variable x1 )&lt;br /&gt;
&lt;br /&gt;
===Fichiers rendus===&lt;br /&gt;
&lt;br /&gt;
rapport de projet : [[Fichier:Rapport_Fahem_Diop.pdf]]&lt;br /&gt;
Code de la partie smartphone: [[Fichier:]]&lt;/div&gt;</summary>
		<author><name>Mdiop</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P18&amp;diff=42845</id>
		<title>IMA4 2016/2017 P18</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P18&amp;diff=42845"/>
				<updated>2017-05-20T15:30:24Z</updated>
		
		<summary type="html">&lt;p&gt;Mdiop : /* Semaine 9 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===Présentation générale du projet=== &lt;br /&gt;
&lt;br /&gt;
===Objectif du projet===&lt;br /&gt;
Rééducation de la position de la tête.&lt;br /&gt;
&lt;br /&gt;
===Contexte===&lt;br /&gt;
L’évolution de l'informatique a engendré une modification de la place du salarié dans l'entreprise. Ainsi, nombreux sont ceux qui travaillent dans un bureau face à un ordinateur. De ce fait, il a été remarqué par une association de la santé que les maux de dos sont en majorité dus à une mauvaise hygiène de vie notamment liée à une mauvaise posture au travail.&lt;br /&gt;
 &lt;br /&gt;
C'est après différentes études, notamment un bilan postural montrant où se situe la tête par rapport à une position idéale que l'on a remarqué que ces dernières années, 50% des personnes ayant des maux de dos sont en réalité dûs aux cervicales contre 20 % seulement il y a une dizaine d’années.&lt;br /&gt;
 &lt;br /&gt;
Du constat précédent découle ce projet ayant pour but de faciliter aux kinésithérapeutes la rééducation de la position de la tête des patients se plaignants de leur dos.&lt;br /&gt;
&lt;br /&gt;
=== Description du projet ===&lt;br /&gt;
 &lt;br /&gt;
La rééducation de la posture de la tête chez un kinésithérapeute pourrait être améliorée si le travail pouvait se faire en autonomie.&lt;br /&gt;
 &lt;br /&gt;
Ce projet propose de réaliser un système de suivi de la position de la tête d'un patient en rééducation grâce à un monitoring continu de la position de la tête, ainsi qu'un mécanisme pour aider le patient à reprendre une position correcte. En effet on lancera le système pendant environ 30 min durant lesquelles nous détecterons les variations de position et indiquerons au patient le moment ou sa position n’est plus bonne.&lt;br /&gt;
 &lt;br /&gt;
Ce projet devra ainsi comparer la position actuelle de la tête du patient à une position idéale (celle de la verticale) et lui signaler s’il doit ou non ajuster sa position.&lt;br /&gt;
&lt;br /&gt;
=== Choix techniques : matériel et logiciels ===&lt;br /&gt;
 &lt;br /&gt;
Nous avons choisi d’utiliser des accéléromètres afin de pouvoir récupérer des données décrivant la position de la tête. Les accéléromètres nous permettent de calculer l'angle d'inclinaison à partir de la force gravitationnelle qu'ils peuvent mesurer selon les trois axes. Lorsque la position idéale du patient sera choisie par le médecin, nous pourrons enregistrer cette position en mémorisant l'inclinaison de chaque accéléromètre pour cette position. Ainsi un changement de position sera identifié par une variation des angles d'inclinaison précédemment pris. Nous allons utilisé les accéléromètres analogiques de type adxl335. Une fois que nous aurons à disposition les valeurs de l'accéléromètre et, par conséquent les angles d'inclinaison, nous aurons besoin d'un moyen d'affichage des ces données. Pour ce faire, nous avons opté dans un premier temps pour une affichage sur smartphone. Les données vont être envoyées au smartphone à travers un module WIFI connectés au même réseau que le smartphone.  En récapitulant, nous aurons finalement besoin de:&lt;br /&gt;
* 5 accéléromètres adxl335.&lt;br /&gt;
* un arduino Mega&lt;br /&gt;
* un module WIFI &lt;br /&gt;
* des fils pour la liaison.&lt;br /&gt;
&lt;br /&gt;
===Calendrier prévisionnel===&lt;br /&gt;
&lt;br /&gt;
====Liste des tâches à effectuer====&lt;br /&gt;
Etude et choix des accéléromètres&lt;br /&gt;
*fonctionnement : accéléromètres à sortie analogique. Nous aurons donc besoin de 3 sorties analogiques par capteur (donc 3*5 sorties analogiques)&lt;br /&gt;
&lt;br /&gt;
*type de données collectées: force gravitationnelle selon les trois axes qu'il faudra transformer de telle sorte à avoir l'inclinaison de l'accéléromètre par rapport à l'axe x, y et z&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*mise en œuvre du programme d'acquisition.&lt;br /&gt;
&lt;br /&gt;
Moyen d'affichage des résultats &lt;br /&gt;
&lt;br /&gt;
*si position correcte par rapport à celle idéale ;&lt;br /&gt;
*envoi des résultats sur un smartphone.&lt;br /&gt;
&lt;br /&gt;
Réalisation d'un prototype &lt;br /&gt;
 &lt;br /&gt;
*identification et acquisition de la position idéale à l'aide des accéléromètres placées le long de la colonne vertébrale;&lt;br /&gt;
*notification au patient (à travers le smartphone) lorsqu'une position différente de celle idéale a été détectée.&lt;br /&gt;
&lt;br /&gt;
====Calendrier====&lt;br /&gt;
==tâches à réaliser==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! Avancement !! Commentaires&lt;br /&gt;
|-&lt;br /&gt;
| acquisition des données 10DOF&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| connexion au WIFI (esp9266)&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| connexion à un wifi standard prédéfinit lors de la programmation&lt;br /&gt;
|-&lt;br /&gt;
| pages application smartphone&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
|  &lt;br /&gt;
|-&lt;br /&gt;
| envois et réception de données sur smartphone&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| terminé et testé &lt;br /&gt;
|-&lt;br /&gt;
| acquisition des données de l'accéléromètre avec l'arduino mini&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| donnée récupérer à partir de 2 accéléromètre mais on peut en ajouter plus&lt;br /&gt;
|-&lt;br /&gt;
| liaison série arduino mini et esp8266&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;testé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Communication réalisé mais quelque amélioration à faire, il faut optimiser le code&lt;br /&gt;
|-&lt;br /&gt;
| mise en commun de la partie wifi et acquisition de données&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Inachevé&amp;lt;/font&amp;gt;&lt;br /&gt;
| la mise en commun pose quelque problème notamment la réception de donnée non cohérente par le smartphone&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! Prélude !! Heures S1 !! Heures S2 !! Heures S3 !! Heures S4 !! Heures S5 !! Heures S6 !! Heures S7 !! Heures S8 !! Heures S9 !! Heures S10 + Heures supplémentairements !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Définition cahier des charges &lt;br /&gt;
| 2H&lt;br /&gt;
| &lt;br /&gt;
| 8H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| documentation&lt;br /&gt;
| 2h&lt;br /&gt;
| 4h&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 4h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| liste du matériel &lt;br /&gt;
| &lt;br /&gt;
| 2h&lt;br /&gt;
| 6h&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| étude du module Wi-fi&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 8H&lt;br /&gt;
| 2H&lt;br /&gt;
| 4H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 12h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| étude, programmation, câblage du 10 DOF &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 4H&lt;br /&gt;
| 8H&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Accéléromètre &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| 2H&lt;br /&gt;
| étude 3H &lt;br /&gt;
| &lt;br /&gt;
| schématique 2H &lt;br /&gt;
| 12h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| liaison arduino esp&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 16H&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| étude et programmation arduino mini&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 16H&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| application mobile&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|2H&lt;br /&gt;
|4H&lt;br /&gt;
|4H&lt;br /&gt;
|&lt;br /&gt;
|10h&lt;br /&gt;
|10H&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avancement du Projet==&lt;br /&gt;
&lt;br /&gt;
===Semaine 1===&lt;br /&gt;
&lt;br /&gt;
Nous avons été confronté à différents choix matériel notamment dans la référence des accéléromètres ou encore le moyen de transmission des données. &lt;br /&gt;
&lt;br /&gt;
L'accéléromètre doit être assez précis pour des petites variations de position. Après avoir parcouru les catalogues de fournisseurs nous avons trouvé le ADXL335. &lt;br /&gt;
&lt;br /&gt;
De plus, nous devions choisir le mode de transmission des données vers un smartphone. Nous avions le choix entre un module Bluetooth et un module wifi. Le module Bluetooth est plus rapide que le module bluetooth. Cependant, ce dernier ne consomme pas beaucoup de charge de la batterie du smartphone mais il fonctionne  essentiellement sur de petites distances et avec des données de petite taille. En revanche le module WIFI lui consomme beaucoup plus de batterie mais couvre des distances beaucoup plus grandes ainsi que des tailles de données beaucoup plus importantes.&lt;br /&gt;
&lt;br /&gt;
Finalement, nous avons opté pour le module WIFI pour limiter le moins possible l'utilisateur en ce qui concerne la distance entre les appareils et le volume de données transmis.&lt;br /&gt;
&lt;br /&gt;
*Confirmation de la liste de matériel: &lt;br /&gt;
  *accéléromètre ADXL335&lt;br /&gt;
  *Smartphone sous Android&lt;br /&gt;
  *15 longs fils mâle-femelle, mâle-mâle&lt;br /&gt;
  *Arduino pro -mini&lt;br /&gt;
  *Module WIFI&lt;br /&gt;
&lt;br /&gt;
===Semaine 2===&lt;br /&gt;
&lt;br /&gt;
Réalisation d'un cahier des charges fonctionnelles avec les outils de gestions de projet telle que le FAST, la bete à corne, SADT.&lt;br /&gt;
[https://docs.google.com/document/d/1e6291kst6O6Ic0IWnadg5l10HiiZeqsw72GxfXC7O7U/edit cahier des charges fonctionnels]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:cad1_1.PNG| 900px ]]&lt;br /&gt;
[[Fichier:cad1.PNG| 900px ]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
&lt;br /&gt;
En début de semaine, nous avons reçus un premier capteur, l’accéléromètre 10 DOF, ainsi que l'arduino MEGA qui sera utilisé pour l’acquisition des données. L'accéléromètre 10DOF incorpore un gyroscope et un magnétomètre. Ceux-ci nous permettront d'avoir une meilleure précision des mesures notamment avec la mesure des orientations (vitesses angulaires).&lt;br /&gt;
&lt;br /&gt;
Nous avons ensuite étudié le capteur et réalisé le premier montage en connectant ce capteur de manière à pouvoir lire les données récupérées en direct sur l'ordinateur.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:10dof.PNG| 400px ]]&lt;br /&gt;
&lt;br /&gt;
Nous nous sommes également intéressé au calcule de l'angle à partir de l’accélération. &lt;br /&gt;
Prenons l'exemple de l’accéléromètre penché de la manière suivante.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:exemple5.PNG| 400px ]]&lt;br /&gt;
&lt;br /&gt;
Le triangle G,Gx Gz forme un triangle rectangle, dans notre cas nous avons Gx,Gy et Gz qui sont les valeurs du vecteur gravitationnel G sur les trois axes et nous devons déduire 𝝰 (l’angle que fait Gx avec l’axe x), 𝝋 (l’angle que fait Gy avec l’axe y) et ᴪ (l’angle que fait Gz avec l’axe z). La norme de G est&lt;br /&gt;
[[Fichier:Norme2.PNG| 200px ]]&lt;br /&gt;
On récupére ensuite chaque angle de la manière suivante: &lt;br /&gt;
[[Fichier:Calcule_angle.PNG| 200px ]]&lt;br /&gt;
&lt;br /&gt;
Nous avons ensuite réalisé un premier programme afin de lire les données du 10DOF que nous testerons la semaine suivante.&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
&lt;br /&gt;
Nous avons débuté le traitement des données directement sur le MEGA en réalisant de code de récupération de l'angle réalisé par l'accéléromètre.( Dans le code suivant nous avons uniquement l'acquisition des données)&lt;br /&gt;
&lt;br /&gt;
[[Fichier:10dof_code.PNG| 200px ]]&lt;br /&gt;
&lt;br /&gt;
Nous nous sommes rendus compte que les calculs ne sont pas réalisés correctement par le MEGA. En effet la mesure de l'angle n'était pas précis car le MEGA n'a pas assez de puissance de calcul pour faire les différentes divisions.  &lt;br /&gt;
&lt;br /&gt;
[[Fichier:Exempleaccelero.PNG| 100px ]]&lt;br /&gt;
&lt;br /&gt;
Nous avons donc décidé que le MEGA servira uniquement à récupérer les données et à les envoyer via module WIFI. Ce sera donc à l'application Android d'effectuer le traitement des données.&lt;br /&gt;
&lt;br /&gt;
Nous avons ensuite étudié le module WIFI ESP8266 que nous utiliserons, afin de nous faire une idée de son utilisation.&lt;br /&gt;
&lt;br /&gt;
Nous avons également installé les logiciels nécessaires ( Android studio,... )&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
&lt;br /&gt;
Nous nous sommes intéressées  au module wifi, en commençant par lire la fiche technique de l'esp 8266, nous avons également cherché les différents types d'exemples . &lt;br /&gt;
&lt;br /&gt;
Des recherches sur le mode de connexion entre le smartphone et le Mega à travers le module WIFI ont également été effectuer dans le but de se faire une idée, nous hésitons sur l'utilisation de Sockets UDP , ou de réaliser une transmission en TCP .&lt;br /&gt;
&lt;br /&gt;
Le programme réalisée lors de la séance précédente a été testé, notamment les tests de récupération des données de l'accéléromètre 10-DOF sur le Mega.&lt;br /&gt;
&lt;br /&gt;
Le code pour les autres accéléromètres en attendant la livraison de l'ADXL335 a également été entamé.&lt;br /&gt;
&lt;br /&gt;
Nous avons également rencontré un certain nombre de problème :&lt;br /&gt;
&lt;br /&gt;
Afin se connecter en WIFI à partir de n’importe où, nous avons décidé de se connecter premièrement à un réseau standard (point d'accès fourni par le smartphone dans un premier temps) puis de modifier le réseau sur lequel nous sommes connecté à partir du smartphone. Ce dernier enverra le SSID et le mot de passe du nouveau réseau souhaité au module et on  modifiera le paramètre de  cette manière.&lt;br /&gt;
[[Fichier:connection.PNG| 500px ]]&lt;br /&gt;
&lt;br /&gt;
La possibilité et l'utilité de l'ajout de l'acquisition des données du gyroscope pour avoir plus de précision sur l'accéléromètre 10-DOF qui sera sur la tête ( gérer les rotations).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
En parallèle, nous avons également avancé avec la création d'une application android pour la réception et l'affichage de données.&lt;br /&gt;
Nous avons décidé de:&lt;br /&gt;
* faire une page d'accueil dans laquelle le kinésithérapeute devra appuyer sur un bouton lorsqu'il aura bien positionné le patient pour enregistrer la bonne position.&lt;br /&gt;
* à l'appui du bouton, le smartphone va contacter le module WIFI à travers un message broadcast (en utilisant une communication UDP) dans le réseau. &lt;br /&gt;
* Le MODULE WIFI, qui est déjà en attente d'une trame venant du smartphone, reçoit le message broadcast, extrait l'adresse IP du smartphone, puis, lui envoie des données du capteur.&lt;br /&gt;
* le smartphone, à son tour va utiliser ces données pour calculer les angles d'inclinaison sur les différents axes et les afficher. Notons que les premiers angles calculés sont ceux correspondant à la bonne position. &lt;br /&gt;
* A intervalle régulier, le module ESP va envoyer de nouvelles données que le smartphone va traiter et comparer avec les angles de la bonne position et prévenir le patient si la position a changer.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:transmition.PNG| 600px ]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
* Réception du matériel&lt;br /&gt;
&lt;br /&gt;
[[Fichier:ADXL345.PNG| 100px ]]&lt;br /&gt;
&lt;br /&gt;
Nous avons commencé par étudier l'accéléromètre reçu, en effet la référence de ce dernier est ADXL345 et est digital à l’inverse de celui choisi qui était analogique. De ce fait, nous avons modifié une partie du cahier des charges.&lt;br /&gt;
&lt;br /&gt;
Les accéléromètres adxl345 sont alimentés en 3.3V et sont digitaux. Par conséquent, nous n'aurons plus besoin de sortie analogique.  &lt;br /&gt;
&lt;br /&gt;
*fonctionnement : accéléromètres digitaux pouvant fonctionner en SPI comme en I2C et supportant 3.3V. Résolution: 10 bits, régler en mode +/-2g. Donc les valeurs de notre registre de données seront dans la plage [-512 ,512]. Mais puisque nous ne mesurons que la force gravitationnelle, nous aurons des valeurs comprises entre [-256,256] qui est la plage correspondant à -/1g. 1g correspond à la valeur de 9.80m/s2.&lt;br /&gt;
&lt;br /&gt;
*type de données collectées: des entiers de -512 à 512 qu'il faudra transformer de telle sorte à avoir l'inclinaison de l'accéléromètre selon l'axe x, y et z&lt;br /&gt;
&lt;br /&gt;
L'établissement des activités nécessairement et documentation sur le choix des sockets à utiliser pour l'envoi des données a également été entamé.&lt;br /&gt;
&lt;br /&gt;
Coté Smartphone: &lt;br /&gt;
&lt;br /&gt;
*Créations de la page d'accueil et de la page de visualisation des angles d'inclinaisons&lt;br /&gt;
&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
&lt;br /&gt;
Nous avons réalisé l'étude de l'accéléromètre digital, nous devrons nous servir des ports digitaux du MEGA et choisir l’accéléromètre à partir duquel nous récupérons les données grâce à un chip select. Pour cela nous devrons utiliser la bibliothèque SPI.h et brancher le pin CS de l'accéléromètre à des pin digitaux du mega.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Mais les pin de l'accéleromètre n'acceptent que des tensions de 3.3V alors que ceux du Mega fournissent des tensions de 5v. Nous aurons donc besoin d'un mécanisme de régulation des tensions en sortie de Mega.&lt;br /&gt;
&lt;br /&gt;
===Semaine 8===&lt;br /&gt;
Nous avons réalisé une carte électronique grâce au logiciel fritzing pour réaliser l’adaptation de tensions entre l’accéléromètre adxl345 et la carte MEGA. En effet l'accéléromètre supporte des tensions maximales de 3.3V alors que le MEGA donne en sortie 5V.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:carte_elec1.PNG| 400px ]]&lt;br /&gt;
&lt;br /&gt;
Coté Smartphone:&lt;br /&gt;
&lt;br /&gt;
* création de la page d'accueil avec implémentation du code pour la communication UDP entre le smartphone et l'ESP8266.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:page_daccueil.jpg]]&lt;br /&gt;
* Nous rencontrons des problèmes en ce qui concerne la l'implémentation du programme coté ESP.&lt;br /&gt;
&lt;br /&gt;
===Semaine 9===&lt;br /&gt;
&lt;br /&gt;
Nous avons testé la carte électronique faite la semaine précédente. &lt;br /&gt;
&lt;br /&gt;
[[Fichier:carte_elec2.PNG| 200px ]]&lt;br /&gt;
&lt;br /&gt;
Afin de tester la carte, nous avons alimenter les pins d’entrée par des 5v et avons observé la sortie du circuit. Malheureusement, seulement un pin en sortie &lt;br /&gt;
fournissait une tension de 3.3V.&lt;br /&gt;
Elle ne fonctionne pas et nous n'avons pas pu comprendre pourquoi. &lt;br /&gt;
&lt;br /&gt;
Par conséquent, nous avons changé de microcontrôleur. Nous avons reçu un arduino pro mini 3.3V compatible avec nos capteurs ( mais qui ne l'est pas avec le 10DOF ). &lt;br /&gt;
Nous commençons par conséquent à recueillir les données du capteurs. Pour cela, nous avons utilisé une librairie pour les ADXL345.&lt;br /&gt;
La première étape est de sélectionner le chip Select en définissant un ADXL grâce à la fonction suivante:&lt;br /&gt;
[[Fichier:def_adxl.PNG| 200px ]]&lt;br /&gt;
Cette fonction prend en paramètre le pin lié au chip Select de accéléromètre.&lt;br /&gt;
&lt;br /&gt;
Ensuite on récupère les données grâce à la fonction readaccel comme suit:&lt;br /&gt;
[[Fichier:readaccel.PNG| 200px ]]&lt;br /&gt;
La fonction stocke alors les valeurs lues par l'accéléromètre dans x,y et z.&lt;br /&gt;
&lt;br /&gt;
 code :&lt;br /&gt;
 [[Fichier:codemini1.PNG| 400px ]]&lt;br /&gt;
 &lt;br /&gt;
 [[Fichier:codemini2.PNG| 600px ]]&lt;br /&gt;
&lt;br /&gt;
Nous réalisons ensuite le montage suivant de manière à pouvoir lire sur le port série les valeurs .&lt;br /&gt;
&lt;br /&gt;
[[Fichier:montageaccel.PNG| 600px ]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Partie smartphone:&lt;br /&gt;
succès de la connexion au wi-fi partagé d'un smartphone. Coté ESP comme coté smartphone.[[Fichier:affichage_valeur.jpg | 400px]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 10===&lt;br /&gt;
&lt;br /&gt;
'''Etude de la partie communication entre l'arduino pro mini et l'ESP8266 pour l'envoie des données du capteur'''&lt;br /&gt;
&lt;br /&gt;
Nous avons implémenté le module Wifi de manière à ce que l’on puisse recevoir les données des accélérations reçus par l’arduino mini.7&lt;br /&gt;
&lt;br /&gt;
Pour cela, nous avons utilisée la bibliothèque SoftwareSerial d’arduino et avons défini deux liaisons série (l'une du côté du mini et l’autre du coté esp).Le mini envois un “a” indiquant à l'esp qu'il commence à envoyer une serie de données.Ensuite on ramène les valeurs de l'accéléromètre sur l'échelle de g (gravitation terrestre ) gracz à un produit en croix . Pour finir, nous envoyons les données grâce à un serial write qui écrit sur les pins de l’esp ( pin 14 RX et 12 TX).&lt;br /&gt;
&lt;br /&gt;
Du côté de l’esp, on définit une liaison du nom de swSer au même baudrate que la précédente (9600). On attend la réception de 72 ( l'équivalent de ‘a’ en integer) indiquant que l’on commence à transmettre des données de l'accéléromètre. Une fois ce nombre reçu on incrémente un compteur à chaque réception d’un chiffre et à partir de la valeur de ce compteur nous plaçons la donnée dans la variable qui la définit ( la première donnée est celle de x1 donc si compteur est à 1 on place la valeur lue par swSer.read dans la variable x1 )&lt;br /&gt;
&lt;br /&gt;
===Fichiers rendus===&lt;br /&gt;
&lt;br /&gt;
rapport de projet : [[Fichier:Rapport_Fahem_Diop.pdf]]&lt;br /&gt;
Code de la partie smartphone: [[Fichier:]]&lt;/div&gt;</summary>
		<author><name>Mdiop</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P18&amp;diff=42841</id>
		<title>IMA4 2016/2017 P18</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P18&amp;diff=42841"/>
				<updated>2017-05-20T15:23:57Z</updated>
		
		<summary type="html">&lt;p&gt;Mdiop : /* Semaine 9 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===Présentation générale du projet=== &lt;br /&gt;
&lt;br /&gt;
===Objectif du projet===&lt;br /&gt;
Rééducation de la position de la tête.&lt;br /&gt;
&lt;br /&gt;
===Contexte===&lt;br /&gt;
L’évolution de l'informatique a engendré une modification de la place du salarié dans l'entreprise. Ainsi, nombreux sont ceux qui travaillent dans un bureau face à un ordinateur. De ce fait, il a été remarqué par une association de la santé que les maux de dos sont en majorité dus à une mauvaise hygiène de vie notamment liée à une mauvaise posture au travail.&lt;br /&gt;
 &lt;br /&gt;
C'est après différentes études, notamment un bilan postural montrant où se situe la tête par rapport à une position idéale que l'on a remarqué que ces dernières années, 50% des personnes ayant des maux de dos sont en réalité dûs aux cervicales contre 20 % seulement il y a une dizaine d’années.&lt;br /&gt;
 &lt;br /&gt;
Du constat précédent découle ce projet ayant pour but de faciliter aux kinésithérapeutes la rééducation de la position de la tête des patients se plaignants de leur dos.&lt;br /&gt;
&lt;br /&gt;
=== Description du projet ===&lt;br /&gt;
 &lt;br /&gt;
La rééducation de la posture de la tête chez un kinésithérapeute pourrait être améliorée si le travail pouvait se faire en autonomie.&lt;br /&gt;
 &lt;br /&gt;
Ce projet propose de réaliser un système de suivi de la position de la tête d'un patient en rééducation grâce à un monitoring continu de la position de la tête, ainsi qu'un mécanisme pour aider le patient à reprendre une position correcte. En effet on lancera le système pendant environ 30 min durant lesquelles nous détecterons les variations de position et indiquerons au patient le moment ou sa position n’est plus bonne.&lt;br /&gt;
 &lt;br /&gt;
Ce projet devra ainsi comparer la position actuelle de la tête du patient à une position idéale (celle de la verticale) et lui signaler s’il doit ou non ajuster sa position.&lt;br /&gt;
&lt;br /&gt;
=== Choix techniques : matériel et logiciels ===&lt;br /&gt;
 &lt;br /&gt;
Nous avons choisi d’utiliser des accéléromètres afin de pouvoir récupérer des données décrivant la position de la tête. Les accéléromètres nous permettent de calculer l'angle d'inclinaison à partir de la force gravitationnelle qu'ils peuvent mesurer selon les trois axes. Lorsque la position idéale du patient sera choisie par le médecin, nous pourrons enregistrer cette position en mémorisant l'inclinaison de chaque accéléromètre pour cette position. Ainsi un changement de position sera identifié par une variation des angles d'inclinaison précédemment pris. Nous allons utilisé les accéléromètres analogiques de type adxl335. Une fois que nous aurons à disposition les valeurs de l'accéléromètre et, par conséquent les angles d'inclinaison, nous aurons besoin d'un moyen d'affichage des ces données. Pour ce faire, nous avons opté dans un premier temps pour une affichage sur smartphone. Les données vont être envoyées au smartphone à travers un module WIFI connectés au même réseau que le smartphone.  En récapitulant, nous aurons finalement besoin de:&lt;br /&gt;
* 5 accéléromètres adxl335.&lt;br /&gt;
* un arduino Mega&lt;br /&gt;
* un module WIFI &lt;br /&gt;
* des fils pour la liaison.&lt;br /&gt;
&lt;br /&gt;
===Calendrier prévisionnel===&lt;br /&gt;
&lt;br /&gt;
====Liste des tâches à effectuer====&lt;br /&gt;
Etude et choix des accéléromètres&lt;br /&gt;
*fonctionnement : accéléromètres à sortie analogique. Nous aurons donc besoin de 3 sorties analogiques par capteur (donc 3*5 sorties analogiques)&lt;br /&gt;
&lt;br /&gt;
*type de données collectées: force gravitationnelle selon les trois axes qu'il faudra transformer de telle sorte à avoir l'inclinaison de l'accéléromètre par rapport à l'axe x, y et z&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*mise en œuvre du programme d'acquisition.&lt;br /&gt;
&lt;br /&gt;
Moyen d'affichage des résultats &lt;br /&gt;
&lt;br /&gt;
*si position correcte par rapport à celle idéale ;&lt;br /&gt;
*envoi des résultats sur un smartphone.&lt;br /&gt;
&lt;br /&gt;
Réalisation d'un prototype &lt;br /&gt;
 &lt;br /&gt;
*identification et acquisition de la position idéale à l'aide des accéléromètres placées le long de la colonne vertébrale;&lt;br /&gt;
*notification au patient (à travers le smartphone) lorsqu'une position différente de celle idéale a été détectée.&lt;br /&gt;
&lt;br /&gt;
====Calendrier====&lt;br /&gt;
==tâches à réaliser==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! Avancement !! Commentaires&lt;br /&gt;
|-&lt;br /&gt;
| acquisition des données 10DOF&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| connexion au WIFI (esp9266)&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| connexion à un wifi standard prédéfinit lors de la programmation&lt;br /&gt;
|-&lt;br /&gt;
| pages application smartphone&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
|  &lt;br /&gt;
|-&lt;br /&gt;
| envois et réception de données sur smartphone&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| terminé et testé &lt;br /&gt;
|-&lt;br /&gt;
| acquisition des données de l'accéléromètre avec l'arduino mini&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| donnée récupérer à partir de 2 accéléromètre mais on peut en ajouter plus&lt;br /&gt;
|-&lt;br /&gt;
| liaison série arduino mini et esp8266&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;testé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Communication réalisé mais quelque amélioration à faire, il faut optimiser le code&lt;br /&gt;
|-&lt;br /&gt;
| mise en commun de la partie wifi et acquisition de données&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Inachevé&amp;lt;/font&amp;gt;&lt;br /&gt;
| la mise en commun pose quelque problème notamment la réception de donnée non cohérente par le smartphone&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! Prélude !! Heures S1 !! Heures S2 !! Heures S3 !! Heures S4 !! Heures S5 !! Heures S6 !! Heures S7 !! Heures S8 !! Heures S9 !! Heures S10 + Heures supplémentairements !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Définition cahier des charges &lt;br /&gt;
| 2H&lt;br /&gt;
| &lt;br /&gt;
| 8H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| documentation&lt;br /&gt;
| 2h&lt;br /&gt;
| 4h&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 4h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| liste du matériel &lt;br /&gt;
| &lt;br /&gt;
| 2h&lt;br /&gt;
| 6h&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| étude du module Wi-fi&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 8H&lt;br /&gt;
| 2H&lt;br /&gt;
| 4H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 12h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| étude, programmation, câblage du 10 DOF &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 4H&lt;br /&gt;
| 8H&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Accéléromètre &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| 2H&lt;br /&gt;
| étude 3H &lt;br /&gt;
| &lt;br /&gt;
| schématique 2H &lt;br /&gt;
| 12h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| liaison arduino esp&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 16H&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| étude et programmation arduino mini&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 16H&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| application mobile&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|2H&lt;br /&gt;
|4H&lt;br /&gt;
|4H&lt;br /&gt;
|&lt;br /&gt;
|10h&lt;br /&gt;
|10H&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avancement du Projet==&lt;br /&gt;
&lt;br /&gt;
===Semaine 1===&lt;br /&gt;
&lt;br /&gt;
Nous avons été confronté à différents choix matériel notamment dans la référence des accéléromètres ou encore le moyen de transmission des données. &lt;br /&gt;
&lt;br /&gt;
L'accéléromètre doit être assez précis pour des petites variations de position. Après avoir parcouru les catalogues de fournisseurs nous avons trouvé le ADXL335. &lt;br /&gt;
&lt;br /&gt;
De plus, nous devions choisir le mode de transmission des données vers un smartphone. Nous avions le choix entre un module Bluetooth et un module wifi. Le module Bluetooth est plus rapide que le module bluetooth. Cependant, ce dernier ne consomme pas beaucoup de charge de la batterie du smartphone mais il fonctionne  essentiellement sur de petites distances et avec des données de petite taille. En revanche le module WIFI lui consomme beaucoup plus de batterie mais couvre des distances beaucoup plus grandes ainsi que des tailles de données beaucoup plus importantes.&lt;br /&gt;
&lt;br /&gt;
Finalement, nous avons opté pour le module WIFI pour limiter le moins possible l'utilisateur en ce qui concerne la distance entre les appareils et le volume de données transmis.&lt;br /&gt;
&lt;br /&gt;
*Confirmation de la liste de matériel: &lt;br /&gt;
  *accéléromètre ADXL335&lt;br /&gt;
  *Smartphone sous Android&lt;br /&gt;
  *15 longs fils mâle-femelle, mâle-mâle&lt;br /&gt;
  *Arduino pro -mini&lt;br /&gt;
  *Module WIFI&lt;br /&gt;
&lt;br /&gt;
===Semaine 2===&lt;br /&gt;
&lt;br /&gt;
Réalisation d'un cahier des charges fonctionnelles avec les outils de gestions de projet telle que le FAST, la bete à corne, SADT.&lt;br /&gt;
[https://docs.google.com/document/d/1e6291kst6O6Ic0IWnadg5l10HiiZeqsw72GxfXC7O7U/edit cahier des charges fonctionnels]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:cad1_1.PNG| 900px ]]&lt;br /&gt;
[[Fichier:cad1.PNG| 900px ]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
&lt;br /&gt;
En début de semaine, nous avons reçus un premier capteur, l’accéléromètre 10 DOF, ainsi que l'arduino MEGA qui sera utilisé pour l’acquisition des données. L'accéléromètre 10DOF incorpore un gyroscope et un magnétomètre. Ceux-ci nous permettront d'avoir une meilleure précision des mesures notamment avec la mesure des orientations (vitesses angulaires).&lt;br /&gt;
&lt;br /&gt;
Nous avons ensuite étudié le capteur et réalisé le premier montage en connectant ce capteur de manière à pouvoir lire les données récupérées en direct sur l'ordinateur.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:10dof.PNG| 400px ]]&lt;br /&gt;
&lt;br /&gt;
Nous nous sommes également intéressé au calcule de l'angle à partir de l’accélération. &lt;br /&gt;
Prenons l'exemple de l’accéléromètre penché de la manière suivante.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:exemple5.PNG| 400px ]]&lt;br /&gt;
&lt;br /&gt;
Le triangle G,Gx Gz forme un triangle rectangle, dans notre cas nous avons Gx,Gy et Gz qui sont les valeurs du vecteur gravitationnel G sur les trois axes et nous devons déduire 𝝰 (l’angle que fait Gx avec l’axe x), 𝝋 (l’angle que fait Gy avec l’axe y) et ᴪ (l’angle que fait Gz avec l’axe z). La norme de G est&lt;br /&gt;
[[Fichier:Norme2.PNG| 200px ]]&lt;br /&gt;
On récupére ensuite chaque angle de la manière suivante: &lt;br /&gt;
[[Fichier:Calcule_angle.PNG| 200px ]]&lt;br /&gt;
&lt;br /&gt;
Nous avons ensuite réalisé un premier programme afin de lire les données du 10DOF que nous testerons la semaine suivante.&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
&lt;br /&gt;
Nous avons débuté le traitement des données directement sur le MEGA en réalisant de code de récupération de l'angle réalisé par l'accéléromètre.( Dans le code suivant nous avons uniquement l'acquisition des données)&lt;br /&gt;
&lt;br /&gt;
[[Fichier:10dof_code.PNG| 200px ]]&lt;br /&gt;
&lt;br /&gt;
Nous nous sommes rendus compte que les calculs ne sont pas réalisés correctement par le MEGA. En effet la mesure de l'angle n'était pas précis car le MEGA n'a pas assez de puissance de calcul pour faire les différentes divisions.  &lt;br /&gt;
&lt;br /&gt;
[[Fichier:Exempleaccelero.PNG| 100px ]]&lt;br /&gt;
&lt;br /&gt;
Nous avons donc décidé que le MEGA servira uniquement à récupérer les données et à les envoyer via module WIFI. Ce sera donc à l'application Android d'effectuer le traitement des données.&lt;br /&gt;
&lt;br /&gt;
Nous avons ensuite étudié le module WIFI ESP8266 que nous utiliserons, afin de nous faire une idée de son utilisation.&lt;br /&gt;
&lt;br /&gt;
Nous avons également installé les logiciels nécessaires ( Android studio,... )&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
&lt;br /&gt;
Nous nous sommes intéressées  au module wifi, en commençant par lire la fiche technique de l'esp 8266, nous avons également cherché les différents types d'exemples . &lt;br /&gt;
&lt;br /&gt;
Des recherches sur le mode de connexion entre le smartphone et le Mega à travers le module WIFI ont également été effectuer dans le but de se faire une idée, nous hésitons sur l'utilisation de Sockets UDP , ou de réaliser une transmission en TCP .&lt;br /&gt;
&lt;br /&gt;
Le programme réalisée lors de la séance précédente a été testé, notamment les tests de récupération des données de l'accéléromètre 10-DOF sur le Mega.&lt;br /&gt;
&lt;br /&gt;
Le code pour les autres accéléromètres en attendant la livraison de l'ADXL335 a également été entamé.&lt;br /&gt;
&lt;br /&gt;
Nous avons également rencontré un certain nombre de problème :&lt;br /&gt;
&lt;br /&gt;
Afin se connecter en WIFI à partir de n’importe où, nous avons décidé de se connecter premièrement à un réseau standard (point d'accès fourni par le smartphone dans un premier temps) puis de modifier le réseau sur lequel nous sommes connecté à partir du smartphone. Ce dernier enverra le SSID et le mot de passe du nouveau réseau souhaité au module et on  modifiera le paramètre de  cette manière.&lt;br /&gt;
[[Fichier:connection.PNG| 500px ]]&lt;br /&gt;
&lt;br /&gt;
La possibilité et l'utilité de l'ajout de l'acquisition des données du gyroscope pour avoir plus de précision sur l'accéléromètre 10-DOF qui sera sur la tête ( gérer les rotations).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
En parallèle, nous avons également avancé avec la création d'une application android pour la réception et l'affichage de données.&lt;br /&gt;
Nous avons décidé de:&lt;br /&gt;
* faire une page d'accueil dans laquelle le kinésithérapeute devra appuyer sur un bouton lorsqu'il aura bien positionné le patient pour enregistrer la bonne position.&lt;br /&gt;
* à l'appui du bouton, le smartphone va contacter le module WIFI à travers un message broadcast (en utilisant une communication UDP) dans le réseau. &lt;br /&gt;
* Le MODULE WIFI, qui est déjà en attente d'une trame venant du smartphone, reçoit le message broadcast, extrait l'adresse IP du smartphone, puis, lui envoie des données du capteur.&lt;br /&gt;
* le smartphone, à son tour va utiliser ces données pour calculer les angles d'inclinaison sur les différents axes et les afficher. Notons que les premiers angles calculés sont ceux correspondant à la bonne position. &lt;br /&gt;
* A intervalle régulier, le module ESP va envoyer de nouvelles données que le smartphone va traiter et comparer avec les angles de la bonne position et prévenir le patient si la position a changer.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:transmition.PNG| 600px ]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
* Réception du matériel&lt;br /&gt;
&lt;br /&gt;
[[Fichier:ADXL345.PNG| 100px ]]&lt;br /&gt;
&lt;br /&gt;
Nous avons commencé par étudier l'accéléromètre reçu, en effet la référence de ce dernier est ADXL345 et est digital à l’inverse de celui choisi qui était analogique. De ce fait, nous avons modifié une partie du cahier des charges.&lt;br /&gt;
&lt;br /&gt;
Les accéléromètres adxl345 sont alimentés en 3.3V et sont digitaux. Par conséquent, nous n'aurons plus besoin de sortie analogique.  &lt;br /&gt;
&lt;br /&gt;
*fonctionnement : accéléromètres digitaux pouvant fonctionner en SPI comme en I2C et supportant 3.3V. Résolution: 10 bits, régler en mode +/-2g. Donc les valeurs de notre registre de données seront dans la plage [-512 ,512]. Mais puisque nous ne mesurons que la force gravitationnelle, nous aurons des valeurs comprises entre [-256,256] qui est la plage correspondant à -/1g. 1g correspond à la valeur de 9.80m/s2.&lt;br /&gt;
&lt;br /&gt;
*type de données collectées: des entiers de -512 à 512 qu'il faudra transformer de telle sorte à avoir l'inclinaison de l'accéléromètre selon l'axe x, y et z&lt;br /&gt;
&lt;br /&gt;
L'établissement des activités nécessairement et documentation sur le choix des sockets à utiliser pour l'envoi des données a également été entamé.&lt;br /&gt;
&lt;br /&gt;
Coté Smartphone: &lt;br /&gt;
&lt;br /&gt;
*Créations de la page d'accueil et de la page de visualisation des angles d'inclinaisons&lt;br /&gt;
&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
&lt;br /&gt;
Nous avons réalisé l'étude de l'accéléromètre digital, nous devrons nous servir des ports digitaux du MEGA et choisir l’accéléromètre à partir duquel nous récupérons les données grâce à un chip select. Pour cela nous devrons utiliser la bibliothèque SPI.h et brancher le pin CS de l'accéléromètre à des pin digitaux du mega.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Mais les pin de l'accéleromètre n'acceptent que des tensions de 3.3V alors que ceux du Mega fournissent des tensions de 5v. Nous aurons donc besoin d'un mécanisme de régulation des tensions en sortie de Mega.&lt;br /&gt;
&lt;br /&gt;
===Semaine 8===&lt;br /&gt;
Nous avons réalisé une carte électronique grâce au logiciel fritzing pour réaliser l’adaptation de tensions entre l’accéléromètre adxl345 et la carte MEGA. En effet l'accéléromètre supporte des tensions maximales de 3.3V alors que le MEGA donne en sortie 5V.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:carte_elec1.PNG| 400px ]]&lt;br /&gt;
&lt;br /&gt;
Coté Smartphone:&lt;br /&gt;
&lt;br /&gt;
* création de la page d'accueil avec implémentation du code pour la communication UDP entre le smartphone et l'ESP8266.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:page_daccueil.jpg]]&lt;br /&gt;
* Nous rencontrons des problèmes en ce qui concerne la l'implémentation du programme coté ESP.&lt;br /&gt;
&lt;br /&gt;
===Semaine 9===&lt;br /&gt;
&lt;br /&gt;
Nous avons testé la carte électronique faite la semaine précédente. &lt;br /&gt;
&lt;br /&gt;
[[Fichier:carte_elec2.PNG| 200px ]]&lt;br /&gt;
&lt;br /&gt;
Afin de tester la carte, nous avons alimenter les pins d’entrée par des 5v et avons observé la sortie du circuit. Malheureusement, seulement un pin en sortie &lt;br /&gt;
fournissait une tension de 3.3V.&lt;br /&gt;
Elle ne fonctionne pas et nous n'avons pas pu comprendre pourquoi. &lt;br /&gt;
&lt;br /&gt;
Par conséquent, nous avons changé de microcontrôleur. Nous avons reçu un arduino pro mini 3.3V compatible avec nos capteurs ( mais qui ne l'est pas avec le 10DOF ). &lt;br /&gt;
Nous commençons par conséquent à recueillir les données du capteurs. Pour cela, nous avons utilisé une librairie pour les ADXL345.&lt;br /&gt;
La première étape est de sélectionner le chip Select en définissant un ADXL grâce à la fonction suivante:&lt;br /&gt;
[[Fichier:def_adxl.PNG| 200px ]]&lt;br /&gt;
Cette fonction prend en paramètre le pin lié au chip Select de accéléromètre.&lt;br /&gt;
&lt;br /&gt;
Ensuite on récupère les données grâce à la fonction readaccel comme suit:&lt;br /&gt;
[[Fichier:readaccel.PNG| 200px ]]&lt;br /&gt;
La fonction stocke alors les valeurs lues par l'accéléromètre dans x,y et z.&lt;br /&gt;
&lt;br /&gt;
 code :&lt;br /&gt;
 [[Fichier:codemini1.PNG| 400px ]]&lt;br /&gt;
 &lt;br /&gt;
 [[Fichier:codemini2.PNG| 600px ]]&lt;br /&gt;
&lt;br /&gt;
Nous réalisons ensuite le montage suivant de manière à pouvoir lire sur le port série les valeurs .&lt;br /&gt;
&lt;br /&gt;
[[Fichier:montageaccel.PNG| 600px ]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Partie smartphone:&lt;br /&gt;
succès de la connexion au wi-fi partagé d'un smartphone. Coté ESP comme coté smartphone.[[Fichier:affichage_valeur.jpg]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 10===&lt;br /&gt;
&lt;br /&gt;
'''Etude de la partie communication entre l'arduino pro mini et l'ESP8266 pour l'envoie des données du capteur'''&lt;br /&gt;
&lt;br /&gt;
Nous avons implémenté le module Wifi de manière à ce que l’on puisse recevoir les données des accélérations reçus par l’arduino mini.7&lt;br /&gt;
&lt;br /&gt;
Pour cela, nous avons utilisée la bibliothèque SoftwareSerial d’arduino et avons défini deux liaisons série (l'une du côté du mini et l’autre du coté esp).Le mini envois un “a” indiquant à l'esp qu'il commence à envoyer une serie de données.Ensuite on ramène les valeurs de l'accéléromètre sur l'échelle de g (gravitation terrestre ) gracz à un produit en croix . Pour finir, nous envoyons les données grâce à un serial write qui écrit sur les pins de l’esp ( pin 14 RX et 12 TX).&lt;br /&gt;
&lt;br /&gt;
Du côté de l’esp, on définit une liaison du nom de swSer au même baudrate que la précédente (9600). On attend la réception de 72 ( l'équivalent de ‘a’ en integer) indiquant que l’on commence à transmettre des données de l'accéléromètre. Une fois ce nombre reçu on incrémente un compteur à chaque réception d’un chiffre et à partir de la valeur de ce compteur nous plaçons la donnée dans la variable qui la définit ( la première donnée est celle de x1 donc si compteur est à 1 on place la valeur lue par swSer.read dans la variable x1 )&lt;br /&gt;
&lt;br /&gt;
===Fichiers rendus===&lt;br /&gt;
&lt;br /&gt;
rapport de projet : [[Fichier:Rapport_Fahem_Diop.pdf]]&lt;br /&gt;
Code de la partie smartphone: [[Fichier:]]&lt;/div&gt;</summary>
		<author><name>Mdiop</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Affichage_valeur.jpg&amp;diff=42839</id>
		<title>Fichier:Affichage valeur.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Affichage_valeur.jpg&amp;diff=42839"/>
				<updated>2017-05-20T15:21:57Z</updated>
		
		<summary type="html">&lt;p&gt;Mdiop : Valeurs des angles idéaux et des angles actuels qui traduisent la position du patient&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Valeurs des angles idéaux et des angles actuels qui traduisent la position du patient&lt;/div&gt;</summary>
		<author><name>Mdiop</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Page_daccueil.jpg&amp;diff=42836</id>
		<title>Fichier:Page daccueil.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Page_daccueil.jpg&amp;diff=42836"/>
				<updated>2017-05-20T15:17:23Z</updated>
		
		<summary type="html">&lt;p&gt;Mdiop : a téléversé une nouvelle version de « Fichier:Page daccueil.jpg »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Page d'accueil de l'app pour l'affichage des angles d'inclinaison.&lt;/div&gt;</summary>
		<author><name>Mdiop</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Page_daccueil.jpg&amp;diff=42831</id>
		<title>Fichier:Page daccueil.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Page_daccueil.jpg&amp;diff=42831"/>
				<updated>2017-05-20T15:14:42Z</updated>
		
		<summary type="html">&lt;p&gt;Mdiop : a téléversé une nouvelle version de « Fichier:Page daccueil.jpg »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Page d'accueil de l'app pour l'affichage des angles d'inclinaison.&lt;/div&gt;</summary>
		<author><name>Mdiop</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P18&amp;diff=42828</id>
		<title>IMA4 2016/2017 P18</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P18&amp;diff=42828"/>
				<updated>2017-05-20T15:12:41Z</updated>
		
		<summary type="html">&lt;p&gt;Mdiop : /* Semaine 8 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===Présentation générale du projet=== &lt;br /&gt;
&lt;br /&gt;
===Objectif du projet===&lt;br /&gt;
Rééducation de la position de la tête.&lt;br /&gt;
&lt;br /&gt;
===Contexte===&lt;br /&gt;
L’évolution de l'informatique a engendré une modification de la place du salarié dans l'entreprise. Ainsi, nombreux sont ceux qui travaillent dans un bureau face à un ordinateur. De ce fait, il a été remarqué par une association de la santé que les maux de dos sont en majorité dus à une mauvaise hygiène de vie notamment liée à une mauvaise posture au travail.&lt;br /&gt;
 &lt;br /&gt;
C'est après différentes études, notamment un bilan postural montrant où se situe la tête par rapport à une position idéale que l'on a remarqué que ces dernières années, 50% des personnes ayant des maux de dos sont en réalité dûs aux cervicales contre 20 % seulement il y a une dizaine d’années.&lt;br /&gt;
 &lt;br /&gt;
Du constat précédent découle ce projet ayant pour but de faciliter aux kinésithérapeutes la rééducation de la position de la tête des patients se plaignants de leur dos.&lt;br /&gt;
&lt;br /&gt;
=== Description du projet ===&lt;br /&gt;
 &lt;br /&gt;
La rééducation de la posture de la tête chez un kinésithérapeute pourrait être améliorée si le travail pouvait se faire en autonomie.&lt;br /&gt;
 &lt;br /&gt;
Ce projet propose de réaliser un système de suivi de la position de la tête d'un patient en rééducation grâce à un monitoring continu de la position de la tête, ainsi qu'un mécanisme pour aider le patient à reprendre une position correcte. En effet on lancera le système pendant environ 30 min durant lesquelles nous détecterons les variations de position et indiquerons au patient le moment ou sa position n’est plus bonne.&lt;br /&gt;
 &lt;br /&gt;
Ce projet devra ainsi comparer la position actuelle de la tête du patient à une position idéale (celle de la verticale) et lui signaler s’il doit ou non ajuster sa position.&lt;br /&gt;
&lt;br /&gt;
=== Choix techniques : matériel et logiciels ===&lt;br /&gt;
 &lt;br /&gt;
Nous avons choisi d’utiliser des accéléromètres afin de pouvoir récupérer des données décrivant la position de la tête. Les accéléromètres nous permettent de calculer l'angle d'inclinaison à partir de la force gravitationnelle qu'ils peuvent mesurer selon les trois axes. Lorsque la position idéale du patient sera choisie par le médecin, nous pourrons enregistrer cette position en mémorisant l'inclinaison de chaque accéléromètre pour cette position. Ainsi un changement de position sera identifié par une variation des angles d'inclinaison précédemment pris. Nous allons utilisé les accéléromètres analogiques de type adxl335. Une fois que nous aurons à disposition les valeurs de l'accéléromètre et, par conséquent les angles d'inclinaison, nous aurons besoin d'un moyen d'affichage des ces données. Pour ce faire, nous avons opté dans un premier temps pour une affichage sur smartphone. Les données vont être envoyées au smartphone à travers un module WIFI connectés au même réseau que le smartphone.  En récapitulant, nous aurons finalement besoin de:&lt;br /&gt;
* 5 accéléromètres adxl335.&lt;br /&gt;
* un arduino Mega&lt;br /&gt;
* un module WIFI &lt;br /&gt;
* des fils pour la liaison.&lt;br /&gt;
&lt;br /&gt;
===Calendrier prévisionnel===&lt;br /&gt;
&lt;br /&gt;
====Liste des tâches à effectuer====&lt;br /&gt;
Etude et choix des accéléromètres&lt;br /&gt;
*fonctionnement : accéléromètres à sortie analogique. Nous aurons donc besoin de 3 sorties analogiques par capteur (donc 3*5 sorties analogiques)&lt;br /&gt;
&lt;br /&gt;
*type de données collectées: force gravitationnelle selon les trois axes qu'il faudra transformer de telle sorte à avoir l'inclinaison de l'accéléromètre par rapport à l'axe x, y et z&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*mise en œuvre du programme d'acquisition.&lt;br /&gt;
&lt;br /&gt;
Moyen d'affichage des résultats &lt;br /&gt;
&lt;br /&gt;
*si position correcte par rapport à celle idéale ;&lt;br /&gt;
*envoi des résultats sur un smartphone.&lt;br /&gt;
&lt;br /&gt;
Réalisation d'un prototype &lt;br /&gt;
 &lt;br /&gt;
*identification et acquisition de la position idéale à l'aide des accéléromètres placées le long de la colonne vertébrale;&lt;br /&gt;
*notification au patient (à travers le smartphone) lorsqu'une position différente de celle idéale a été détectée.&lt;br /&gt;
&lt;br /&gt;
====Calendrier====&lt;br /&gt;
==tâches à réaliser==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! Avancement !! Commentaires&lt;br /&gt;
|-&lt;br /&gt;
| acquisition des données 10DOF&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| connexion au WIFI (esp9266)&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| connexion à un wifi standard prédéfinit lors de la programmation&lt;br /&gt;
|-&lt;br /&gt;
| pages application smartphone&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
|  &lt;br /&gt;
|-&lt;br /&gt;
| envois et réception de données sur smartphone&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| terminé et testé &lt;br /&gt;
|-&lt;br /&gt;
| acquisition des données de l'accéléromètre avec l'arduino mini&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| donnée récupérer à partir de 2 accéléromètre mais on peut en ajouter plus&lt;br /&gt;
|-&lt;br /&gt;
| liaison série arduino mini et esp8266&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;testé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Communication réalisé mais quelque amélioration à faire, il faut optimiser le code&lt;br /&gt;
|-&lt;br /&gt;
| mise en commun de la partie wifi et acquisition de données&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Inachevé&amp;lt;/font&amp;gt;&lt;br /&gt;
| la mise en commun pose quelque problème notamment la réception de donnée non cohérente par le smartphone&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! Prélude !! Heures S1 !! Heures S2 !! Heures S3 !! Heures S4 !! Heures S5 !! Heures S6 !! Heures S7 !! Heures S8 !! Heures S9 !! Heures S10 + Heures supplémentairements !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Définition cahier des charges &lt;br /&gt;
| 2H&lt;br /&gt;
| &lt;br /&gt;
| 8H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| documentation&lt;br /&gt;
| 2h&lt;br /&gt;
| 4h&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 4h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| liste du matériel &lt;br /&gt;
| &lt;br /&gt;
| 2h&lt;br /&gt;
| 6h&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| étude du module Wi-fi&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 8H&lt;br /&gt;
| 2H&lt;br /&gt;
| 4H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 12h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| étude, programmation, câblage du 10 DOF &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 4H&lt;br /&gt;
| 8H&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Accéléromètre &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| 2H&lt;br /&gt;
| étude 3H &lt;br /&gt;
| &lt;br /&gt;
| schématique 2H &lt;br /&gt;
| 12h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| liaison arduino esp&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 16H&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| étude et programmation arduino mini&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 16H&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| application mobile&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|2H&lt;br /&gt;
|4H&lt;br /&gt;
|4H&lt;br /&gt;
|&lt;br /&gt;
|10h&lt;br /&gt;
|10H&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avancement du Projet==&lt;br /&gt;
&lt;br /&gt;
===Semaine 1===&lt;br /&gt;
&lt;br /&gt;
Nous avons été confronté à différents choix matériel notamment dans la référence des accéléromètres ou encore le moyen de transmission des données. &lt;br /&gt;
&lt;br /&gt;
L'accéléromètre doit être assez précis pour des petites variations de position. Après avoir parcouru les catalogues de fournisseurs nous avons trouvé le ADXL335. &lt;br /&gt;
&lt;br /&gt;
De plus, nous devions choisir le mode de transmission des données vers un smartphone. Nous avions le choix entre un module Bluetooth et un module wifi. Le module Bluetooth est plus rapide que le module bluetooth. Cependant, ce dernier ne consomme pas beaucoup de charge de la batterie du smartphone mais il fonctionne  essentiellement sur de petites distances et avec des données de petite taille. En revanche le module WIFI lui consomme beaucoup plus de batterie mais couvre des distances beaucoup plus grandes ainsi que des tailles de données beaucoup plus importantes.&lt;br /&gt;
&lt;br /&gt;
Finalement, nous avons opté pour le module WIFI pour limiter le moins possible l'utilisateur en ce qui concerne la distance entre les appareils et le volume de données transmis.&lt;br /&gt;
&lt;br /&gt;
*Confirmation de la liste de matériel: &lt;br /&gt;
  *accéléromètre ADXL335&lt;br /&gt;
  *Smartphone sous Android&lt;br /&gt;
  *15 longs fils mâle-femelle, mâle-mâle&lt;br /&gt;
  *Arduino pro -mini&lt;br /&gt;
  *Module WIFI&lt;br /&gt;
&lt;br /&gt;
===Semaine 2===&lt;br /&gt;
&lt;br /&gt;
Réalisation d'un cahier des charges fonctionnelles avec les outils de gestions de projet telle que le FAST, la bete à corne, SADT.&lt;br /&gt;
[https://docs.google.com/document/d/1e6291kst6O6Ic0IWnadg5l10HiiZeqsw72GxfXC7O7U/edit cahier des charges fonctionnels]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:cad1_1.PNG| 900px ]]&lt;br /&gt;
[[Fichier:cad1.PNG| 900px ]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
&lt;br /&gt;
En début de semaine, nous avons reçus un premier capteur, l’accéléromètre 10 DOF, ainsi que l'arduino MEGA qui sera utilisé pour l’acquisition des données. L'accéléromètre 10DOF incorpore un gyroscope et un magnétomètre. Ceux-ci nous permettront d'avoir une meilleure précision des mesures notamment avec la mesure des orientations (vitesses angulaires).&lt;br /&gt;
&lt;br /&gt;
Nous avons ensuite étudié le capteur et réalisé le premier montage en connectant ce capteur de manière à pouvoir lire les données récupérées en direct sur l'ordinateur.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:10dof.PNG| 400px ]]&lt;br /&gt;
&lt;br /&gt;
Nous nous sommes également intéressé au calcule de l'angle à partir de l’accélération. &lt;br /&gt;
Prenons l'exemple de l’accéléromètre penché de la manière suivante.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:exemple5.PNG| 400px ]]&lt;br /&gt;
&lt;br /&gt;
Le triangle G,Gx Gz forme un triangle rectangle, dans notre cas nous avons Gx,Gy et Gz qui sont les valeurs du vecteur gravitationnel G sur les trois axes et nous devons déduire 𝝰 (l’angle que fait Gx avec l’axe x), 𝝋 (l’angle que fait Gy avec l’axe y) et ᴪ (l’angle que fait Gz avec l’axe z). La norme de G est&lt;br /&gt;
[[Fichier:Norme2.PNG| 200px ]]&lt;br /&gt;
On récupére ensuite chaque angle de la manière suivante: &lt;br /&gt;
[[Fichier:Calcule_angle.PNG| 200px ]]&lt;br /&gt;
&lt;br /&gt;
Nous avons ensuite réalisé un premier programme afin de lire les données du 10DOF que nous testerons la semaine suivante.&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
&lt;br /&gt;
Nous avons débuté le traitement des données directement sur le MEGA en réalisant de code de récupération de l'angle réalisé par l'accéléromètre.( Dans le code suivant nous avons uniquement l'acquisition des données)&lt;br /&gt;
&lt;br /&gt;
[[Fichier:10dof_code.PNG| 200px ]]&lt;br /&gt;
&lt;br /&gt;
Nous nous sommes rendus compte que les calculs ne sont pas réalisés correctement par le MEGA. En effet la mesure de l'angle n'était pas précis car le MEGA n'a pas assez de puissance de calcul pour faire les différentes divisions.  &lt;br /&gt;
&lt;br /&gt;
[[Fichier:Exempleaccelero.PNG| 100px ]]&lt;br /&gt;
&lt;br /&gt;
Nous avons donc décidé que le MEGA servira uniquement à récupérer les données et à les envoyer via module WIFI. Ce sera donc à l'application Android d'effectuer le traitement des données.&lt;br /&gt;
&lt;br /&gt;
Nous avons ensuite étudié le module WIFI ESP8266 que nous utiliserons, afin de nous faire une idée de son utilisation.&lt;br /&gt;
&lt;br /&gt;
Nous avons également installé les logiciels nécessaires ( Android studio,... )&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
&lt;br /&gt;
Nous nous sommes intéressées  au module wifi, en commençant par lire la fiche technique de l'esp 8266, nous avons également cherché les différents types d'exemples . &lt;br /&gt;
&lt;br /&gt;
Des recherches sur le mode de connexion entre le smartphone et le Mega à travers le module WIFI ont également été effectuer dans le but de se faire une idée, nous hésitons sur l'utilisation de Sockets UDP , ou de réaliser une transmission en TCP .&lt;br /&gt;
&lt;br /&gt;
Le programme réalisée lors de la séance précédente a été testé, notamment les tests de récupération des données de l'accéléromètre 10-DOF sur le Mega.&lt;br /&gt;
&lt;br /&gt;
Le code pour les autres accéléromètres en attendant la livraison de l'ADXL335 a également été entamé.&lt;br /&gt;
&lt;br /&gt;
Nous avons également rencontré un certain nombre de problème :&lt;br /&gt;
&lt;br /&gt;
Afin se connecter en WIFI à partir de n’importe où, nous avons décidé de se connecter premièrement à un réseau standard (point d'accès fourni par le smartphone dans un premier temps) puis de modifier le réseau sur lequel nous sommes connecté à partir du smartphone. Ce dernier enverra le SSID et le mot de passe du nouveau réseau souhaité au module et on  modifiera le paramètre de  cette manière.&lt;br /&gt;
[[Fichier:connection.PNG| 500px ]]&lt;br /&gt;
&lt;br /&gt;
La possibilité et l'utilité de l'ajout de l'acquisition des données du gyroscope pour avoir plus de précision sur l'accéléromètre 10-DOF qui sera sur la tête ( gérer les rotations).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
En parallèle, nous avons également avancé avec la création d'une application android pour la réception et l'affichage de données.&lt;br /&gt;
Nous avons décidé de:&lt;br /&gt;
* faire une page d'accueil dans laquelle le kinésithérapeute devra appuyer sur un bouton lorsqu'il aura bien positionné le patient pour enregistrer la bonne position.&lt;br /&gt;
* à l'appui du bouton, le smartphone va contacter le module WIFI à travers un message broadcast (en utilisant une communication UDP) dans le réseau. &lt;br /&gt;
* Le MODULE WIFI, qui est déjà en attente d'une trame venant du smartphone, reçoit le message broadcast, extrait l'adresse IP du smartphone, puis, lui envoie des données du capteur.&lt;br /&gt;
* le smartphone, à son tour va utiliser ces données pour calculer les angles d'inclinaison sur les différents axes et les afficher. Notons que les premiers angles calculés sont ceux correspondant à la bonne position. &lt;br /&gt;
* A intervalle régulier, le module ESP va envoyer de nouvelles données que le smartphone va traiter et comparer avec les angles de la bonne position et prévenir le patient si la position a changer.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:transmition.PNG| 600px ]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
* Réception du matériel&lt;br /&gt;
&lt;br /&gt;
[[Fichier:ADXL345.PNG| 100px ]]&lt;br /&gt;
&lt;br /&gt;
Nous avons commencé par étudier l'accéléromètre reçu, en effet la référence de ce dernier est ADXL345 et est digital à l’inverse de celui choisi qui était analogique. De ce fait, nous avons modifié une partie du cahier des charges.&lt;br /&gt;
&lt;br /&gt;
Les accéléromètres adxl345 sont alimentés en 3.3V et sont digitaux. Par conséquent, nous n'aurons plus besoin de sortie analogique.  &lt;br /&gt;
&lt;br /&gt;
*fonctionnement : accéléromètres digitaux pouvant fonctionner en SPI comme en I2C et supportant 3.3V. Résolution: 10 bits, régler en mode +/-2g. Donc les valeurs de notre registre de données seront dans la plage [-512 ,512]. Mais puisque nous ne mesurons que la force gravitationnelle, nous aurons des valeurs comprises entre [-256,256] qui est la plage correspondant à -/1g. 1g correspond à la valeur de 9.80m/s2.&lt;br /&gt;
&lt;br /&gt;
*type de données collectées: des entiers de -512 à 512 qu'il faudra transformer de telle sorte à avoir l'inclinaison de l'accéléromètre selon l'axe x, y et z&lt;br /&gt;
&lt;br /&gt;
L'établissement des activités nécessairement et documentation sur le choix des sockets à utiliser pour l'envoi des données a également été entamé.&lt;br /&gt;
&lt;br /&gt;
Coté Smartphone: &lt;br /&gt;
&lt;br /&gt;
*Créations de la page d'accueil et de la page de visualisation des angles d'inclinaisons&lt;br /&gt;
&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
&lt;br /&gt;
Nous avons réalisé l'étude de l'accéléromètre digital, nous devrons nous servir des ports digitaux du MEGA et choisir l’accéléromètre à partir duquel nous récupérons les données grâce à un chip select. Pour cela nous devrons utiliser la bibliothèque SPI.h et brancher le pin CS de l'accéléromètre à des pin digitaux du mega.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Mais les pin de l'accéleromètre n'acceptent que des tensions de 3.3V alors que ceux du Mega fournissent des tensions de 5v. Nous aurons donc besoin d'un mécanisme de régulation des tensions en sortie de Mega.&lt;br /&gt;
&lt;br /&gt;
===Semaine 8===&lt;br /&gt;
Nous avons réalisé une carte électronique grâce au logiciel fritzing pour réaliser l’adaptation de tensions entre l’accéléromètre adxl345 et la carte MEGA. En effet l'accéléromètre supporte des tensions maximales de 3.3V alors que le MEGA donne en sortie 5V.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:carte_elec1.PNG| 400px ]]&lt;br /&gt;
&lt;br /&gt;
Coté Smartphone:&lt;br /&gt;
&lt;br /&gt;
* création de la page d'accueil avec implémentation du code pour la communication UDP entre le smartphone et l'ESP8266.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:page_daccueil.jpg]]&lt;br /&gt;
* Nous rencontrons des problèmes en ce qui concerne la l'implémentation du programme coté ESP.&lt;br /&gt;
&lt;br /&gt;
===Semaine 9===&lt;br /&gt;
&lt;br /&gt;
Nous avons testé la carte électronique faite la semaine précédente. &lt;br /&gt;
&lt;br /&gt;
[[Fichier:carte_elec2.PNG| 200px ]]&lt;br /&gt;
&lt;br /&gt;
Afin de tester la carte, nous avons alimenter les pins d’entrée par des 5v et avons observé la sortie du circuit. Malheureusement, seulement un pin en sortie &lt;br /&gt;
fournissait une tension de 3.3V.&lt;br /&gt;
Elle ne fonctionne pas et nous n'avons pas pu comprendre pourquoi. &lt;br /&gt;
&lt;br /&gt;
Par conséquent, nous avons changé de microcontrôleur. Nous avons reçu un arduino pro mini 3.3V compatible avec nos capteurs ( mais qui ne l'est pas avec le 10DOF ). &lt;br /&gt;
Nous commençons par conséquent à recueillir les données du capteurs. Pour cela, nous avons utilisé une librairie pour les ADXL345.&lt;br /&gt;
La première étape est de sélectionner le chip Select en définissant un ADXL grâce à la fonction suivante:&lt;br /&gt;
[[Fichier:def_adxl.PNG| 200px ]]&lt;br /&gt;
Cette fonction prend en paramètre le pin lié au chip Select de accéléromètre.&lt;br /&gt;
&lt;br /&gt;
Ensuite on récupère les données grâce à la fonction readaccel comme suit:&lt;br /&gt;
[[Fichier:readaccel.PNG| 200px ]]&lt;br /&gt;
La fonction stocke alors les valeurs lues par l'accéléromètre dans x,y et z.&lt;br /&gt;
&lt;br /&gt;
 code :&lt;br /&gt;
 [[Fichier:codemini1.PNG| 400px ]]&lt;br /&gt;
 &lt;br /&gt;
 [[Fichier:codemini2.PNG| 600px ]]&lt;br /&gt;
&lt;br /&gt;
Nous réalisons ensuite le montage suivant de manière à pouvoir lire sur le port série les valeurs .&lt;br /&gt;
&lt;br /&gt;
[[Fichier:montageaccel.PNG| 600px ]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Partie smartphone:&lt;br /&gt;
succès de la connexion au wi-fi partagé d'un smartphone. Coté ESP comme coté smartphone.&lt;br /&gt;
&lt;br /&gt;
===Semaine 10===&lt;br /&gt;
&lt;br /&gt;
'''Etude de la partie communication entre l'arduino pro mini et l'ESP8266 pour l'envoie des données du capteur'''&lt;br /&gt;
&lt;br /&gt;
Nous avons implémenté le module Wifi de manière à ce que l’on puisse recevoir les données des accélérations reçus par l’arduino mini.7&lt;br /&gt;
&lt;br /&gt;
Pour cela, nous avons utilisée la bibliothèque SoftwareSerial d’arduino et avons défini deux liaisons série (l'une du côté du mini et l’autre du coté esp).Le mini envois un “a” indiquant à l'esp qu'il commence à envoyer une serie de données.Ensuite on ramène les valeurs de l'accéléromètre sur l'échelle de g (gravitation terrestre ) gracz à un produit en croix . Pour finir, nous envoyons les données grâce à un serial write qui écrit sur les pins de l’esp ( pin 14 RX et 12 TX).&lt;br /&gt;
&lt;br /&gt;
Du côté de l’esp, on définit une liaison du nom de swSer au même baudrate que la précédente (9600). On attend la réception de 72 ( l'équivalent de ‘a’ en integer) indiquant que l’on commence à transmettre des données de l'accéléromètre. Une fois ce nombre reçu on incrémente un compteur à chaque réception d’un chiffre et à partir de la valeur de ce compteur nous plaçons la donnée dans la variable qui la définit ( la première donnée est celle de x1 donc si compteur est à 1 on place la valeur lue par swSer.read dans la variable x1 )&lt;br /&gt;
&lt;br /&gt;
===Fichiers rendus===&lt;br /&gt;
&lt;br /&gt;
rapport de projet : [[Fichier:Rapport_Fahem_Diop.pdf]]&lt;br /&gt;
Code de la partie smartphone: [[Fichier:]]&lt;/div&gt;</summary>
		<author><name>Mdiop</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Page_daccueil.jpg&amp;diff=42827</id>
		<title>Fichier:Page daccueil.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Page_daccueil.jpg&amp;diff=42827"/>
				<updated>2017-05-20T15:10:56Z</updated>
		
		<summary type="html">&lt;p&gt;Mdiop : Page d'accueil de l'app pour l'affichage des angles d'inclinaison.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Page d'accueil de l'app pour l'affichage des angles d'inclinaison.&lt;/div&gt;</summary>
		<author><name>Mdiop</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P18&amp;diff=42822</id>
		<title>IMA4 2016/2017 P18</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P18&amp;diff=42822"/>
				<updated>2017-05-20T15:05:30Z</updated>
		
		<summary type="html">&lt;p&gt;Mdiop : /* Fichiers rendus */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===Présentation générale du projet=== &lt;br /&gt;
&lt;br /&gt;
===Objectif du projet===&lt;br /&gt;
Rééducation de la position de la tête.&lt;br /&gt;
&lt;br /&gt;
===Contexte===&lt;br /&gt;
L’évolution de l'informatique a engendré une modification de la place du salarié dans l'entreprise. Ainsi, nombreux sont ceux qui travaillent dans un bureau face à un ordinateur. De ce fait, il a été remarqué par une association de la santé que les maux de dos sont en majorité dus à une mauvaise hygiène de vie notamment liée à une mauvaise posture au travail.&lt;br /&gt;
 &lt;br /&gt;
C'est après différentes études, notamment un bilan postural montrant où se situe la tête par rapport à une position idéale que l'on a remarqué que ces dernières années, 50% des personnes ayant des maux de dos sont en réalité dûs aux cervicales contre 20 % seulement il y a une dizaine d’années.&lt;br /&gt;
 &lt;br /&gt;
Du constat précédent découle ce projet ayant pour but de faciliter aux kinésithérapeutes la rééducation de la position de la tête des patients se plaignants de leur dos.&lt;br /&gt;
&lt;br /&gt;
=== Description du projet ===&lt;br /&gt;
 &lt;br /&gt;
La rééducation de la posture de la tête chez un kinésithérapeute pourrait être améliorée si le travail pouvait se faire en autonomie.&lt;br /&gt;
 &lt;br /&gt;
Ce projet propose de réaliser un système de suivi de la position de la tête d'un patient en rééducation grâce à un monitoring continu de la position de la tête, ainsi qu'un mécanisme pour aider le patient à reprendre une position correcte. En effet on lancera le système pendant environ 30 min durant lesquelles nous détecterons les variations de position et indiquerons au patient le moment ou sa position n’est plus bonne.&lt;br /&gt;
 &lt;br /&gt;
Ce projet devra ainsi comparer la position actuelle de la tête du patient à une position idéale (celle de la verticale) et lui signaler s’il doit ou non ajuster sa position.&lt;br /&gt;
&lt;br /&gt;
=== Choix techniques : matériel et logiciels ===&lt;br /&gt;
 &lt;br /&gt;
Nous avons choisi d’utiliser des accéléromètres afin de pouvoir récupérer des données décrivant la position de la tête. Les accéléromètres nous permettent de calculer l'angle d'inclinaison à partir de la force gravitationnelle qu'ils peuvent mesurer selon les trois axes. Lorsque la position idéale du patient sera choisie par le médecin, nous pourrons enregistrer cette position en mémorisant l'inclinaison de chaque accéléromètre pour cette position. Ainsi un changement de position sera identifié par une variation des angles d'inclinaison précédemment pris. Nous allons utilisé les accéléromètres analogiques de type adxl335. Une fois que nous aurons à disposition les valeurs de l'accéléromètre et, par conséquent les angles d'inclinaison, nous aurons besoin d'un moyen d'affichage des ces données. Pour ce faire, nous avons opté dans un premier temps pour une affichage sur smartphone. Les données vont être envoyées au smartphone à travers un module WIFI connectés au même réseau que le smartphone.  En récapitulant, nous aurons finalement besoin de:&lt;br /&gt;
* 5 accéléromètres adxl335.&lt;br /&gt;
* un arduino Mega&lt;br /&gt;
* un module WIFI &lt;br /&gt;
* des fils pour la liaison.&lt;br /&gt;
&lt;br /&gt;
===Calendrier prévisionnel===&lt;br /&gt;
&lt;br /&gt;
====Liste des tâches à effectuer====&lt;br /&gt;
Etude et choix des accéléromètres&lt;br /&gt;
*fonctionnement : accéléromètres à sortie analogique. Nous aurons donc besoin de 3 sorties analogiques par capteur (donc 3*5 sorties analogiques)&lt;br /&gt;
&lt;br /&gt;
*type de données collectées: force gravitationnelle selon les trois axes qu'il faudra transformer de telle sorte à avoir l'inclinaison de l'accéléromètre par rapport à l'axe x, y et z&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*mise en œuvre du programme d'acquisition.&lt;br /&gt;
&lt;br /&gt;
Moyen d'affichage des résultats &lt;br /&gt;
&lt;br /&gt;
*si position correcte par rapport à celle idéale ;&lt;br /&gt;
*envoi des résultats sur un smartphone.&lt;br /&gt;
&lt;br /&gt;
Réalisation d'un prototype &lt;br /&gt;
 &lt;br /&gt;
*identification et acquisition de la position idéale à l'aide des accéléromètres placées le long de la colonne vertébrale;&lt;br /&gt;
*notification au patient (à travers le smartphone) lorsqu'une position différente de celle idéale a été détectée.&lt;br /&gt;
&lt;br /&gt;
====Calendrier====&lt;br /&gt;
==tâches à réaliser==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! Avancement !! Commentaires&lt;br /&gt;
|-&lt;br /&gt;
| acquisition des données 10DOF&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| connexion au WIFI (esp9266)&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| connexion à un wifi standard prédéfinit lors de la programmation&lt;br /&gt;
|-&lt;br /&gt;
| pages application smartphone&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
|  &lt;br /&gt;
|-&lt;br /&gt;
| envois et réception de données sur smartphone&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| terminé et testé &lt;br /&gt;
|-&lt;br /&gt;
| acquisition des données de l'accéléromètre avec l'arduino mini&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| donnée récupérer à partir de 2 accéléromètre mais on peut en ajouter plus&lt;br /&gt;
|-&lt;br /&gt;
| liaison série arduino mini et esp8266&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;testé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Communication réalisé mais quelque amélioration à faire, il faut optimiser le code&lt;br /&gt;
|-&lt;br /&gt;
| mise en commun de la partie wifi et acquisition de données&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Inachevé&amp;lt;/font&amp;gt;&lt;br /&gt;
| la mise en commun pose quelque problème notamment la réception de donnée non cohérente par le smartphone&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! Prélude !! Heures S1 !! Heures S2 !! Heures S3 !! Heures S4 !! Heures S5 !! Heures S6 !! Heures S7 !! Heures S8 !! Heures S9 !! Heures S10 + Heures supplémentairements !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Définition cahier des charges &lt;br /&gt;
| 2H&lt;br /&gt;
| &lt;br /&gt;
| 8H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| documentation&lt;br /&gt;
| 2h&lt;br /&gt;
| 4h&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 4h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| liste du matériel &lt;br /&gt;
| &lt;br /&gt;
| 2h&lt;br /&gt;
| 6h&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| étude du module Wi-fi&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 8H&lt;br /&gt;
| 2H&lt;br /&gt;
| 4H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 12h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| étude, programmation, câblage du 10 DOF &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 4H&lt;br /&gt;
| 8H&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Accéléromètre &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| 2H&lt;br /&gt;
| étude 3H &lt;br /&gt;
| &lt;br /&gt;
| schématique 2H &lt;br /&gt;
| 12h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| liaison arduino esp&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 16H&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| étude et programmation arduino mini&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 16H&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| application mobile&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|2H&lt;br /&gt;
|4H&lt;br /&gt;
|4H&lt;br /&gt;
|&lt;br /&gt;
|10h&lt;br /&gt;
|10H&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avancement du Projet==&lt;br /&gt;
&lt;br /&gt;
===Semaine 1===&lt;br /&gt;
&lt;br /&gt;
Nous avons été confronté à différents choix matériel notamment dans la référence des accéléromètres ou encore le moyen de transmission des données. &lt;br /&gt;
&lt;br /&gt;
L'accéléromètre doit être assez précis pour des petites variations de position. Après avoir parcouru les catalogues de fournisseurs nous avons trouvé le ADXL335. &lt;br /&gt;
&lt;br /&gt;
De plus, nous devions choisir le mode de transmission des données vers un smartphone. Nous avions le choix entre un module Bluetooth et un module wifi. Le module Bluetooth est plus rapide que le module bluetooth. Cependant, ce dernier ne consomme pas beaucoup de charge de la batterie du smartphone mais il fonctionne  essentiellement sur de petites distances et avec des données de petite taille. En revanche le module WIFI lui consomme beaucoup plus de batterie mais couvre des distances beaucoup plus grandes ainsi que des tailles de données beaucoup plus importantes.&lt;br /&gt;
&lt;br /&gt;
Finalement, nous avons opté pour le module WIFI pour limiter le moins possible l'utilisateur en ce qui concerne la distance entre les appareils et le volume de données transmis.&lt;br /&gt;
&lt;br /&gt;
*Confirmation de la liste de matériel: &lt;br /&gt;
  *accéléromètre ADXL335&lt;br /&gt;
  *Smartphone sous Android&lt;br /&gt;
  *15 longs fils mâle-femelle, mâle-mâle&lt;br /&gt;
  *Arduino pro -mini&lt;br /&gt;
  *Module WIFI&lt;br /&gt;
&lt;br /&gt;
===Semaine 2===&lt;br /&gt;
&lt;br /&gt;
Réalisation d'un cahier des charges fonctionnelles avec les outils de gestions de projet telle que le FAST, la bete à corne, SADT.&lt;br /&gt;
[https://docs.google.com/document/d/1e6291kst6O6Ic0IWnadg5l10HiiZeqsw72GxfXC7O7U/edit cahier des charges fonctionnels]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:cad1_1.PNG| 900px ]]&lt;br /&gt;
[[Fichier:cad1.PNG| 900px ]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
&lt;br /&gt;
En début de semaine, nous avons reçus un premier capteur, l’accéléromètre 10 DOF, ainsi que l'arduino MEGA qui sera utilisé pour l’acquisition des données. L'accéléromètre 10DOF incorpore un gyroscope et un magnétomètre. Ceux-ci nous permettront d'avoir une meilleure précision des mesures notamment avec la mesure des orientations (vitesses angulaires).&lt;br /&gt;
&lt;br /&gt;
Nous avons ensuite étudié le capteur et réalisé le premier montage en connectant ce capteur de manière à pouvoir lire les données récupérées en direct sur l'ordinateur.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:10dof.PNG| 400px ]]&lt;br /&gt;
&lt;br /&gt;
Nous nous sommes également intéressé au calcule de l'angle à partir de l’accélération. &lt;br /&gt;
Prenons l'exemple de l’accéléromètre penché de la manière suivante.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:exemple5.PNG| 400px ]]&lt;br /&gt;
&lt;br /&gt;
Le triangle G,Gx Gz forme un triangle rectangle, dans notre cas nous avons Gx,Gy et Gz qui sont les valeurs du vecteur gravitationnel G sur les trois axes et nous devons déduire 𝝰 (l’angle que fait Gx avec l’axe x), 𝝋 (l’angle que fait Gy avec l’axe y) et ᴪ (l’angle que fait Gz avec l’axe z). La norme de G est&lt;br /&gt;
[[Fichier:Norme2.PNG| 200px ]]&lt;br /&gt;
On récupére ensuite chaque angle de la manière suivante: &lt;br /&gt;
[[Fichier:Calcule_angle.PNG| 200px ]]&lt;br /&gt;
&lt;br /&gt;
Nous avons ensuite réalisé un premier programme afin de lire les données du 10DOF que nous testerons la semaine suivante.&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
&lt;br /&gt;
Nous avons débuté le traitement des données directement sur le MEGA en réalisant de code de récupération de l'angle réalisé par l'accéléromètre.( Dans le code suivant nous avons uniquement l'acquisition des données)&lt;br /&gt;
&lt;br /&gt;
[[Fichier:10dof_code.PNG| 200px ]]&lt;br /&gt;
&lt;br /&gt;
Nous nous sommes rendus compte que les calculs ne sont pas réalisés correctement par le MEGA. En effet la mesure de l'angle n'était pas précis car le MEGA n'a pas assez de puissance de calcul pour faire les différentes divisions.  &lt;br /&gt;
&lt;br /&gt;
[[Fichier:Exempleaccelero.PNG| 100px ]]&lt;br /&gt;
&lt;br /&gt;
Nous avons donc décidé que le MEGA servira uniquement à récupérer les données et à les envoyer via module WIFI. Ce sera donc à l'application Android d'effectuer le traitement des données.&lt;br /&gt;
&lt;br /&gt;
Nous avons ensuite étudié le module WIFI ESP8266 que nous utiliserons, afin de nous faire une idée de son utilisation.&lt;br /&gt;
&lt;br /&gt;
Nous avons également installé les logiciels nécessaires ( Android studio,... )&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
&lt;br /&gt;
Nous nous sommes intéressées  au module wifi, en commençant par lire la fiche technique de l'esp 8266, nous avons également cherché les différents types d'exemples . &lt;br /&gt;
&lt;br /&gt;
Des recherches sur le mode de connexion entre le smartphone et le Mega à travers le module WIFI ont également été effectuer dans le but de se faire une idée, nous hésitons sur l'utilisation de Sockets UDP , ou de réaliser une transmission en TCP .&lt;br /&gt;
&lt;br /&gt;
Le programme réalisée lors de la séance précédente a été testé, notamment les tests de récupération des données de l'accéléromètre 10-DOF sur le Mega.&lt;br /&gt;
&lt;br /&gt;
Le code pour les autres accéléromètres en attendant la livraison de l'ADXL335 a également été entamé.&lt;br /&gt;
&lt;br /&gt;
Nous avons également rencontré un certain nombre de problème :&lt;br /&gt;
&lt;br /&gt;
Afin se connecter en WIFI à partir de n’importe où, nous avons décidé de se connecter premièrement à un réseau standard (point d'accès fourni par le smartphone dans un premier temps) puis de modifier le réseau sur lequel nous sommes connecté à partir du smartphone. Ce dernier enverra le SSID et le mot de passe du nouveau réseau souhaité au module et on  modifiera le paramètre de  cette manière.&lt;br /&gt;
[[Fichier:connection.PNG| 500px ]]&lt;br /&gt;
&lt;br /&gt;
La possibilité et l'utilité de l'ajout de l'acquisition des données du gyroscope pour avoir plus de précision sur l'accéléromètre 10-DOF qui sera sur la tête ( gérer les rotations).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
En parallèle, nous avons également avancé avec la création d'une application android pour la réception et l'affichage de données.&lt;br /&gt;
Nous avons décidé de:&lt;br /&gt;
* faire une page d'accueil dans laquelle le kinésithérapeute devra appuyer sur un bouton lorsqu'il aura bien positionné le patient pour enregistrer la bonne position.&lt;br /&gt;
* à l'appui du bouton, le smartphone va contacter le module WIFI à travers un message broadcast (en utilisant une communication UDP) dans le réseau. &lt;br /&gt;
* Le MODULE WIFI, qui est déjà en attente d'une trame venant du smartphone, reçoit le message broadcast, extrait l'adresse IP du smartphone, puis, lui envoie des données du capteur.&lt;br /&gt;
* le smartphone, à son tour va utiliser ces données pour calculer les angles d'inclinaison sur les différents axes et les afficher. Notons que les premiers angles calculés sont ceux correspondant à la bonne position. &lt;br /&gt;
* A intervalle régulier, le module ESP va envoyer de nouvelles données que le smartphone va traiter et comparer avec les angles de la bonne position et prévenir le patient si la position a changer.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:transmition.PNG| 600px ]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
* Réception du matériel&lt;br /&gt;
&lt;br /&gt;
[[Fichier:ADXL345.PNG| 100px ]]&lt;br /&gt;
&lt;br /&gt;
Nous avons commencé par étudier l'accéléromètre reçu, en effet la référence de ce dernier est ADXL345 et est digital à l’inverse de celui choisi qui était analogique. De ce fait, nous avons modifié une partie du cahier des charges.&lt;br /&gt;
&lt;br /&gt;
Les accéléromètres adxl345 sont alimentés en 3.3V et sont digitaux. Par conséquent, nous n'aurons plus besoin de sortie analogique.  &lt;br /&gt;
&lt;br /&gt;
*fonctionnement : accéléromètres digitaux pouvant fonctionner en SPI comme en I2C et supportant 3.3V. Résolution: 10 bits, régler en mode +/-2g. Donc les valeurs de notre registre de données seront dans la plage [-512 ,512]. Mais puisque nous ne mesurons que la force gravitationnelle, nous aurons des valeurs comprises entre [-256,256] qui est la plage correspondant à -/1g. 1g correspond à la valeur de 9.80m/s2.&lt;br /&gt;
&lt;br /&gt;
*type de données collectées: des entiers de -512 à 512 qu'il faudra transformer de telle sorte à avoir l'inclinaison de l'accéléromètre selon l'axe x, y et z&lt;br /&gt;
&lt;br /&gt;
L'établissement des activités nécessairement et documentation sur le choix des sockets à utiliser pour l'envoi des données a également été entamé.&lt;br /&gt;
&lt;br /&gt;
Coté Smartphone: &lt;br /&gt;
&lt;br /&gt;
*Créations de la page d'accueil et de la page de visualisation des angles d'inclinaisons&lt;br /&gt;
&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
&lt;br /&gt;
Nous avons réalisé l'étude de l'accéléromètre digital, nous devrons nous servir des ports digitaux du MEGA et choisir l’accéléromètre à partir duquel nous récupérons les données grâce à un chip select. Pour cela nous devrons utiliser la bibliothèque SPI.h et brancher le pin CS de l'accéléromètre à des pin digitaux du mega.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Mais les pin de l'accéleromètre n'acceptent que des tensions de 3.3V alors que ceux du Mega fournissent des tensions de 5v. Nous aurons donc besoin d'un mécanisme de régulation des tensions en sortie de Mega.&lt;br /&gt;
&lt;br /&gt;
===Semaine 8===&lt;br /&gt;
Nous avons réalisé une carte électronique grâce au logiciel fritzing pour réaliser l’adaptation de tensions entre l’accéléromètre adxl345 et la carte MEGA. En effet l'accéléromètre supporte des tensions maximales de 3.3V alors que le MEGA donne en sortie 5V.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:carte_elec1.PNG| 400px ]]&lt;br /&gt;
&lt;br /&gt;
Coté Smartphone:&lt;br /&gt;
&lt;br /&gt;
* création de la page d'accueil avec implémentation du code pour la communication UDP entre le smartphone et l'ESP8266.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Nous rencontrons des problèmes en ce qui concerne la l'implémentation du programme coté ESP.&lt;br /&gt;
&lt;br /&gt;
===Semaine 9===&lt;br /&gt;
&lt;br /&gt;
Nous avons testé la carte électronique faite la semaine précédente. &lt;br /&gt;
&lt;br /&gt;
[[Fichier:carte_elec2.PNG| 200px ]]&lt;br /&gt;
&lt;br /&gt;
Afin de tester la carte, nous avons alimenter les pins d’entrée par des 5v et avons observé la sortie du circuit. Malheureusement, seulement un pin en sortie &lt;br /&gt;
fournissait une tension de 3.3V.&lt;br /&gt;
Elle ne fonctionne pas et nous n'avons pas pu comprendre pourquoi. &lt;br /&gt;
&lt;br /&gt;
Par conséquent, nous avons changé de microcontrôleur. Nous avons reçu un arduino pro mini 3.3V compatible avec nos capteurs ( mais qui ne l'est pas avec le 10DOF ). &lt;br /&gt;
Nous commençons par conséquent à recueillir les données du capteurs. Pour cela, nous avons utilisé une librairie pour les ADXL345.&lt;br /&gt;
La première étape est de sélectionner le chip Select en définissant un ADXL grâce à la fonction suivante:&lt;br /&gt;
[[Fichier:def_adxl.PNG| 200px ]]&lt;br /&gt;
Cette fonction prend en paramètre le pin lié au chip Select de accéléromètre.&lt;br /&gt;
&lt;br /&gt;
Ensuite on récupère les données grâce à la fonction readaccel comme suit:&lt;br /&gt;
[[Fichier:readaccel.PNG| 200px ]]&lt;br /&gt;
La fonction stocke alors les valeurs lues par l'accéléromètre dans x,y et z.&lt;br /&gt;
&lt;br /&gt;
 code :&lt;br /&gt;
 [[Fichier:codemini1.PNG| 400px ]]&lt;br /&gt;
 &lt;br /&gt;
 [[Fichier:codemini2.PNG| 600px ]]&lt;br /&gt;
&lt;br /&gt;
Nous réalisons ensuite le montage suivant de manière à pouvoir lire sur le port série les valeurs .&lt;br /&gt;
&lt;br /&gt;
[[Fichier:montageaccel.PNG| 600px ]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Partie smartphone:&lt;br /&gt;
succès de la connexion au wi-fi partagé d'un smartphone. Coté ESP comme coté smartphone.&lt;br /&gt;
&lt;br /&gt;
===Semaine 10===&lt;br /&gt;
&lt;br /&gt;
'''Etude de la partie communication entre l'arduino pro mini et l'ESP8266 pour l'envoie des données du capteur'''&lt;br /&gt;
&lt;br /&gt;
Nous avons implémenté le module Wifi de manière à ce que l’on puisse recevoir les données des accélérations reçus par l’arduino mini.7&lt;br /&gt;
&lt;br /&gt;
Pour cela, nous avons utilisée la bibliothèque SoftwareSerial d’arduino et avons défini deux liaisons série (l'une du côté du mini et l’autre du coté esp).Le mini envois un “a” indiquant à l'esp qu'il commence à envoyer une serie de données.Ensuite on ramène les valeurs de l'accéléromètre sur l'échelle de g (gravitation terrestre ) gracz à un produit en croix . Pour finir, nous envoyons les données grâce à un serial write qui écrit sur les pins de l’esp ( pin 14 RX et 12 TX).&lt;br /&gt;
&lt;br /&gt;
Du côté de l’esp, on définit une liaison du nom de swSer au même baudrate que la précédente (9600). On attend la réception de 72 ( l'équivalent de ‘a’ en integer) indiquant que l’on commence à transmettre des données de l'accéléromètre. Une fois ce nombre reçu on incrémente un compteur à chaque réception d’un chiffre et à partir de la valeur de ce compteur nous plaçons la donnée dans la variable qui la définit ( la première donnée est celle de x1 donc si compteur est à 1 on place la valeur lue par swSer.read dans la variable x1 )&lt;br /&gt;
&lt;br /&gt;
===Fichiers rendus===&lt;br /&gt;
&lt;br /&gt;
rapport de projet : [[Fichier:Rapport_Fahem_Diop.pdf]]&lt;br /&gt;
Code de la partie smartphone: [[Fichier:]]&lt;/div&gt;</summary>
		<author><name>Mdiop</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P18&amp;diff=42821</id>
		<title>IMA4 2016/2017 P18</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P18&amp;diff=42821"/>
				<updated>2017-05-20T15:05:07Z</updated>
		
		<summary type="html">&lt;p&gt;Mdiop : /* Fichiers rendus */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===Présentation générale du projet=== &lt;br /&gt;
&lt;br /&gt;
===Objectif du projet===&lt;br /&gt;
Rééducation de la position de la tête.&lt;br /&gt;
&lt;br /&gt;
===Contexte===&lt;br /&gt;
L’évolution de l'informatique a engendré une modification de la place du salarié dans l'entreprise. Ainsi, nombreux sont ceux qui travaillent dans un bureau face à un ordinateur. De ce fait, il a été remarqué par une association de la santé que les maux de dos sont en majorité dus à une mauvaise hygiène de vie notamment liée à une mauvaise posture au travail.&lt;br /&gt;
 &lt;br /&gt;
C'est après différentes études, notamment un bilan postural montrant où se situe la tête par rapport à une position idéale que l'on a remarqué que ces dernières années, 50% des personnes ayant des maux de dos sont en réalité dûs aux cervicales contre 20 % seulement il y a une dizaine d’années.&lt;br /&gt;
 &lt;br /&gt;
Du constat précédent découle ce projet ayant pour but de faciliter aux kinésithérapeutes la rééducation de la position de la tête des patients se plaignants de leur dos.&lt;br /&gt;
&lt;br /&gt;
=== Description du projet ===&lt;br /&gt;
 &lt;br /&gt;
La rééducation de la posture de la tête chez un kinésithérapeute pourrait être améliorée si le travail pouvait se faire en autonomie.&lt;br /&gt;
 &lt;br /&gt;
Ce projet propose de réaliser un système de suivi de la position de la tête d'un patient en rééducation grâce à un monitoring continu de la position de la tête, ainsi qu'un mécanisme pour aider le patient à reprendre une position correcte. En effet on lancera le système pendant environ 30 min durant lesquelles nous détecterons les variations de position et indiquerons au patient le moment ou sa position n’est plus bonne.&lt;br /&gt;
 &lt;br /&gt;
Ce projet devra ainsi comparer la position actuelle de la tête du patient à une position idéale (celle de la verticale) et lui signaler s’il doit ou non ajuster sa position.&lt;br /&gt;
&lt;br /&gt;
=== Choix techniques : matériel et logiciels ===&lt;br /&gt;
 &lt;br /&gt;
Nous avons choisi d’utiliser des accéléromètres afin de pouvoir récupérer des données décrivant la position de la tête. Les accéléromètres nous permettent de calculer l'angle d'inclinaison à partir de la force gravitationnelle qu'ils peuvent mesurer selon les trois axes. Lorsque la position idéale du patient sera choisie par le médecin, nous pourrons enregistrer cette position en mémorisant l'inclinaison de chaque accéléromètre pour cette position. Ainsi un changement de position sera identifié par une variation des angles d'inclinaison précédemment pris. Nous allons utilisé les accéléromètres analogiques de type adxl335. Une fois que nous aurons à disposition les valeurs de l'accéléromètre et, par conséquent les angles d'inclinaison, nous aurons besoin d'un moyen d'affichage des ces données. Pour ce faire, nous avons opté dans un premier temps pour une affichage sur smartphone. Les données vont être envoyées au smartphone à travers un module WIFI connectés au même réseau que le smartphone.  En récapitulant, nous aurons finalement besoin de:&lt;br /&gt;
* 5 accéléromètres adxl335.&lt;br /&gt;
* un arduino Mega&lt;br /&gt;
* un module WIFI &lt;br /&gt;
* des fils pour la liaison.&lt;br /&gt;
&lt;br /&gt;
===Calendrier prévisionnel===&lt;br /&gt;
&lt;br /&gt;
====Liste des tâches à effectuer====&lt;br /&gt;
Etude et choix des accéléromètres&lt;br /&gt;
*fonctionnement : accéléromètres à sortie analogique. Nous aurons donc besoin de 3 sorties analogiques par capteur (donc 3*5 sorties analogiques)&lt;br /&gt;
&lt;br /&gt;
*type de données collectées: force gravitationnelle selon les trois axes qu'il faudra transformer de telle sorte à avoir l'inclinaison de l'accéléromètre par rapport à l'axe x, y et z&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*mise en œuvre du programme d'acquisition.&lt;br /&gt;
&lt;br /&gt;
Moyen d'affichage des résultats &lt;br /&gt;
&lt;br /&gt;
*si position correcte par rapport à celle idéale ;&lt;br /&gt;
*envoi des résultats sur un smartphone.&lt;br /&gt;
&lt;br /&gt;
Réalisation d'un prototype &lt;br /&gt;
 &lt;br /&gt;
*identification et acquisition de la position idéale à l'aide des accéléromètres placées le long de la colonne vertébrale;&lt;br /&gt;
*notification au patient (à travers le smartphone) lorsqu'une position différente de celle idéale a été détectée.&lt;br /&gt;
&lt;br /&gt;
====Calendrier====&lt;br /&gt;
==tâches à réaliser==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! Avancement !! Commentaires&lt;br /&gt;
|-&lt;br /&gt;
| acquisition des données 10DOF&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| connexion au WIFI (esp9266)&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| connexion à un wifi standard prédéfinit lors de la programmation&lt;br /&gt;
|-&lt;br /&gt;
| pages application smartphone&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
|  &lt;br /&gt;
|-&lt;br /&gt;
| envois et réception de données sur smartphone&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| terminé et testé &lt;br /&gt;
|-&lt;br /&gt;
| acquisition des données de l'accéléromètre avec l'arduino mini&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| donnée récupérer à partir de 2 accéléromètre mais on peut en ajouter plus&lt;br /&gt;
|-&lt;br /&gt;
| liaison série arduino mini et esp8266&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;testé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Communication réalisé mais quelque amélioration à faire, il faut optimiser le code&lt;br /&gt;
|-&lt;br /&gt;
| mise en commun de la partie wifi et acquisition de données&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Inachevé&amp;lt;/font&amp;gt;&lt;br /&gt;
| la mise en commun pose quelque problème notamment la réception de donnée non cohérente par le smartphone&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! Prélude !! Heures S1 !! Heures S2 !! Heures S3 !! Heures S4 !! Heures S5 !! Heures S6 !! Heures S7 !! Heures S8 !! Heures S9 !! Heures S10 + Heures supplémentairements !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Définition cahier des charges &lt;br /&gt;
| 2H&lt;br /&gt;
| &lt;br /&gt;
| 8H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| documentation&lt;br /&gt;
| 2h&lt;br /&gt;
| 4h&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 4h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| liste du matériel &lt;br /&gt;
| &lt;br /&gt;
| 2h&lt;br /&gt;
| 6h&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| étude du module Wi-fi&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 8H&lt;br /&gt;
| 2H&lt;br /&gt;
| 4H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 12h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| étude, programmation, câblage du 10 DOF &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 4H&lt;br /&gt;
| 8H&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Accéléromètre &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| 2H&lt;br /&gt;
| étude 3H &lt;br /&gt;
| &lt;br /&gt;
| schématique 2H &lt;br /&gt;
| 12h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| liaison arduino esp&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 16H&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| étude et programmation arduino mini&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 16H&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| application mobile&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|2H&lt;br /&gt;
|4H&lt;br /&gt;
|4H&lt;br /&gt;
|&lt;br /&gt;
|10h&lt;br /&gt;
|10H&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avancement du Projet==&lt;br /&gt;
&lt;br /&gt;
===Semaine 1===&lt;br /&gt;
&lt;br /&gt;
Nous avons été confronté à différents choix matériel notamment dans la référence des accéléromètres ou encore le moyen de transmission des données. &lt;br /&gt;
&lt;br /&gt;
L'accéléromètre doit être assez précis pour des petites variations de position. Après avoir parcouru les catalogues de fournisseurs nous avons trouvé le ADXL335. &lt;br /&gt;
&lt;br /&gt;
De plus, nous devions choisir le mode de transmission des données vers un smartphone. Nous avions le choix entre un module Bluetooth et un module wifi. Le module Bluetooth est plus rapide que le module bluetooth. Cependant, ce dernier ne consomme pas beaucoup de charge de la batterie du smartphone mais il fonctionne  essentiellement sur de petites distances et avec des données de petite taille. En revanche le module WIFI lui consomme beaucoup plus de batterie mais couvre des distances beaucoup plus grandes ainsi que des tailles de données beaucoup plus importantes.&lt;br /&gt;
&lt;br /&gt;
Finalement, nous avons opté pour le module WIFI pour limiter le moins possible l'utilisateur en ce qui concerne la distance entre les appareils et le volume de données transmis.&lt;br /&gt;
&lt;br /&gt;
*Confirmation de la liste de matériel: &lt;br /&gt;
  *accéléromètre ADXL335&lt;br /&gt;
  *Smartphone sous Android&lt;br /&gt;
  *15 longs fils mâle-femelle, mâle-mâle&lt;br /&gt;
  *Arduino pro -mini&lt;br /&gt;
  *Module WIFI&lt;br /&gt;
&lt;br /&gt;
===Semaine 2===&lt;br /&gt;
&lt;br /&gt;
Réalisation d'un cahier des charges fonctionnelles avec les outils de gestions de projet telle que le FAST, la bete à corne, SADT.&lt;br /&gt;
[https://docs.google.com/document/d/1e6291kst6O6Ic0IWnadg5l10HiiZeqsw72GxfXC7O7U/edit cahier des charges fonctionnels]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:cad1_1.PNG| 900px ]]&lt;br /&gt;
[[Fichier:cad1.PNG| 900px ]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
&lt;br /&gt;
En début de semaine, nous avons reçus un premier capteur, l’accéléromètre 10 DOF, ainsi que l'arduino MEGA qui sera utilisé pour l’acquisition des données. L'accéléromètre 10DOF incorpore un gyroscope et un magnétomètre. Ceux-ci nous permettront d'avoir une meilleure précision des mesures notamment avec la mesure des orientations (vitesses angulaires).&lt;br /&gt;
&lt;br /&gt;
Nous avons ensuite étudié le capteur et réalisé le premier montage en connectant ce capteur de manière à pouvoir lire les données récupérées en direct sur l'ordinateur.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:10dof.PNG| 400px ]]&lt;br /&gt;
&lt;br /&gt;
Nous nous sommes également intéressé au calcule de l'angle à partir de l’accélération. &lt;br /&gt;
Prenons l'exemple de l’accéléromètre penché de la manière suivante.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:exemple5.PNG| 400px ]]&lt;br /&gt;
&lt;br /&gt;
Le triangle G,Gx Gz forme un triangle rectangle, dans notre cas nous avons Gx,Gy et Gz qui sont les valeurs du vecteur gravitationnel G sur les trois axes et nous devons déduire 𝝰 (l’angle que fait Gx avec l’axe x), 𝝋 (l’angle que fait Gy avec l’axe y) et ᴪ (l’angle que fait Gz avec l’axe z). La norme de G est&lt;br /&gt;
[[Fichier:Norme2.PNG| 200px ]]&lt;br /&gt;
On récupére ensuite chaque angle de la manière suivante: &lt;br /&gt;
[[Fichier:Calcule_angle.PNG| 200px ]]&lt;br /&gt;
&lt;br /&gt;
Nous avons ensuite réalisé un premier programme afin de lire les données du 10DOF que nous testerons la semaine suivante.&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
&lt;br /&gt;
Nous avons débuté le traitement des données directement sur le MEGA en réalisant de code de récupération de l'angle réalisé par l'accéléromètre.( Dans le code suivant nous avons uniquement l'acquisition des données)&lt;br /&gt;
&lt;br /&gt;
[[Fichier:10dof_code.PNG| 200px ]]&lt;br /&gt;
&lt;br /&gt;
Nous nous sommes rendus compte que les calculs ne sont pas réalisés correctement par le MEGA. En effet la mesure de l'angle n'était pas précis car le MEGA n'a pas assez de puissance de calcul pour faire les différentes divisions.  &lt;br /&gt;
&lt;br /&gt;
[[Fichier:Exempleaccelero.PNG| 100px ]]&lt;br /&gt;
&lt;br /&gt;
Nous avons donc décidé que le MEGA servira uniquement à récupérer les données et à les envoyer via module WIFI. Ce sera donc à l'application Android d'effectuer le traitement des données.&lt;br /&gt;
&lt;br /&gt;
Nous avons ensuite étudié le module WIFI ESP8266 que nous utiliserons, afin de nous faire une idée de son utilisation.&lt;br /&gt;
&lt;br /&gt;
Nous avons également installé les logiciels nécessaires ( Android studio,... )&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
&lt;br /&gt;
Nous nous sommes intéressées  au module wifi, en commençant par lire la fiche technique de l'esp 8266, nous avons également cherché les différents types d'exemples . &lt;br /&gt;
&lt;br /&gt;
Des recherches sur le mode de connexion entre le smartphone et le Mega à travers le module WIFI ont également été effectuer dans le but de se faire une idée, nous hésitons sur l'utilisation de Sockets UDP , ou de réaliser une transmission en TCP .&lt;br /&gt;
&lt;br /&gt;
Le programme réalisée lors de la séance précédente a été testé, notamment les tests de récupération des données de l'accéléromètre 10-DOF sur le Mega.&lt;br /&gt;
&lt;br /&gt;
Le code pour les autres accéléromètres en attendant la livraison de l'ADXL335 a également été entamé.&lt;br /&gt;
&lt;br /&gt;
Nous avons également rencontré un certain nombre de problème :&lt;br /&gt;
&lt;br /&gt;
Afin se connecter en WIFI à partir de n’importe où, nous avons décidé de se connecter premièrement à un réseau standard (point d'accès fourni par le smartphone dans un premier temps) puis de modifier le réseau sur lequel nous sommes connecté à partir du smartphone. Ce dernier enverra le SSID et le mot de passe du nouveau réseau souhaité au module et on  modifiera le paramètre de  cette manière.&lt;br /&gt;
[[Fichier:connection.PNG| 500px ]]&lt;br /&gt;
&lt;br /&gt;
La possibilité et l'utilité de l'ajout de l'acquisition des données du gyroscope pour avoir plus de précision sur l'accéléromètre 10-DOF qui sera sur la tête ( gérer les rotations).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
En parallèle, nous avons également avancé avec la création d'une application android pour la réception et l'affichage de données.&lt;br /&gt;
Nous avons décidé de:&lt;br /&gt;
* faire une page d'accueil dans laquelle le kinésithérapeute devra appuyer sur un bouton lorsqu'il aura bien positionné le patient pour enregistrer la bonne position.&lt;br /&gt;
* à l'appui du bouton, le smartphone va contacter le module WIFI à travers un message broadcast (en utilisant une communication UDP) dans le réseau. &lt;br /&gt;
* Le MODULE WIFI, qui est déjà en attente d'une trame venant du smartphone, reçoit le message broadcast, extrait l'adresse IP du smartphone, puis, lui envoie des données du capteur.&lt;br /&gt;
* le smartphone, à son tour va utiliser ces données pour calculer les angles d'inclinaison sur les différents axes et les afficher. Notons que les premiers angles calculés sont ceux correspondant à la bonne position. &lt;br /&gt;
* A intervalle régulier, le module ESP va envoyer de nouvelles données que le smartphone va traiter et comparer avec les angles de la bonne position et prévenir le patient si la position a changer.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:transmition.PNG| 600px ]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
* Réception du matériel&lt;br /&gt;
&lt;br /&gt;
[[Fichier:ADXL345.PNG| 100px ]]&lt;br /&gt;
&lt;br /&gt;
Nous avons commencé par étudier l'accéléromètre reçu, en effet la référence de ce dernier est ADXL345 et est digital à l’inverse de celui choisi qui était analogique. De ce fait, nous avons modifié une partie du cahier des charges.&lt;br /&gt;
&lt;br /&gt;
Les accéléromètres adxl345 sont alimentés en 3.3V et sont digitaux. Par conséquent, nous n'aurons plus besoin de sortie analogique.  &lt;br /&gt;
&lt;br /&gt;
*fonctionnement : accéléromètres digitaux pouvant fonctionner en SPI comme en I2C et supportant 3.3V. Résolution: 10 bits, régler en mode +/-2g. Donc les valeurs de notre registre de données seront dans la plage [-512 ,512]. Mais puisque nous ne mesurons que la force gravitationnelle, nous aurons des valeurs comprises entre [-256,256] qui est la plage correspondant à -/1g. 1g correspond à la valeur de 9.80m/s2.&lt;br /&gt;
&lt;br /&gt;
*type de données collectées: des entiers de -512 à 512 qu'il faudra transformer de telle sorte à avoir l'inclinaison de l'accéléromètre selon l'axe x, y et z&lt;br /&gt;
&lt;br /&gt;
L'établissement des activités nécessairement et documentation sur le choix des sockets à utiliser pour l'envoi des données a également été entamé.&lt;br /&gt;
&lt;br /&gt;
Coté Smartphone: &lt;br /&gt;
&lt;br /&gt;
*Créations de la page d'accueil et de la page de visualisation des angles d'inclinaisons&lt;br /&gt;
&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
&lt;br /&gt;
Nous avons réalisé l'étude de l'accéléromètre digital, nous devrons nous servir des ports digitaux du MEGA et choisir l’accéléromètre à partir duquel nous récupérons les données grâce à un chip select. Pour cela nous devrons utiliser la bibliothèque SPI.h et brancher le pin CS de l'accéléromètre à des pin digitaux du mega.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Mais les pin de l'accéleromètre n'acceptent que des tensions de 3.3V alors que ceux du Mega fournissent des tensions de 5v. Nous aurons donc besoin d'un mécanisme de régulation des tensions en sortie de Mega.&lt;br /&gt;
&lt;br /&gt;
===Semaine 8===&lt;br /&gt;
Nous avons réalisé une carte électronique grâce au logiciel fritzing pour réaliser l’adaptation de tensions entre l’accéléromètre adxl345 et la carte MEGA. En effet l'accéléromètre supporte des tensions maximales de 3.3V alors que le MEGA donne en sortie 5V.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:carte_elec1.PNG| 400px ]]&lt;br /&gt;
&lt;br /&gt;
Coté Smartphone:&lt;br /&gt;
&lt;br /&gt;
* création de la page d'accueil avec implémentation du code pour la communication UDP entre le smartphone et l'ESP8266.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Nous rencontrons des problèmes en ce qui concerne la l'implémentation du programme coté ESP.&lt;br /&gt;
&lt;br /&gt;
===Semaine 9===&lt;br /&gt;
&lt;br /&gt;
Nous avons testé la carte électronique faite la semaine précédente. &lt;br /&gt;
&lt;br /&gt;
[[Fichier:carte_elec2.PNG| 200px ]]&lt;br /&gt;
&lt;br /&gt;
Afin de tester la carte, nous avons alimenter les pins d’entrée par des 5v et avons observé la sortie du circuit. Malheureusement, seulement un pin en sortie &lt;br /&gt;
fournissait une tension de 3.3V.&lt;br /&gt;
Elle ne fonctionne pas et nous n'avons pas pu comprendre pourquoi. &lt;br /&gt;
&lt;br /&gt;
Par conséquent, nous avons changé de microcontrôleur. Nous avons reçu un arduino pro mini 3.3V compatible avec nos capteurs ( mais qui ne l'est pas avec le 10DOF ). &lt;br /&gt;
Nous commençons par conséquent à recueillir les données du capteurs. Pour cela, nous avons utilisé une librairie pour les ADXL345.&lt;br /&gt;
La première étape est de sélectionner le chip Select en définissant un ADXL grâce à la fonction suivante:&lt;br /&gt;
[[Fichier:def_adxl.PNG| 200px ]]&lt;br /&gt;
Cette fonction prend en paramètre le pin lié au chip Select de accéléromètre.&lt;br /&gt;
&lt;br /&gt;
Ensuite on récupère les données grâce à la fonction readaccel comme suit:&lt;br /&gt;
[[Fichier:readaccel.PNG| 200px ]]&lt;br /&gt;
La fonction stocke alors les valeurs lues par l'accéléromètre dans x,y et z.&lt;br /&gt;
&lt;br /&gt;
 code :&lt;br /&gt;
 [[Fichier:codemini1.PNG| 400px ]]&lt;br /&gt;
 &lt;br /&gt;
 [[Fichier:codemini2.PNG| 600px ]]&lt;br /&gt;
&lt;br /&gt;
Nous réalisons ensuite le montage suivant de manière à pouvoir lire sur le port série les valeurs .&lt;br /&gt;
&lt;br /&gt;
[[Fichier:montageaccel.PNG| 600px ]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Partie smartphone:&lt;br /&gt;
succès de la connexion au wi-fi partagé d'un smartphone. Coté ESP comme coté smartphone.&lt;br /&gt;
&lt;br /&gt;
===Semaine 10===&lt;br /&gt;
&lt;br /&gt;
'''Etude de la partie communication entre l'arduino pro mini et l'ESP8266 pour l'envoie des données du capteur'''&lt;br /&gt;
&lt;br /&gt;
Nous avons implémenté le module Wifi de manière à ce que l’on puisse recevoir les données des accélérations reçus par l’arduino mini.7&lt;br /&gt;
&lt;br /&gt;
Pour cela, nous avons utilisée la bibliothèque SoftwareSerial d’arduino et avons défini deux liaisons série (l'une du côté du mini et l’autre du coté esp).Le mini envois un “a” indiquant à l'esp qu'il commence à envoyer une serie de données.Ensuite on ramène les valeurs de l'accéléromètre sur l'échelle de g (gravitation terrestre ) gracz à un produit en croix . Pour finir, nous envoyons les données grâce à un serial write qui écrit sur les pins de l’esp ( pin 14 RX et 12 TX).&lt;br /&gt;
&lt;br /&gt;
Du côté de l’esp, on définit une liaison du nom de swSer au même baudrate que la précédente (9600). On attend la réception de 72 ( l'équivalent de ‘a’ en integer) indiquant que l’on commence à transmettre des données de l'accéléromètre. Une fois ce nombre reçu on incrémente un compteur à chaque réception d’un chiffre et à partir de la valeur de ce compteur nous plaçons la donnée dans la variable qui la définit ( la première donnée est celle de x1 donc si compteur est à 1 on place la valeur lue par swSer.read dans la variable x1 )&lt;br /&gt;
&lt;br /&gt;
===Fichiers rendus===&lt;br /&gt;
&lt;br /&gt;
rapport de projet : [[Fichier:Rapport_Fahem_Diop.pdf]]&lt;br /&gt;
Code de la partie smartphone: [[Fichier:Exemple.jpg]]&lt;/div&gt;</summary>
		<author><name>Mdiop</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P18&amp;diff=42815</id>
		<title>IMA4 2016/2017 P18</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P18&amp;diff=42815"/>
				<updated>2017-05-20T14:57:22Z</updated>
		
		<summary type="html">&lt;p&gt;Mdiop : /* Semaine 8 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===Présentation générale du projet=== &lt;br /&gt;
&lt;br /&gt;
===Objectif du projet===&lt;br /&gt;
Rééducation de la position de la tête.&lt;br /&gt;
&lt;br /&gt;
===Contexte===&lt;br /&gt;
L’évolution de l'informatique a engendré une modification de la place du salarié dans l'entreprise. Ainsi, nombreux sont ceux qui travaillent dans un bureau face à un ordinateur. De ce fait, il a été remarqué par une association de la santé que les maux de dos sont en majorité dus à une mauvaise hygiène de vie notamment liée à une mauvaise posture au travail.&lt;br /&gt;
 &lt;br /&gt;
C'est après différentes études, notamment un bilan postural montrant où se situe la tête par rapport à une position idéale que l'on a remarqué que ces dernières années, 50% des personnes ayant des maux de dos sont en réalité dûs aux cervicales contre 20 % seulement il y a une dizaine d’années.&lt;br /&gt;
 &lt;br /&gt;
Du constat précédent découle ce projet ayant pour but de faciliter aux kinésithérapeutes la rééducation de la position de la tête des patients se plaignants de leur dos.&lt;br /&gt;
&lt;br /&gt;
=== Description du projet ===&lt;br /&gt;
 &lt;br /&gt;
La rééducation de la posture de la tête chez un kinésithérapeute pourrait être améliorée si le travail pouvait se faire en autonomie.&lt;br /&gt;
 &lt;br /&gt;
Ce projet propose de réaliser un système de suivi de la position de la tête d'un patient en rééducation grâce à un monitoring continu de la position de la tête, ainsi qu'un mécanisme pour aider le patient à reprendre une position correcte. En effet on lancera le système pendant environ 30 min durant lesquelles nous détecterons les variations de position et indiquerons au patient le moment ou sa position n’est plus bonne.&lt;br /&gt;
 &lt;br /&gt;
Ce projet devra ainsi comparer la position actuelle de la tête du patient à une position idéale (celle de la verticale) et lui signaler s’il doit ou non ajuster sa position.&lt;br /&gt;
&lt;br /&gt;
=== Choix techniques : matériel et logiciels ===&lt;br /&gt;
 &lt;br /&gt;
Nous avons choisi d’utiliser des accéléromètres afin de pouvoir récupérer des données décrivant la position de la tête. Les accéléromètres nous permettent de calculer l'angle d'inclinaison à partir de la force gravitationnelle qu'ils peuvent mesurer selon les trois axes. Lorsque la position idéale du patient sera choisie par le médecin, nous pourrons enregistrer cette position en mémorisant l'inclinaison de chaque accéléromètre pour cette position. Ainsi un changement de position sera identifié par une variation des angles d'inclinaison précédemment pris. Nous allons utilisé les accéléromètres analogiques de type adxl335. Une fois que nous aurons à disposition les valeurs de l'accéléromètre et, par conséquent les angles d'inclinaison, nous aurons besoin d'un moyen d'affichage des ces données. Pour ce faire, nous avons opté dans un premier temps pour une affichage sur smartphone. Les données vont être envoyées au smartphone à travers un module WIFI connectés au même réseau que le smartphone.  En récapitulant, nous aurons finalement besoin de:&lt;br /&gt;
* 5 accéléromètres adxl335.&lt;br /&gt;
* un arduino Mega&lt;br /&gt;
* un module WIFI &lt;br /&gt;
* des fils pour la liaison.&lt;br /&gt;
&lt;br /&gt;
===Calendrier prévisionnel===&lt;br /&gt;
&lt;br /&gt;
====Liste des tâches à effectuer====&lt;br /&gt;
Etude et choix des accéléromètres&lt;br /&gt;
*fonctionnement : accéléromètres à sortie analogique. Nous aurons donc besoin de 3 sorties analogiques par capteur (donc 3*5 sorties analogiques)&lt;br /&gt;
&lt;br /&gt;
*type de données collectées: force gravitationnelle selon les trois axes qu'il faudra transformer de telle sorte à avoir l'inclinaison de l'accéléromètre par rapport à l'axe x, y et z&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*mise en œuvre du programme d'acquisition.&lt;br /&gt;
&lt;br /&gt;
Moyen d'affichage des résultats &lt;br /&gt;
&lt;br /&gt;
*si position correcte par rapport à celle idéale ;&lt;br /&gt;
*envoi des résultats sur un smartphone.&lt;br /&gt;
&lt;br /&gt;
Réalisation d'un prototype &lt;br /&gt;
 &lt;br /&gt;
*identification et acquisition de la position idéale à l'aide des accéléromètres placées le long de la colonne vertébrale;&lt;br /&gt;
*notification au patient (à travers le smartphone) lorsqu'une position différente de celle idéale a été détectée.&lt;br /&gt;
&lt;br /&gt;
====Calendrier====&lt;br /&gt;
==tâches à réaliser==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! Avancement !! Commentaires&lt;br /&gt;
|-&lt;br /&gt;
| acquisition des données 10DOF&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| connexion au WIFI (esp9266)&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| connexion à un wifi standard prédéfinit lors de la programmation&lt;br /&gt;
|-&lt;br /&gt;
| pages application smartphone&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
|  &lt;br /&gt;
|-&lt;br /&gt;
| envois et réception de données sur smartphone&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| terminé et testé &lt;br /&gt;
|-&lt;br /&gt;
| acquisition des données de l'accéléromètre avec l'arduino mini&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| donnée récupérer à partir de 2 accéléromètre mais on peut en ajouter plus&lt;br /&gt;
|-&lt;br /&gt;
| liaison série arduino mini et esp8266&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;testé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Communication réalisé mais quelque amélioration à faire, il faut optimiser le code&lt;br /&gt;
|-&lt;br /&gt;
| mise en commun de la partie wifi et acquisition de données&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Inachevé&amp;lt;/font&amp;gt;&lt;br /&gt;
| la mise en commun pose quelque problème notamment la réception de donnée non cohérente par le smartphone&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! Prélude !! Heures S1 !! Heures S2 !! Heures S3 !! Heures S4 !! Heures S5 !! Heures S6 !! Heures S7 !! Heures S8 !! Heures S9 !! Heures S10 + Heures supplémentairements !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Définition cahier des charges &lt;br /&gt;
| 2H&lt;br /&gt;
| &lt;br /&gt;
| 8H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| documentation&lt;br /&gt;
| 2h&lt;br /&gt;
| 4h&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 4h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| liste du matériel &lt;br /&gt;
| &lt;br /&gt;
| 2h&lt;br /&gt;
| 6h&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| étude du module Wi-fi&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 8H&lt;br /&gt;
| 2H&lt;br /&gt;
| 4H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 12h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| étude, programmation, câblage du 10 DOF &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 4H&lt;br /&gt;
| 8H&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Accéléromètre &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| 2H&lt;br /&gt;
| étude 3H &lt;br /&gt;
| &lt;br /&gt;
| schématique 2H &lt;br /&gt;
| 12h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| liaison arduino esp&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 16H&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| étude et programmation arduino mini&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 16H&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| application mobile&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|2H&lt;br /&gt;
|4H&lt;br /&gt;
|4H&lt;br /&gt;
|&lt;br /&gt;
|10h&lt;br /&gt;
|10H&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avancement du Projet==&lt;br /&gt;
&lt;br /&gt;
===Semaine 1===&lt;br /&gt;
&lt;br /&gt;
Nous avons été confronté à différents choix matériel notamment dans la référence des accéléromètres ou encore le moyen de transmission des données. &lt;br /&gt;
&lt;br /&gt;
L'accéléromètre doit être assez précis pour des petites variations de position. Après avoir parcouru les catalogues de fournisseurs nous avons trouvé le ADXL335. &lt;br /&gt;
&lt;br /&gt;
De plus, nous devions choisir le mode de transmission des données vers un smartphone. Nous avions le choix entre un module Bluetooth et un module wifi. Le module Bluetooth est plus rapide que le module bluetooth. Cependant, ce dernier ne consomme pas beaucoup de charge de la batterie du smartphone mais il fonctionne  essentiellement sur de petites distances et avec des données de petite taille. En revanche le module WIFI lui consomme beaucoup plus de batterie mais couvre des distances beaucoup plus grandes ainsi que des tailles de données beaucoup plus importantes.&lt;br /&gt;
&lt;br /&gt;
Finalement, nous avons opté pour le module WIFI pour limiter le moins possible l'utilisateur en ce qui concerne la distance entre les appareils et le volume de données transmis.&lt;br /&gt;
&lt;br /&gt;
*Confirmation de la liste de matériel: &lt;br /&gt;
  *accéléromètre ADXL335&lt;br /&gt;
  *Smartphone sous Android&lt;br /&gt;
  *15 longs fils mâle-femelle, mâle-mâle&lt;br /&gt;
  *Arduino pro -mini&lt;br /&gt;
  *Module WIFI&lt;br /&gt;
&lt;br /&gt;
===Semaine 2===&lt;br /&gt;
&lt;br /&gt;
Réalisation d'un cahier des charges fonctionnelles avec les outils de gestions de projet telle que le FAST, la bete à corne, SADT.&lt;br /&gt;
[https://docs.google.com/document/d/1e6291kst6O6Ic0IWnadg5l10HiiZeqsw72GxfXC7O7U/edit cahier des charges fonctionnels]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:cad1_1.PNG| 900px ]]&lt;br /&gt;
[[Fichier:cad1.PNG| 900px ]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
&lt;br /&gt;
En début de semaine, nous avons reçus un premier capteur, l’accéléromètre 10 DOF, ainsi que l'arduino MEGA qui sera utilisé pour l’acquisition des données. L'accéléromètre 10DOF incorpore un gyroscope et un magnétomètre. Ceux-ci nous permettront d'avoir une meilleure précision des mesures notamment avec la mesure des orientations (vitesses angulaires).&lt;br /&gt;
&lt;br /&gt;
Nous avons ensuite étudié le capteur et réalisé le premier montage en connectant ce capteur de manière à pouvoir lire les données récupérées en direct sur l'ordinateur.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:10dof.PNG| 400px ]]&lt;br /&gt;
&lt;br /&gt;
Nous nous sommes également intéressé au calcule de l'angle à partir de l’accélération. &lt;br /&gt;
Prenons l'exemple de l’accéléromètre penché de la manière suivante.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:exemple5.PNG| 400px ]]&lt;br /&gt;
&lt;br /&gt;
Le triangle G,Gx Gz forme un triangle rectangle, dans notre cas nous avons Gx,Gy et Gz qui sont les valeurs du vecteur gravitationnel G sur les trois axes et nous devons déduire 𝝰 (l’angle que fait Gx avec l’axe x), 𝝋 (l’angle que fait Gy avec l’axe y) et ᴪ (l’angle que fait Gz avec l’axe z). La norme de G est&lt;br /&gt;
[[Fichier:Norme2.PNG| 200px ]]&lt;br /&gt;
On récupére ensuite chaque angle de la manière suivante: &lt;br /&gt;
[[Fichier:Calcule_angle.PNG| 200px ]]&lt;br /&gt;
&lt;br /&gt;
Nous avons ensuite réalisé un premier programme afin de lire les données du 10DOF que nous testerons la semaine suivante.&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
&lt;br /&gt;
Nous avons débuté le traitement des données directement sur le MEGA en réalisant de code de récupération de l'angle réalisé par l'accéléromètre.( Dans le code suivant nous avons uniquement l'acquisition des données)&lt;br /&gt;
&lt;br /&gt;
[[Fichier:10dof_code.PNG| 200px ]]&lt;br /&gt;
&lt;br /&gt;
Nous nous sommes rendus compte que les calculs ne sont pas réalisés correctement par le MEGA. En effet la mesure de l'angle n'était pas précis car le MEGA n'a pas assez de puissance de calcul pour faire les différentes divisions.  &lt;br /&gt;
&lt;br /&gt;
[[Fichier:Exempleaccelero.PNG| 100px ]]&lt;br /&gt;
&lt;br /&gt;
Nous avons donc décidé que le MEGA servira uniquement à récupérer les données et à les envoyer via module WIFI. Ce sera donc à l'application Android d'effectuer le traitement des données.&lt;br /&gt;
&lt;br /&gt;
Nous avons ensuite étudié le module WIFI ESP8266 que nous utiliserons, afin de nous faire une idée de son utilisation.&lt;br /&gt;
&lt;br /&gt;
Nous avons également installé les logiciels nécessaires ( Android studio,... )&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
&lt;br /&gt;
Nous nous sommes intéressées  au module wifi, en commençant par lire la fiche technique de l'esp 8266, nous avons également cherché les différents types d'exemples . &lt;br /&gt;
&lt;br /&gt;
Des recherches sur le mode de connexion entre le smartphone et le Mega à travers le module WIFI ont également été effectuer dans le but de se faire une idée, nous hésitons sur l'utilisation de Sockets UDP , ou de réaliser une transmission en TCP .&lt;br /&gt;
&lt;br /&gt;
Le programme réalisée lors de la séance précédente a été testé, notamment les tests de récupération des données de l'accéléromètre 10-DOF sur le Mega.&lt;br /&gt;
&lt;br /&gt;
Le code pour les autres accéléromètres en attendant la livraison de l'ADXL335 a également été entamé.&lt;br /&gt;
&lt;br /&gt;
Nous avons également rencontré un certain nombre de problème :&lt;br /&gt;
&lt;br /&gt;
Afin se connecter en WIFI à partir de n’importe où, nous avons décidé de se connecter premièrement à un réseau standard (point d'accès fourni par le smartphone dans un premier temps) puis de modifier le réseau sur lequel nous sommes connecté à partir du smartphone. Ce dernier enverra le SSID et le mot de passe du nouveau réseau souhaité au module et on  modifiera le paramètre de  cette manière.&lt;br /&gt;
[[Fichier:connection.PNG| 500px ]]&lt;br /&gt;
&lt;br /&gt;
La possibilité et l'utilité de l'ajout de l'acquisition des données du gyroscope pour avoir plus de précision sur l'accéléromètre 10-DOF qui sera sur la tête ( gérer les rotations).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
En parallèle, nous avons également avancé avec la création d'une application android pour la réception et l'affichage de données.&lt;br /&gt;
Nous avons décidé de:&lt;br /&gt;
* faire une page d'accueil dans laquelle le kinésithérapeute devra appuyer sur un bouton lorsqu'il aura bien positionné le patient pour enregistrer la bonne position.&lt;br /&gt;
* à l'appui du bouton, le smartphone va contacter le module WIFI à travers un message broadcast (en utilisant une communication UDP) dans le réseau. &lt;br /&gt;
* Le MODULE WIFI, qui est déjà en attente d'une trame venant du smartphone, reçoit le message broadcast, extrait l'adresse IP du smartphone, puis, lui envoie des données du capteur.&lt;br /&gt;
* le smartphone, à son tour va utiliser ces données pour calculer les angles d'inclinaison sur les différents axes et les afficher. Notons que les premiers angles calculés sont ceux correspondant à la bonne position. &lt;br /&gt;
* A intervalle régulier, le module ESP va envoyer de nouvelles données que le smartphone va traiter et comparer avec les angles de la bonne position et prévenir le patient si la position a changer.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:transmition.PNG| 600px ]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
* Réception du matériel&lt;br /&gt;
&lt;br /&gt;
[[Fichier:ADXL345.PNG| 100px ]]&lt;br /&gt;
&lt;br /&gt;
Nous avons commencé par étudier l'accéléromètre reçu, en effet la référence de ce dernier est ADXL345 et est digital à l’inverse de celui choisi qui était analogique. De ce fait, nous avons modifié une partie du cahier des charges.&lt;br /&gt;
&lt;br /&gt;
Les accéléromètres adxl345 sont alimentés en 3.3V et sont digitaux. Par conséquent, nous n'aurons plus besoin de sortie analogique.  &lt;br /&gt;
&lt;br /&gt;
*fonctionnement : accéléromètres digitaux pouvant fonctionner en SPI comme en I2C et supportant 3.3V. Résolution: 10 bits, régler en mode +/-2g. Donc les valeurs de notre registre de données seront dans la plage [-512 ,512]. Mais puisque nous ne mesurons que la force gravitationnelle, nous aurons des valeurs comprises entre [-256,256] qui est la plage correspondant à -/1g. 1g correspond à la valeur de 9.80m/s2.&lt;br /&gt;
&lt;br /&gt;
*type de données collectées: des entiers de -512 à 512 qu'il faudra transformer de telle sorte à avoir l'inclinaison de l'accéléromètre selon l'axe x, y et z&lt;br /&gt;
&lt;br /&gt;
L'établissement des activités nécessairement et documentation sur le choix des sockets à utiliser pour l'envoi des données a également été entamé.&lt;br /&gt;
&lt;br /&gt;
Coté Smartphone: &lt;br /&gt;
&lt;br /&gt;
*Créations de la page d'accueil et de la page de visualisation des angles d'inclinaisons&lt;br /&gt;
&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
&lt;br /&gt;
Nous avons réalisé l'étude de l'accéléromètre digital, nous devrons nous servir des ports digitaux du MEGA et choisir l’accéléromètre à partir duquel nous récupérons les données grâce à un chip select. Pour cela nous devrons utiliser la bibliothèque SPI.h et brancher le pin CS de l'accéléromètre à des pin digitaux du mega.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Mais les pin de l'accéleromètre n'acceptent que des tensions de 3.3V alors que ceux du Mega fournissent des tensions de 5v. Nous aurons donc besoin d'un mécanisme de régulation des tensions en sortie de Mega.&lt;br /&gt;
&lt;br /&gt;
===Semaine 8===&lt;br /&gt;
Nous avons réalisé une carte électronique grâce au logiciel fritzing pour réaliser l’adaptation de tensions entre l’accéléromètre adxl345 et la carte MEGA. En effet l'accéléromètre supporte des tensions maximales de 3.3V alors que le MEGA donne en sortie 5V.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:carte_elec1.PNG| 400px ]]&lt;br /&gt;
&lt;br /&gt;
Coté Smartphone:&lt;br /&gt;
&lt;br /&gt;
* création de la page d'accueil avec implémentation du code pour la communication UDP entre le smartphone et l'ESP8266.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Nous rencontrons des problèmes en ce qui concerne la l'implémentation du programme coté ESP.&lt;br /&gt;
&lt;br /&gt;
===Semaine 9===&lt;br /&gt;
&lt;br /&gt;
Nous avons testé la carte électronique faite la semaine précédente. &lt;br /&gt;
&lt;br /&gt;
[[Fichier:carte_elec2.PNG| 200px ]]&lt;br /&gt;
&lt;br /&gt;
Afin de tester la carte, nous avons alimenter les pins d’entrée par des 5v et avons observé la sortie du circuit. Malheureusement, seulement un pin en sortie &lt;br /&gt;
fournissait une tension de 3.3V.&lt;br /&gt;
Elle ne fonctionne pas et nous n'avons pas pu comprendre pourquoi. &lt;br /&gt;
&lt;br /&gt;
Par conséquent, nous avons changé de microcontrôleur. Nous avons reçu un arduino pro mini 3.3V compatible avec nos capteurs ( mais qui ne l'est pas avec le 10DOF ). &lt;br /&gt;
Nous commençons par conséquent à recueillir les données du capteurs. Pour cela, nous avons utilisé une librairie pour les ADXL345.&lt;br /&gt;
La première étape est de sélectionner le chip Select en définissant un ADXL grâce à la fonction suivante:&lt;br /&gt;
[[Fichier:def_adxl.PNG| 200px ]]&lt;br /&gt;
Cette fonction prend en paramètre le pin lié au chip Select de accéléromètre.&lt;br /&gt;
&lt;br /&gt;
Ensuite on récupère les données grâce à la fonction readaccel comme suit:&lt;br /&gt;
[[Fichier:readaccel.PNG| 200px ]]&lt;br /&gt;
La fonction stocke alors les valeurs lues par l'accéléromètre dans x,y et z.&lt;br /&gt;
&lt;br /&gt;
 code :&lt;br /&gt;
 [[Fichier:codemini1.PNG| 400px ]]&lt;br /&gt;
 &lt;br /&gt;
 [[Fichier:codemini2.PNG| 600px ]]&lt;br /&gt;
&lt;br /&gt;
Nous réalisons ensuite le montage suivant de manière à pouvoir lire sur le port série les valeurs .&lt;br /&gt;
&lt;br /&gt;
[[Fichier:montageaccel.PNG| 600px ]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Partie smartphone:&lt;br /&gt;
succès de la connexion au wi-fi partagé d'un smartphone. Coté ESP comme coté smartphone.&lt;br /&gt;
&lt;br /&gt;
===Semaine 10===&lt;br /&gt;
&lt;br /&gt;
'''Etude de la partie communication entre l'arduino pro mini et l'ESP8266 pour l'envoie des données du capteur'''&lt;br /&gt;
&lt;br /&gt;
Nous avons implémenté le module Wifi de manière à ce que l’on puisse recevoir les données des accélérations reçus par l’arduino mini.7&lt;br /&gt;
&lt;br /&gt;
Pour cela, nous avons utilisée la bibliothèque SoftwareSerial d’arduino et avons défini deux liaisons série (l'une du côté du mini et l’autre du coté esp).Le mini envois un “a” indiquant à l'esp qu'il commence à envoyer une serie de données.Ensuite on ramène les valeurs de l'accéléromètre sur l'échelle de g (gravitation terrestre ) gracz à un produit en croix . Pour finir, nous envoyons les données grâce à un serial write qui écrit sur les pins de l’esp ( pin 14 RX et 12 TX).&lt;br /&gt;
&lt;br /&gt;
Du côté de l’esp, on définit une liaison du nom de swSer au même baudrate que la précédente (9600). On attend la réception de 72 ( l'équivalent de ‘a’ en integer) indiquant que l’on commence à transmettre des données de l'accéléromètre. Une fois ce nombre reçu on incrémente un compteur à chaque réception d’un chiffre et à partir de la valeur de ce compteur nous plaçons la donnée dans la variable qui la définit ( la première donnée est celle de x1 donc si compteur est à 1 on place la valeur lue par swSer.read dans la variable x1 )&lt;br /&gt;
&lt;br /&gt;
===Fichiers rendus===&lt;br /&gt;
&lt;br /&gt;
rapport de projet : [[Fichier:Rapport_Fahem_Diop.pdf]]&lt;/div&gt;</summary>
		<author><name>Mdiop</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P18&amp;diff=42812</id>
		<title>IMA4 2016/2017 P18</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P18&amp;diff=42812"/>
				<updated>2017-05-20T14:42:38Z</updated>
		
		<summary type="html">&lt;p&gt;Mdiop : /* Semaine 8 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===Présentation générale du projet=== &lt;br /&gt;
&lt;br /&gt;
===Objectif du projet===&lt;br /&gt;
Rééducation de la position de la tête.&lt;br /&gt;
&lt;br /&gt;
===Contexte===&lt;br /&gt;
L’évolution de l'informatique a engendré une modification de la place du salarié dans l'entreprise. Ainsi, nombreux sont ceux qui travaillent dans un bureau face à un ordinateur. De ce fait, il a été remarqué par une association de la santé que les maux de dos sont en majorité dus à une mauvaise hygiène de vie notamment liée à une mauvaise posture au travail.&lt;br /&gt;
 &lt;br /&gt;
C'est après différentes études, notamment un bilan postural montrant où se situe la tête par rapport à une position idéale que l'on a remarqué que ces dernières années, 50% des personnes ayant des maux de dos sont en réalité dûs aux cervicales contre 20 % seulement il y a une dizaine d’années.&lt;br /&gt;
 &lt;br /&gt;
Du constat précédent découle ce projet ayant pour but de faciliter aux kinésithérapeutes la rééducation de la position de la tête des patients se plaignants de leur dos.&lt;br /&gt;
&lt;br /&gt;
=== Description du projet ===&lt;br /&gt;
 &lt;br /&gt;
La rééducation de la posture de la tête chez un kinésithérapeute pourrait être améliorée si le travail pouvait se faire en autonomie.&lt;br /&gt;
 &lt;br /&gt;
Ce projet propose de réaliser un système de suivi de la position de la tête d'un patient en rééducation grâce à un monitoring continu de la position de la tête, ainsi qu'un mécanisme pour aider le patient à reprendre une position correcte. En effet on lancera le système pendant environ 30 min durant lesquelles nous détecterons les variations de position et indiquerons au patient le moment ou sa position n’est plus bonne.&lt;br /&gt;
 &lt;br /&gt;
Ce projet devra ainsi comparer la position actuelle de la tête du patient à une position idéale (celle de la verticale) et lui signaler s’il doit ou non ajuster sa position.&lt;br /&gt;
&lt;br /&gt;
=== Choix techniques : matériel et logiciels ===&lt;br /&gt;
 &lt;br /&gt;
Nous avons choisi d’utiliser des accéléromètres afin de pouvoir récupérer des données décrivant la position de la tête. Les accéléromètres nous permettent de calculer l'angle d'inclinaison à partir de la force gravitationnelle qu'ils peuvent mesurer selon les trois axes. Lorsque la position idéale du patient sera choisie par le médecin, nous pourrons enregistrer cette position en mémorisant l'inclinaison de chaque accéléromètre pour cette position. Ainsi un changement de position sera identifié par une variation des angles d'inclinaison précédemment pris. Nous allons utilisé les accéléromètres analogiques de type adxl335. Une fois que nous aurons à disposition les valeurs de l'accéléromètre et, par conséquent les angles d'inclinaison, nous aurons besoin d'un moyen d'affichage des ces données. Pour ce faire, nous avons opté dans un premier temps pour une affichage sur smartphone. Les données vont être envoyées au smartphone à travers un module WIFI connectés au même réseau que le smartphone.  En récapitulant, nous aurons finalement besoin de:&lt;br /&gt;
* 5 accéléromètres adxl335.&lt;br /&gt;
* un arduino Mega&lt;br /&gt;
* un module WIFI &lt;br /&gt;
* des fils pour la liaison.&lt;br /&gt;
&lt;br /&gt;
===Calendrier prévisionnel===&lt;br /&gt;
&lt;br /&gt;
====Liste des tâches à effectuer====&lt;br /&gt;
Etude et choix des accéléromètres&lt;br /&gt;
*fonctionnement : accéléromètres à sortie analogique. Nous aurons donc besoin de 3 sorties analogiques par capteur (donc 3*5 sorties analogiques)&lt;br /&gt;
&lt;br /&gt;
*type de données collectées: force gravitationnelle selon les trois axes qu'il faudra transformer de telle sorte à avoir l'inclinaison de l'accéléromètre par rapport à l'axe x, y et z&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*mise en œuvre du programme d'acquisition.&lt;br /&gt;
&lt;br /&gt;
Moyen d'affichage des résultats &lt;br /&gt;
&lt;br /&gt;
*si position correcte par rapport à celle idéale ;&lt;br /&gt;
*envoi des résultats sur un smartphone.&lt;br /&gt;
&lt;br /&gt;
Réalisation d'un prototype &lt;br /&gt;
 &lt;br /&gt;
*identification et acquisition de la position idéale à l'aide des accéléromètres placées le long de la colonne vertébrale;&lt;br /&gt;
*notification au patient (à travers le smartphone) lorsqu'une position différente de celle idéale a été détectée.&lt;br /&gt;
&lt;br /&gt;
====Calendrier====&lt;br /&gt;
==tâches à réaliser==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! Avancement !! Commentaires&lt;br /&gt;
|-&lt;br /&gt;
| acquisition des données 10DOF&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| connexion au WIFI (esp9266)&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| connexion à un wifi standard prédéfinit lors de la programmation&lt;br /&gt;
|-&lt;br /&gt;
| pages application smartphone&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
|  &lt;br /&gt;
|-&lt;br /&gt;
| envois et réception de données sur smartphone&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| terminé et testé &lt;br /&gt;
|-&lt;br /&gt;
| acquisition des données de l'accéléromètre avec l'arduino mini&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| donnée récupérer à partir de 2 accéléromètre mais on peut en ajouter plus&lt;br /&gt;
|-&lt;br /&gt;
| liaison série arduino mini et esp8266&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;testé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Communication réalisé mais quelque amélioration à faire, il faut optimiser le code&lt;br /&gt;
|-&lt;br /&gt;
| mise en commun de la partie wifi et acquisition de données&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Inachevé&amp;lt;/font&amp;gt;&lt;br /&gt;
| la mise en commun pose quelque problème notamment la réception de donnée non cohérente par le smartphone&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! Prélude !! Heures S1 !! Heures S2 !! Heures S3 !! Heures S4 !! Heures S5 !! Heures S6 !! Heures S7 !! Heures S8 !! Heures S9 !! Heures S10 + Heures supplémentairements !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Définition cahier des charges &lt;br /&gt;
| 2H&lt;br /&gt;
| &lt;br /&gt;
| 8H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| documentation&lt;br /&gt;
| 2h&lt;br /&gt;
| 4h&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 4h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| liste du matériel &lt;br /&gt;
| &lt;br /&gt;
| 2h&lt;br /&gt;
| 6h&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| étude du module Wi-fi&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 8H&lt;br /&gt;
| 2H&lt;br /&gt;
| 4H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 12h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| étude, programmation, câblage du 10 DOF &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 4H&lt;br /&gt;
| 8H&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Accéléromètre &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| 2H&lt;br /&gt;
| étude 3H &lt;br /&gt;
| &lt;br /&gt;
| schématique 2H &lt;br /&gt;
| 12h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| liaison arduino esp&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 16H&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| étude et programmation arduino mini&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 16H&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| application mobile&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|2H&lt;br /&gt;
|4H&lt;br /&gt;
|4H&lt;br /&gt;
|&lt;br /&gt;
|10h&lt;br /&gt;
|10H&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avancement du Projet==&lt;br /&gt;
&lt;br /&gt;
===Semaine 1===&lt;br /&gt;
&lt;br /&gt;
Nous avons été confronté à différents choix matériel notamment dans la référence des accéléromètres ou encore le moyen de transmission des données. &lt;br /&gt;
&lt;br /&gt;
L'accéléromètre doit être assez précis pour des petites variations de position. Après avoir parcouru les catalogues de fournisseurs nous avons trouvé le ADXL335. &lt;br /&gt;
&lt;br /&gt;
De plus, nous devions choisir le mode de transmission des données vers un smartphone. Nous avions le choix entre un module Bluetooth et un module wifi. Le module Bluetooth est plus rapide que le module bluetooth. Cependant, ce dernier ne consomme pas beaucoup de charge de la batterie du smartphone mais il fonctionne  essentiellement sur de petites distances et avec des données de petite taille. En revanche le module WIFI lui consomme beaucoup plus de batterie mais couvre des distances beaucoup plus grandes ainsi que des tailles de données beaucoup plus importantes.&lt;br /&gt;
&lt;br /&gt;
Finalement, nous avons opté pour le module WIFI pour limiter le moins possible l'utilisateur en ce qui concerne la distance entre les appareils et le volume de données transmis.&lt;br /&gt;
&lt;br /&gt;
*Confirmation de la liste de matériel: &lt;br /&gt;
  *accéléromètre ADXL335&lt;br /&gt;
  *Smartphone sous Android&lt;br /&gt;
  *15 longs fils mâle-femelle, mâle-mâle&lt;br /&gt;
  *Arduino pro -mini&lt;br /&gt;
  *Module WIFI&lt;br /&gt;
&lt;br /&gt;
===Semaine 2===&lt;br /&gt;
&lt;br /&gt;
Réalisation d'un cahier des charges fonctionnelles avec les outils de gestions de projet telle que le FAST, la bete à corne, SADT.&lt;br /&gt;
[https://docs.google.com/document/d/1e6291kst6O6Ic0IWnadg5l10HiiZeqsw72GxfXC7O7U/edit cahier des charges fonctionnels]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:cad1_1.PNG| 900px ]]&lt;br /&gt;
[[Fichier:cad1.PNG| 900px ]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
&lt;br /&gt;
En début de semaine, nous avons reçus un premier capteur, l’accéléromètre 10 DOF, ainsi que l'arduino MEGA qui sera utilisé pour l’acquisition des données. L'accéléromètre 10DOF incorpore un gyroscope et un magnétomètre. Ceux-ci nous permettront d'avoir une meilleure précision des mesures notamment avec la mesure des orientations (vitesses angulaires).&lt;br /&gt;
&lt;br /&gt;
Nous avons ensuite étudié le capteur et réalisé le premier montage en connectant ce capteur de manière à pouvoir lire les données récupérées en direct sur l'ordinateur.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:10dof.PNG| 400px ]]&lt;br /&gt;
&lt;br /&gt;
Nous nous sommes également intéressé au calcule de l'angle à partir de l’accélération. &lt;br /&gt;
Prenons l'exemple de l’accéléromètre penché de la manière suivante.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:exemple5.PNG| 400px ]]&lt;br /&gt;
&lt;br /&gt;
Le triangle G,Gx Gz forme un triangle rectangle, dans notre cas nous avons Gx,Gy et Gz qui sont les valeurs du vecteur gravitationnel G sur les trois axes et nous devons déduire 𝝰 (l’angle que fait Gx avec l’axe x), 𝝋 (l’angle que fait Gy avec l’axe y) et ᴪ (l’angle que fait Gz avec l’axe z). La norme de G est&lt;br /&gt;
[[Fichier:Norme2.PNG| 200px ]]&lt;br /&gt;
On récupére ensuite chaque angle de la manière suivante: &lt;br /&gt;
[[Fichier:Calcule_angle.PNG| 200px ]]&lt;br /&gt;
&lt;br /&gt;
Nous avons ensuite réalisé un premier programme afin de lire les données du 10DOF que nous testerons la semaine suivante.&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
&lt;br /&gt;
Nous avons débuté le traitement des données directement sur le MEGA en réalisant de code de récupération de l'angle réalisé par l'accéléromètre.( Dans le code suivant nous avons uniquement l'acquisition des données)&lt;br /&gt;
&lt;br /&gt;
[[Fichier:10dof_code.PNG| 200px ]]&lt;br /&gt;
&lt;br /&gt;
Nous nous sommes rendus compte que les calculs ne sont pas réalisés correctement par le MEGA. En effet la mesure de l'angle n'était pas précis car le MEGA n'a pas assez de puissance de calcul pour faire les différentes divisions.  &lt;br /&gt;
&lt;br /&gt;
[[Fichier:Exempleaccelero.PNG| 100px ]]&lt;br /&gt;
&lt;br /&gt;
Nous avons donc décidé que le MEGA servira uniquement à récupérer les données et à les envoyer via module WIFI. Ce sera donc à l'application Android d'effectuer le traitement des données.&lt;br /&gt;
&lt;br /&gt;
Nous avons ensuite étudié le module WIFI ESP8266 que nous utiliserons, afin de nous faire une idée de son utilisation.&lt;br /&gt;
&lt;br /&gt;
Nous avons également installé les logiciels nécessaires ( Android studio,... )&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
&lt;br /&gt;
Nous nous sommes intéressées  au module wifi, en commençant par lire la fiche technique de l'esp 8266, nous avons également cherché les différents types d'exemples . &lt;br /&gt;
&lt;br /&gt;
Des recherches sur le mode de connexion entre le smartphone et le Mega à travers le module WIFI ont également été effectuer dans le but de se faire une idée, nous hésitons sur l'utilisation de Sockets UDP , ou de réaliser une transmission en TCP .&lt;br /&gt;
&lt;br /&gt;
Le programme réalisée lors de la séance précédente a été testé, notamment les tests de récupération des données de l'accéléromètre 10-DOF sur le Mega.&lt;br /&gt;
&lt;br /&gt;
Le code pour les autres accéléromètres en attendant la livraison de l'ADXL335 a également été entamé.&lt;br /&gt;
&lt;br /&gt;
Nous avons également rencontré un certain nombre de problème :&lt;br /&gt;
&lt;br /&gt;
Afin se connecter en WIFI à partir de n’importe où, nous avons décidé de se connecter premièrement à un réseau standard (point d'accès fourni par le smartphone dans un premier temps) puis de modifier le réseau sur lequel nous sommes connecté à partir du smartphone. Ce dernier enverra le SSID et le mot de passe du nouveau réseau souhaité au module et on  modifiera le paramètre de  cette manière.&lt;br /&gt;
[[Fichier:connection.PNG| 500px ]]&lt;br /&gt;
&lt;br /&gt;
La possibilité et l'utilité de l'ajout de l'acquisition des données du gyroscope pour avoir plus de précision sur l'accéléromètre 10-DOF qui sera sur la tête ( gérer les rotations).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
En parallèle, nous avons également avancé avec la création d'une application android pour la réception et l'affichage de données.&lt;br /&gt;
Nous avons décidé de:&lt;br /&gt;
* faire une page d'accueil dans laquelle le kinésithérapeute devra appuyer sur un bouton lorsqu'il aura bien positionné le patient pour enregistrer la bonne position.&lt;br /&gt;
* à l'appui du bouton, le smartphone va contacter le module WIFI à travers un message broadcast (en utilisant une communication UDP) dans le réseau. &lt;br /&gt;
* Le MODULE WIFI, qui est déjà en attente d'une trame venant du smartphone, reçoit le message broadcast, extrait l'adresse IP du smartphone, puis, lui envoie des données du capteur.&lt;br /&gt;
* le smartphone, à son tour va utiliser ces données pour calculer les angles d'inclinaison sur les différents axes et les afficher. Notons que les premiers angles calculés sont ceux correspondant à la bonne position. &lt;br /&gt;
* A intervalle régulier, le module ESP va envoyer de nouvelles données que le smartphone va traiter et comparer avec les angles de la bonne position et prévenir le patient si la position a changer.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:transmition.PNG| 600px ]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
* Réception du matériel&lt;br /&gt;
&lt;br /&gt;
[[Fichier:ADXL345.PNG| 100px ]]&lt;br /&gt;
&lt;br /&gt;
Nous avons commencé par étudier l'accéléromètre reçu, en effet la référence de ce dernier est ADXL345 et est digital à l’inverse de celui choisi qui était analogique. De ce fait, nous avons modifié une partie du cahier des charges.&lt;br /&gt;
&lt;br /&gt;
Les accéléromètres adxl345 sont alimentés en 3.3V et sont digitaux. Par conséquent, nous n'aurons plus besoin de sortie analogique.  &lt;br /&gt;
&lt;br /&gt;
*fonctionnement : accéléromètres digitaux pouvant fonctionner en SPI comme en I2C et supportant 3.3V. Résolution: 10 bits, régler en mode +/-2g. Donc les valeurs de notre registre de données seront dans la plage [-512 ,512]. Mais puisque nous ne mesurons que la force gravitationnelle, nous aurons des valeurs comprises entre [-256,256] qui est la plage correspondant à -/1g. 1g correspond à la valeur de 9.80m/s2.&lt;br /&gt;
&lt;br /&gt;
*type de données collectées: des entiers de -512 à 512 qu'il faudra transformer de telle sorte à avoir l'inclinaison de l'accéléromètre selon l'axe x, y et z&lt;br /&gt;
&lt;br /&gt;
L'établissement des activités nécessairement et documentation sur le choix des sockets à utiliser pour l'envoi des données a également été entamé.&lt;br /&gt;
&lt;br /&gt;
Coté Smartphone: &lt;br /&gt;
&lt;br /&gt;
*Créations de la page d'accueil et de la page de visualisation des angles d'inclinaisons&lt;br /&gt;
&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
&lt;br /&gt;
Nous avons réalisé l'étude de l'accéléromètre digital, nous devrons nous servir des ports digitaux du MEGA et choisir l’accéléromètre à partir duquel nous récupérons les données grâce à un chip select. Pour cela nous devrons utiliser la bibliothèque SPI.h et brancher le pin CS de l'accéléromètre à des pin digitaux du mega.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Mais les pin de l'accéleromètre n'acceptent que des tensions de 3.3V alors que ceux du Mega fournissent des tensions de 5v. Nous aurons donc besoin d'un mécanisme de régulation des tensions en sortie de Mega.&lt;br /&gt;
&lt;br /&gt;
===Semaine 8===&lt;br /&gt;
Nous avons réalisé une carte électronique grâce au logiciel fritzing pour réaliser l’adaptation de tensions entre l’accéléromètre adxl345 et la carte MEGA. En effet l'accéléromètre supporte des tensions maximales de 3.3V alors que le MEGA donne en sortie 5V.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:carte_elec1.PNG| 400px ]]&lt;br /&gt;
&lt;br /&gt;
Coté Smartphone:&lt;br /&gt;
&lt;br /&gt;
* création de la page d'accueil avec implémentation du code pour la communication UDP entre le smartphone et l'ESP8266.&lt;br /&gt;
[[Fichier:Exemple.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Nous rencontrons des problèmes en ce qui concerne la l'implémentation du programme coté ESP.&lt;br /&gt;
&lt;br /&gt;
===Semaine 9===&lt;br /&gt;
&lt;br /&gt;
Nous avons testé la carte électronique faite la semaine précédente. &lt;br /&gt;
&lt;br /&gt;
[[Fichier:carte_elec2.PNG| 200px ]]&lt;br /&gt;
&lt;br /&gt;
Afin de tester la carte, nous avons alimenter les pins d’entrée par des 5v et avons observé la sortie du circuit. Malheureusement, seulement un pin en sortie &lt;br /&gt;
fournissait une tension de 3.3V.&lt;br /&gt;
Elle ne fonctionne pas et nous n'avons pas pu comprendre pourquoi. &lt;br /&gt;
&lt;br /&gt;
Par conséquent, nous avons changé de microcontrôleur. Nous avons reçu un arduino pro mini 3.3V compatible avec nos capteurs ( mais qui ne l'est pas avec le 10DOF ). &lt;br /&gt;
Nous commençons par conséquent à recueillir les données du capteurs. Pour cela, nous avons utilisé une librairie pour les ADXL345.&lt;br /&gt;
La première étape est de sélectionner le chip Select en définissant un ADXL grâce à la fonction suivante:&lt;br /&gt;
[[Fichier:def_adxl.PNG| 200px ]]&lt;br /&gt;
Cette fonction prend en paramètre le pin lié au chip Select de accéléromètre.&lt;br /&gt;
&lt;br /&gt;
Ensuite on récupère les données grâce à la fonction readaccel comme suit:&lt;br /&gt;
[[Fichier:readaccel.PNG| 200px ]]&lt;br /&gt;
La fonction stocke alors les valeurs lues par l'accéléromètre dans x,y et z.&lt;br /&gt;
&lt;br /&gt;
 code :&lt;br /&gt;
 [[Fichier:codemini1.PNG| 400px ]]&lt;br /&gt;
 &lt;br /&gt;
 [[Fichier:codemini2.PNG| 600px ]]&lt;br /&gt;
&lt;br /&gt;
Nous réalisons ensuite le montage suivant de manière à pouvoir lire sur le port série les valeurs .&lt;br /&gt;
&lt;br /&gt;
[[Fichier:montageaccel.PNG| 600px ]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Partie smartphone:&lt;br /&gt;
succès de la connexion au wi-fi partagé d'un smartphone. Coté ESP comme coté smartphone.&lt;br /&gt;
&lt;br /&gt;
===Semaine 10===&lt;br /&gt;
&lt;br /&gt;
'''Etude de la partie communication entre l'arduino pro mini et l'ESP8266 pour l'envoie des données du capteur'''&lt;br /&gt;
&lt;br /&gt;
Nous avons implémenté le module Wifi de manière à ce que l’on puisse recevoir les données des accélérations reçus par l’arduino mini.7&lt;br /&gt;
&lt;br /&gt;
Pour cela, nous avons utilisée la bibliothèque SoftwareSerial d’arduino et avons défini deux liaisons série (l'une du côté du mini et l’autre du coté esp).Le mini envois un “a” indiquant à l'esp qu'il commence à envoyer une serie de données.Ensuite on ramène les valeurs de l'accéléromètre sur l'échelle de g (gravitation terrestre ) gracz à un produit en croix . Pour finir, nous envoyons les données grâce à un serial write qui écrit sur les pins de l’esp ( pin 14 RX et 12 TX).&lt;br /&gt;
&lt;br /&gt;
Du côté de l’esp, on définit une liaison du nom de swSer au même baudrate que la précédente (9600). On attend la réception de 72 ( l'équivalent de ‘a’ en integer) indiquant que l’on commence à transmettre des données de l'accéléromètre. Une fois ce nombre reçu on incrémente un compteur à chaque réception d’un chiffre et à partir de la valeur de ce compteur nous plaçons la donnée dans la variable qui la définit ( la première donnée est celle de x1 donc si compteur est à 1 on place la valeur lue par swSer.read dans la variable x1 )&lt;br /&gt;
&lt;br /&gt;
===Fichiers rendus===&lt;br /&gt;
&lt;br /&gt;
rapport de projet : [[Fichier:Rapport_Fahem_Diop.pdf]]&lt;/div&gt;</summary>
		<author><name>Mdiop</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P18&amp;diff=42810</id>
		<title>IMA4 2016/2017 P18</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P18&amp;diff=42810"/>
				<updated>2017-05-20T14:39:44Z</updated>
		
		<summary type="html">&lt;p&gt;Mdiop : /* Semaine 7 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===Présentation générale du projet=== &lt;br /&gt;
&lt;br /&gt;
===Objectif du projet===&lt;br /&gt;
Rééducation de la position de la tête.&lt;br /&gt;
&lt;br /&gt;
===Contexte===&lt;br /&gt;
L’évolution de l'informatique a engendré une modification de la place du salarié dans l'entreprise. Ainsi, nombreux sont ceux qui travaillent dans un bureau face à un ordinateur. De ce fait, il a été remarqué par une association de la santé que les maux de dos sont en majorité dus à une mauvaise hygiène de vie notamment liée à une mauvaise posture au travail.&lt;br /&gt;
 &lt;br /&gt;
C'est après différentes études, notamment un bilan postural montrant où se situe la tête par rapport à une position idéale que l'on a remarqué que ces dernières années, 50% des personnes ayant des maux de dos sont en réalité dûs aux cervicales contre 20 % seulement il y a une dizaine d’années.&lt;br /&gt;
 &lt;br /&gt;
Du constat précédent découle ce projet ayant pour but de faciliter aux kinésithérapeutes la rééducation de la position de la tête des patients se plaignants de leur dos.&lt;br /&gt;
&lt;br /&gt;
=== Description du projet ===&lt;br /&gt;
 &lt;br /&gt;
La rééducation de la posture de la tête chez un kinésithérapeute pourrait être améliorée si le travail pouvait se faire en autonomie.&lt;br /&gt;
 &lt;br /&gt;
Ce projet propose de réaliser un système de suivi de la position de la tête d'un patient en rééducation grâce à un monitoring continu de la position de la tête, ainsi qu'un mécanisme pour aider le patient à reprendre une position correcte. En effet on lancera le système pendant environ 30 min durant lesquelles nous détecterons les variations de position et indiquerons au patient le moment ou sa position n’est plus bonne.&lt;br /&gt;
 &lt;br /&gt;
Ce projet devra ainsi comparer la position actuelle de la tête du patient à une position idéale (celle de la verticale) et lui signaler s’il doit ou non ajuster sa position.&lt;br /&gt;
&lt;br /&gt;
=== Choix techniques : matériel et logiciels ===&lt;br /&gt;
 &lt;br /&gt;
Nous avons choisi d’utiliser des accéléromètres afin de pouvoir récupérer des données décrivant la position de la tête. Les accéléromètres nous permettent de calculer l'angle d'inclinaison à partir de la force gravitationnelle qu'ils peuvent mesurer selon les trois axes. Lorsque la position idéale du patient sera choisie par le médecin, nous pourrons enregistrer cette position en mémorisant l'inclinaison de chaque accéléromètre pour cette position. Ainsi un changement de position sera identifié par une variation des angles d'inclinaison précédemment pris. Nous allons utilisé les accéléromètres analogiques de type adxl335. Une fois que nous aurons à disposition les valeurs de l'accéléromètre et, par conséquent les angles d'inclinaison, nous aurons besoin d'un moyen d'affichage des ces données. Pour ce faire, nous avons opté dans un premier temps pour une affichage sur smartphone. Les données vont être envoyées au smartphone à travers un module WIFI connectés au même réseau que le smartphone.  En récapitulant, nous aurons finalement besoin de:&lt;br /&gt;
* 5 accéléromètres adxl335.&lt;br /&gt;
* un arduino Mega&lt;br /&gt;
* un module WIFI &lt;br /&gt;
* des fils pour la liaison.&lt;br /&gt;
&lt;br /&gt;
===Calendrier prévisionnel===&lt;br /&gt;
&lt;br /&gt;
====Liste des tâches à effectuer====&lt;br /&gt;
Etude et choix des accéléromètres&lt;br /&gt;
*fonctionnement : accéléromètres à sortie analogique. Nous aurons donc besoin de 3 sorties analogiques par capteur (donc 3*5 sorties analogiques)&lt;br /&gt;
&lt;br /&gt;
*type de données collectées: force gravitationnelle selon les trois axes qu'il faudra transformer de telle sorte à avoir l'inclinaison de l'accéléromètre par rapport à l'axe x, y et z&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*mise en œuvre du programme d'acquisition.&lt;br /&gt;
&lt;br /&gt;
Moyen d'affichage des résultats &lt;br /&gt;
&lt;br /&gt;
*si position correcte par rapport à celle idéale ;&lt;br /&gt;
*envoi des résultats sur un smartphone.&lt;br /&gt;
&lt;br /&gt;
Réalisation d'un prototype &lt;br /&gt;
 &lt;br /&gt;
*identification et acquisition de la position idéale à l'aide des accéléromètres placées le long de la colonne vertébrale;&lt;br /&gt;
*notification au patient (à travers le smartphone) lorsqu'une position différente de celle idéale a été détectée.&lt;br /&gt;
&lt;br /&gt;
====Calendrier====&lt;br /&gt;
==tâches à réaliser==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! Avancement !! Commentaires&lt;br /&gt;
|-&lt;br /&gt;
| acquisition des données 10DOF&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| connexion au WIFI (esp9266)&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| connexion à un wifi standard prédéfinit lors de la programmation&lt;br /&gt;
|-&lt;br /&gt;
| pages application smartphone&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
|  &lt;br /&gt;
|-&lt;br /&gt;
| envois et réception de données sur smartphone&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| terminé et testé &lt;br /&gt;
|-&lt;br /&gt;
| acquisition des données de l'accéléromètre avec l'arduino mini&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: green;&amp;quot;&amp;gt;Terminé&amp;lt;/font&amp;gt;&lt;br /&gt;
| donnée récupérer à partir de 2 accéléromètre mais on peut en ajouter plus&lt;br /&gt;
|-&lt;br /&gt;
| liaison série arduino mini et esp8266&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;testé&amp;lt;/font&amp;gt;&lt;br /&gt;
| Communication réalisé mais quelque amélioration à faire, il faut optimiser le code&lt;br /&gt;
|-&lt;br /&gt;
| mise en commun de la partie wifi et acquisition de données&lt;br /&gt;
| &amp;lt;font style=&amp;quot;color: orange;&amp;quot;&amp;gt;Inachevé&amp;lt;/font&amp;gt;&lt;br /&gt;
| la mise en commun pose quelque problème notamment la réception de donnée non cohérente par le smartphone&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! Prélude !! Heures S1 !! Heures S2 !! Heures S3 !! Heures S4 !! Heures S5 !! Heures S6 !! Heures S7 !! Heures S8 !! Heures S9 !! Heures S10 + Heures supplémentairements !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Définition cahier des charges &lt;br /&gt;
| 2H&lt;br /&gt;
| &lt;br /&gt;
| 8H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| documentation&lt;br /&gt;
| 2h&lt;br /&gt;
| 4h&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 4h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| liste du matériel &lt;br /&gt;
| &lt;br /&gt;
| 2h&lt;br /&gt;
| 6h&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| étude du module Wi-fi&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 8H&lt;br /&gt;
| 2H&lt;br /&gt;
| 4H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 12h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| étude, programmation, câblage du 10 DOF &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 4H&lt;br /&gt;
| 8H&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Accéléromètre &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| 2H&lt;br /&gt;
| étude 3H &lt;br /&gt;
| &lt;br /&gt;
| schématique 2H &lt;br /&gt;
| 12h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| liaison arduino esp&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 16H&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| étude et programmation arduino mini&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 16H&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| application mobile&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|2H&lt;br /&gt;
|4H&lt;br /&gt;
|4H&lt;br /&gt;
|&lt;br /&gt;
|10h&lt;br /&gt;
|10H&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avancement du Projet==&lt;br /&gt;
&lt;br /&gt;
===Semaine 1===&lt;br /&gt;
&lt;br /&gt;
Nous avons été confronté à différents choix matériel notamment dans la référence des accéléromètres ou encore le moyen de transmission des données. &lt;br /&gt;
&lt;br /&gt;
L'accéléromètre doit être assez précis pour des petites variations de position. Après avoir parcouru les catalogues de fournisseurs nous avons trouvé le ADXL335. &lt;br /&gt;
&lt;br /&gt;
De plus, nous devions choisir le mode de transmission des données vers un smartphone. Nous avions le choix entre un module Bluetooth et un module wifi. Le module Bluetooth est plus rapide que le module bluetooth. Cependant, ce dernier ne consomme pas beaucoup de charge de la batterie du smartphone mais il fonctionne  essentiellement sur de petites distances et avec des données de petite taille. En revanche le module WIFI lui consomme beaucoup plus de batterie mais couvre des distances beaucoup plus grandes ainsi que des tailles de données beaucoup plus importantes.&lt;br /&gt;
&lt;br /&gt;
Finalement, nous avons opté pour le module WIFI pour limiter le moins possible l'utilisateur en ce qui concerne la distance entre les appareils et le volume de données transmis.&lt;br /&gt;
&lt;br /&gt;
*Confirmation de la liste de matériel: &lt;br /&gt;
  *accéléromètre ADXL335&lt;br /&gt;
  *Smartphone sous Android&lt;br /&gt;
  *15 longs fils mâle-femelle, mâle-mâle&lt;br /&gt;
  *Arduino pro -mini&lt;br /&gt;
  *Module WIFI&lt;br /&gt;
&lt;br /&gt;
===Semaine 2===&lt;br /&gt;
&lt;br /&gt;
Réalisation d'un cahier des charges fonctionnelles avec les outils de gestions de projet telle que le FAST, la bete à corne, SADT.&lt;br /&gt;
[https://docs.google.com/document/d/1e6291kst6O6Ic0IWnadg5l10HiiZeqsw72GxfXC7O7U/edit cahier des charges fonctionnels]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:cad1_1.PNG| 900px ]]&lt;br /&gt;
[[Fichier:cad1.PNG| 900px ]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
&lt;br /&gt;
En début de semaine, nous avons reçus un premier capteur, l’accéléromètre 10 DOF, ainsi que l'arduino MEGA qui sera utilisé pour l’acquisition des données. L'accéléromètre 10DOF incorpore un gyroscope et un magnétomètre. Ceux-ci nous permettront d'avoir une meilleure précision des mesures notamment avec la mesure des orientations (vitesses angulaires).&lt;br /&gt;
&lt;br /&gt;
Nous avons ensuite étudié le capteur et réalisé le premier montage en connectant ce capteur de manière à pouvoir lire les données récupérées en direct sur l'ordinateur.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:10dof.PNG| 400px ]]&lt;br /&gt;
&lt;br /&gt;
Nous nous sommes également intéressé au calcule de l'angle à partir de l’accélération. &lt;br /&gt;
Prenons l'exemple de l’accéléromètre penché de la manière suivante.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:exemple5.PNG| 400px ]]&lt;br /&gt;
&lt;br /&gt;
Le triangle G,Gx Gz forme un triangle rectangle, dans notre cas nous avons Gx,Gy et Gz qui sont les valeurs du vecteur gravitationnel G sur les trois axes et nous devons déduire 𝝰 (l’angle que fait Gx avec l’axe x), 𝝋 (l’angle que fait Gy avec l’axe y) et ᴪ (l’angle que fait Gz avec l’axe z). La norme de G est&lt;br /&gt;
[[Fichier:Norme2.PNG| 200px ]]&lt;br /&gt;
On récupére ensuite chaque angle de la manière suivante: &lt;br /&gt;
[[Fichier:Calcule_angle.PNG| 200px ]]&lt;br /&gt;
&lt;br /&gt;
Nous avons ensuite réalisé un premier programme afin de lire les données du 10DOF que nous testerons la semaine suivante.&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
&lt;br /&gt;
Nous avons débuté le traitement des données directement sur le MEGA en réalisant de code de récupération de l'angle réalisé par l'accéléromètre.( Dans le code suivant nous avons uniquement l'acquisition des données)&lt;br /&gt;
&lt;br /&gt;
[[Fichier:10dof_code.PNG| 200px ]]&lt;br /&gt;
&lt;br /&gt;
Nous nous sommes rendus compte que les calculs ne sont pas réalisés correctement par le MEGA. En effet la mesure de l'angle n'était pas précis car le MEGA n'a pas assez de puissance de calcul pour faire les différentes divisions.  &lt;br /&gt;
&lt;br /&gt;
[[Fichier:Exempleaccelero.PNG| 100px ]]&lt;br /&gt;
&lt;br /&gt;
Nous avons donc décidé que le MEGA servira uniquement à récupérer les données et à les envoyer via module WIFI. Ce sera donc à l'application Android d'effectuer le traitement des données.&lt;br /&gt;
&lt;br /&gt;
Nous avons ensuite étudié le module WIFI ESP8266 que nous utiliserons, afin de nous faire une idée de son utilisation.&lt;br /&gt;
&lt;br /&gt;
Nous avons également installé les logiciels nécessaires ( Android studio,... )&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
&lt;br /&gt;
Nous nous sommes intéressées  au module wifi, en commençant par lire la fiche technique de l'esp 8266, nous avons également cherché les différents types d'exemples . &lt;br /&gt;
&lt;br /&gt;
Des recherches sur le mode de connexion entre le smartphone et le Mega à travers le module WIFI ont également été effectuer dans le but de se faire une idée, nous hésitons sur l'utilisation de Sockets UDP , ou de réaliser une transmission en TCP .&lt;br /&gt;
&lt;br /&gt;
Le programme réalisée lors de la séance précédente a été testé, notamment les tests de récupération des données de l'accéléromètre 10-DOF sur le Mega.&lt;br /&gt;
&lt;br /&gt;
Le code pour les autres accéléromètres en attendant la livraison de l'ADXL335 a également été entamé.&lt;br /&gt;
&lt;br /&gt;
Nous avons également rencontré un certain nombre de problème :&lt;br /&gt;
&lt;br /&gt;
Afin se connecter en WIFI à partir de n’importe où, nous avons décidé de se connecter premièrement à un réseau standard (point d'accès fourni par le smartphone dans un premier temps) puis de modifier le réseau sur lequel nous sommes connecté à partir du smartphone. Ce dernier enverra le SSID et le mot de passe du nouveau réseau souhaité au module et on  modifiera le paramètre de  cette manière.&lt;br /&gt;
[[Fichier:connection.PNG| 500px ]]&lt;br /&gt;
&lt;br /&gt;
La possibilité et l'utilité de l'ajout de l'acquisition des données du gyroscope pour avoir plus de précision sur l'accéléromètre 10-DOF qui sera sur la tête ( gérer les rotations).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
En parallèle, nous avons également avancé avec la création d'une application android pour la réception et l'affichage de données.&lt;br /&gt;
Nous avons décidé de:&lt;br /&gt;
* faire une page d'accueil dans laquelle le kinésithérapeute devra appuyer sur un bouton lorsqu'il aura bien positionné le patient pour enregistrer la bonne position.&lt;br /&gt;
* à l'appui du bouton, le smartphone va contacter le module WIFI à travers un message broadcast (en utilisant une communication UDP) dans le réseau. &lt;br /&gt;
* Le MODULE WIFI, qui est déjà en attente d'une trame venant du smartphone, reçoit le message broadcast, extrait l'adresse IP du smartphone, puis, lui envoie des données du capteur.&lt;br /&gt;
* le smartphone, à son tour va utiliser ces données pour calculer les angles d'inclinaison sur les différents axes et les afficher. Notons que les premiers angles calculés sont ceux correspondant à la bonne position. &lt;br /&gt;
* A intervalle régulier, le module ESP va envoyer de nouvelles données que le smartphone va traiter et comparer avec les angles de la bonne position et prévenir le patient si la position a changer.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:transmition.PNG| 600px ]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
* Réception du matériel&lt;br /&gt;
&lt;br /&gt;
[[Fichier:ADXL345.PNG| 100px ]]&lt;br /&gt;
&lt;br /&gt;
Nous avons commencé par étudier l'accéléromètre reçu, en effet la référence de ce dernier est ADXL345 et est digital à l’inverse de celui choisi qui était analogique. De ce fait, nous avons modifié une partie du cahier des charges.&lt;br /&gt;
&lt;br /&gt;
Les accéléromètres adxl345 sont alimentés en 3.3V et sont digitaux. Par conséquent, nous n'aurons plus besoin de sortie analogique.  &lt;br /&gt;
&lt;br /&gt;
*fonctionnement : accéléromètres digitaux pouvant fonctionner en SPI comme en I2C et supportant 3.3V. Résolution: 10 bits, régler en mode +/-2g. Donc les valeurs de notre registre de données seront dans la plage [-512 ,512]. Mais puisque nous ne mesurons que la force gravitationnelle, nous aurons des valeurs comprises entre [-256,256] qui est la plage correspondant à -/1g. 1g correspond à la valeur de 9.80m/s2.&lt;br /&gt;
&lt;br /&gt;
*type de données collectées: des entiers de -512 à 512 qu'il faudra transformer de telle sorte à avoir l'inclinaison de l'accéléromètre selon l'axe x, y et z&lt;br /&gt;
&lt;br /&gt;
L'établissement des activités nécessairement et documentation sur le choix des sockets à utiliser pour l'envoi des données a également été entamé.&lt;br /&gt;
&lt;br /&gt;
Coté Smartphone: &lt;br /&gt;
&lt;br /&gt;
*Créations de la page d'accueil et de la page de visualisation des angles d'inclinaisons&lt;br /&gt;
&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
&lt;br /&gt;
Nous avons réalisé l'étude de l'accéléromètre digital, nous devrons nous servir des ports digitaux du MEGA et choisir l’accéléromètre à partir duquel nous récupérons les données grâce à un chip select. Pour cela nous devrons utiliser la bibliothèque SPI.h et brancher le pin CS de l'accéléromètre à des pin digitaux du mega.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Mais les pin de l'accéleromètre n'acceptent que des tensions de 3.3V alors que ceux du Mega fournissent des tensions de 5v. Nous aurons donc besoin d'un mécanisme de régulation des tensions en sortie de Mega.&lt;br /&gt;
&lt;br /&gt;
===Semaine 8===&lt;br /&gt;
Nous avons réalisé une carte électronique grâce au logiciel fritzing pour réaliser l’adaptation de tensions entre l’accéléromètre adxl345 et la carte MEGA. En effet l'accéléromètre supporte des tensions maximales de 3.3V alors que le MEGA donne en sortie 5V.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:carte_elec1.PNG| 400px ]]&lt;br /&gt;
&lt;br /&gt;
Coté Smartphone:&lt;br /&gt;
&lt;br /&gt;
* création de la page d'accueil avec implémentation du code pour la communication UDP entre le smartphone et l'ESP8266.&lt;br /&gt;
* Nous rencontrons des problèmes en ce qui concerne la l'implémentation du programme coté ESP.&lt;br /&gt;
&lt;br /&gt;
===Semaine 9===&lt;br /&gt;
&lt;br /&gt;
Nous avons testé la carte électronique faite la semaine précédente. &lt;br /&gt;
&lt;br /&gt;
[[Fichier:carte_elec2.PNG| 200px ]]&lt;br /&gt;
&lt;br /&gt;
Afin de tester la carte, nous avons alimenter les pins d’entrée par des 5v et avons observé la sortie du circuit. Malheureusement, seulement un pin en sortie &lt;br /&gt;
fournissait une tension de 3.3V.&lt;br /&gt;
Elle ne fonctionne pas et nous n'avons pas pu comprendre pourquoi. &lt;br /&gt;
&lt;br /&gt;
Par conséquent, nous avons changé de microcontrôleur. Nous avons reçu un arduino pro mini 3.3V compatible avec nos capteurs ( mais qui ne l'est pas avec le 10DOF ). &lt;br /&gt;
Nous commençons par conséquent à recueillir les données du capteurs. Pour cela, nous avons utilisé une librairie pour les ADXL345.&lt;br /&gt;
La première étape est de sélectionner le chip Select en définissant un ADXL grâce à la fonction suivante:&lt;br /&gt;
[[Fichier:def_adxl.PNG| 200px ]]&lt;br /&gt;
Cette fonction prend en paramètre le pin lié au chip Select de accéléromètre.&lt;br /&gt;
&lt;br /&gt;
Ensuite on récupère les données grâce à la fonction readaccel comme suit:&lt;br /&gt;
[[Fichier:readaccel.PNG| 200px ]]&lt;br /&gt;
La fonction stocke alors les valeurs lues par l'accéléromètre dans x,y et z.&lt;br /&gt;
&lt;br /&gt;
 code :&lt;br /&gt;
 [[Fichier:codemini1.PNG| 400px ]]&lt;br /&gt;
 &lt;br /&gt;
 [[Fichier:codemini2.PNG| 600px ]]&lt;br /&gt;
&lt;br /&gt;
Nous réalisons ensuite le montage suivant de manière à pouvoir lire sur le port série les valeurs .&lt;br /&gt;
&lt;br /&gt;
[[Fichier:montageaccel.PNG| 600px ]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Partie smartphone:&lt;br /&gt;
succès de la connexion au wi-fi partagé d'un smartphone. Coté ESP comme coté smartphone.&lt;br /&gt;
&lt;br /&gt;
===Semaine 10===&lt;br /&gt;
&lt;br /&gt;
'''Etude de la partie communication entre l'arduino pro mini et l'ESP8266 pour l'envoie des données du capteur'''&lt;br /&gt;
&lt;br /&gt;
Nous avons implémenté le module Wifi de manière à ce que l’on puisse recevoir les données des accélérations reçus par l’arduino mini.7&lt;br /&gt;
&lt;br /&gt;
Pour cela, nous avons utilisée la bibliothèque SoftwareSerial d’arduino et avons défini deux liaisons série (l'une du côté du mini et l’autre du coté esp).Le mini envois un “a” indiquant à l'esp qu'il commence à envoyer une serie de données.Ensuite on ramène les valeurs de l'accéléromètre sur l'échelle de g (gravitation terrestre ) gracz à un produit en croix . Pour finir, nous envoyons les données grâce à un serial write qui écrit sur les pins de l’esp ( pin 14 RX et 12 TX).&lt;br /&gt;
&lt;br /&gt;
Du côté de l’esp, on définit une liaison du nom de swSer au même baudrate que la précédente (9600). On attend la réception de 72 ( l'équivalent de ‘a’ en integer) indiquant que l’on commence à transmettre des données de l'accéléromètre. Une fois ce nombre reçu on incrémente un compteur à chaque réception d’un chiffre et à partir de la valeur de ce compteur nous plaçons la donnée dans la variable qui la définit ( la première donnée est celle de x1 donc si compteur est à 1 on place la valeur lue par swSer.read dans la variable x1 )&lt;br /&gt;
&lt;br /&gt;
===Fichiers rendus===&lt;br /&gt;
&lt;br /&gt;
rapport de projet : [[Fichier:Rapport_Fahem_Diop.pdf]]&lt;/div&gt;</summary>
		<author><name>Mdiop</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P18&amp;diff=41913</id>
		<title>IMA4 2016/2017 P18</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P18&amp;diff=41913"/>
				<updated>2017-05-10T01:07:30Z</updated>
		
		<summary type="html">&lt;p&gt;Mdiop : /* Semaine 9 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===Présentation générale du projet=== &lt;br /&gt;
&lt;br /&gt;
===Objectif du projet===&lt;br /&gt;
Rééducation de la position de la tête.&lt;br /&gt;
&lt;br /&gt;
===Contexte===&lt;br /&gt;
L’évolution de l'informatique a engendré une modification de la place du salarié dans l'entreprise. Ainsi, nombreux sont ceux qui travaillent dans un bureau face à un ordinateur. De ce fait, il a été remarqué par une association de la santé que les maux de dos sont en majorité dus à une mauvaise hygiène de vie notamment liée à une mauvaise posture au travail.&lt;br /&gt;
 &lt;br /&gt;
C'est après différentes études, notamment un bilan postural montrant où se situe la tête par rapport à une position idéale que l'on a remarqué que ces dernières années, 50% des personnes ayant des maux de dos sont en réalité dûs aux cervicales contre 20 % seulement il y a une dizaine d’années.&lt;br /&gt;
 &lt;br /&gt;
Du constat précédent découle ce projet ayant pour but de faciliter aux kinésithérapeutes la rééducation de la position de la tête des patients se plaignants de leur dos.&lt;br /&gt;
&lt;br /&gt;
=== Description du projet ===&lt;br /&gt;
 &lt;br /&gt;
La rééducation de la posture de la tête chez un kinésithérapeute pourrait être améliorée si le travail pouvait se faire en autonomie.&lt;br /&gt;
 &lt;br /&gt;
Ce projet propose de réaliser un système de suivi de la position de la tête d'un patient en rééducation grâce à un monitoring continu de la position de la tête, ainsi qu'un mécanisme pour aider le patient à reprendre une position correcte. En effet on lancera le système pendant environ 30 min durant lesquelles nous détecterons les variations de position et indiquerons au patient le moment ou sa position n’est plus bonne.&lt;br /&gt;
 &lt;br /&gt;
Ce projet devra ainsi comparer la position actuelle de la tête du patient à une position idéale (celle de la verticale) et lui signaler s’il doit ou non ajuster sa position.&lt;br /&gt;
&lt;br /&gt;
=== Choix techniques : matériel et logiciels ===&lt;br /&gt;
 &lt;br /&gt;
Nous avons choisi d’utiliser des accéléromètres afin de pouvoir récupérer des données décrivant la position de la tête. Les accéléromètres nous permettent de calculer l'angle d'inclinaison à partir de la force gravitationnelle qu'ils peuvent mesurer selon les trois axes. Lorsque la position idéale du patient sera choisie par le médecin, nous pourrons enregistrer cette position en mémorisant l'inclinaison de chaque accéléromètre pour cette position. Ainsi un changement de position sera identifié par une variation des angles d'inclinaison précédemment pris. Nous allons utilisé les accéléromètres analogiques de type adxl335. Une fois que nous aurons à disposition les valeurs de l'accéléromètre et, par conséquent les angles d'inclinaison, nous aurons besoin d'un moyen d'affichage des ces données. Pour ce faire, nous avons opté dans un premier temps pour une affichage sur smartphone. Les données vont être envoyées au smartphone à travers un module WIFI connectés au même réseau que le smartphone.  En récapitulant, nous aurons finalement besoin de:&lt;br /&gt;
* 5 accéléromètres adxl335.&lt;br /&gt;
* un arduino Mega&lt;br /&gt;
* un module WIFI &lt;br /&gt;
* des fils pour la liaison.&lt;br /&gt;
&lt;br /&gt;
===Calendrier prévisionnel===&lt;br /&gt;
&lt;br /&gt;
====Liste des tâches à effectuer====&lt;br /&gt;
Etude et choix des accéléromètres&lt;br /&gt;
*fonctionnement : accéléromètres à sortie analogique. Nous aurons donc besoin de 3 sorties analogiques par capteur (donc 3*5 sorties analogiques)&lt;br /&gt;
&lt;br /&gt;
*type de données collectées: force gravitationnelle selon les trois axes qu'il faudra transformer de telle sorte à avoir l'inclinaison de l'accéléromètre par rapport à l'axe x, y et z&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*mise en œuvre du programme d'acquisition.&lt;br /&gt;
&lt;br /&gt;
Moyen d'affichage des résultats &lt;br /&gt;
&lt;br /&gt;
*si position correcte par rapport à celle idéale ;&lt;br /&gt;
*envoi des résultats sur un smartphone.&lt;br /&gt;
&lt;br /&gt;
Réalisation d'un prototype &lt;br /&gt;
 &lt;br /&gt;
*identification et acquisition de la position idéale à l'aide des accéléromètres placées le long de la colonne vertébrale;&lt;br /&gt;
*notification au patient (à travers le smartphone) lorsqu'une position différente de celle idéale a été détectée.&lt;br /&gt;
&lt;br /&gt;
====Calendrier====&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! Prélude !! Heures S1 !! Heures S2 !! Heures S3 !! Heures S4 !! Heures S5 !! Heures S6 !! Heures S7 !! Heures S8 !! Heures S9 !! Heures S10 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Définition cahier des charges &lt;br /&gt;
| 2H&lt;br /&gt;
| &lt;br /&gt;
| 8H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| documentation&lt;br /&gt;
| 2h&lt;br /&gt;
| 4h&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 4h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| liste du matériel &lt;br /&gt;
| &lt;br /&gt;
| 2h&lt;br /&gt;
| 6h&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| étude du module Wi-fi&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 8H&lt;br /&gt;
| 2H&lt;br /&gt;
| 4H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 12h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| étude, programmation, câblage du 10 DOF &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 4H&lt;br /&gt;
| 8H&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Accéléromètre &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| 2H&lt;br /&gt;
| étude 3H &lt;br /&gt;
| &lt;br /&gt;
| schématique 2H &lt;br /&gt;
| 12h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| application mobile&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|2H&lt;br /&gt;
|4H&lt;br /&gt;
|4H&lt;br /&gt;
|&lt;br /&gt;
|10h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avancement du Projet==&lt;br /&gt;
&lt;br /&gt;
===Semaine 1===&lt;br /&gt;
&lt;br /&gt;
Nous avons été confronté à différents choix matériel notamment dans la référence des accéléromètres ou encore le moyen de transmission des données. &lt;br /&gt;
&lt;br /&gt;
L'accéléromètre doit être assez précis pour des petites variations de position. Après avoir parcouru les catalogues de fournisseurs nous avons trouvé le ADXL335. &lt;br /&gt;
&lt;br /&gt;
De plus, nous devions choisir le mode de transmission des données vers un smartphone. Nous avions le choix entre un module Bluetooth et un module wifi. Le module Bluetooth est plus rapide que le module bluetooth. Cependant, ce dernier ne consomme pas beaucoup de charge de la batterie du smartphone mais il fonctionne  essentiellement sur de petites distances et avec des données de petite taille. En revanche le module WIFI lui consomme beaucoup plus de batterie mais couvre des distances beaucoup plus grandes ainsi que des tailles de données beaucoup plus importantes.&lt;br /&gt;
&lt;br /&gt;
Finalement, nous avons opté pour le module WIFI pour limiter le moins possible l'utilisateur en ce qui concerne la distance entre les appareils et le volume de données transmis.&lt;br /&gt;
&lt;br /&gt;
*Confirmation de la liste de matériel: &lt;br /&gt;
  *accéléromètre ADXL335&lt;br /&gt;
  *Smartphone sous Android&lt;br /&gt;
  *15 longs fils mâle-femelle, mâle-mâle&lt;br /&gt;
  *Arduino pro -mini&lt;br /&gt;
  *Module WIFI&lt;br /&gt;
&lt;br /&gt;
===Semaine 2===&lt;br /&gt;
&lt;br /&gt;
Réalisation d'un cahier des charges fonctionnelles avec les outils de gestions de projet telle que le FAST, la bete à corne, SADT.&lt;br /&gt;
[https://docs.google.com/document/d/1e6291kst6O6Ic0IWnadg5l10HiiZeqsw72GxfXC7O7U/edit cahier des charges fonctionnels]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:cad1_1.PNG| 900px ]]&lt;br /&gt;
[[Fichier:cad1.PNG| 900px ]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
&lt;br /&gt;
En début de semaine, nous avons reçus un premier capteur, l'accéLéromètre 10 DOF, ainsi que l'arduino MEGA qui sera utilisé pour l’acquisition des données. L'accéléromètre 10DOF incorpore un gyroscope et un magnétomètre. Ceux-ci nous permettront d'avoir une meilleure précision des mesures notamment avec la mesure des orientations (vitesses angulaires).&lt;br /&gt;
&lt;br /&gt;
Nous avons ensuite étudié le capteur et réalisé le premier montage en connectant ce capteur de manière à pouvoir lire les données récupérées en direct sur l'ordinateur.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:10dof.PNG| 500px ]]&lt;br /&gt;
&lt;br /&gt;
Nous avons ensuite réalisé un premier programme afin de lire les données du 10DOF que nous testerons la semaine suivante.&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
&lt;br /&gt;
Nous avons débuté le traitement des données directement sur le MEGA en réalisant de code de récupération de l'angle réalisé par l'accéléromètre.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Nous nous sommes rendus compte que les calculs ne sont pas réalisés correctement par le MEGA. En effet la mesure de l'angle n'était pas précis car le MEGA n'a pas assez de puissance de calcul pour faire les différentes divisions.  &lt;br /&gt;
&lt;br /&gt;
[[Fichier:Exempleaccelero.PNG| 200px ]]&lt;br /&gt;
&lt;br /&gt;
Nous avons donc décidé que le MEGA servira uniquement à récupérer les données et à les envoyer via module WIFI. Ce sera donc à l'application Android d'effectuer le traitement des données.&lt;br /&gt;
&lt;br /&gt;
Nous avons ensuite étudié le module WIFI ESP8266 que nous utiliserons, afin de nous faire une idée de son utilisation.&lt;br /&gt;
&lt;br /&gt;
Nous avons également installé les logiciels nécessaires ( Android studio,... )&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
&lt;br /&gt;
Nous nous sommes intéressées  au module wifi, en commençant par lire la fiche technique de l'esp 8266, nous avons également cherché les différents types d'exemples . &lt;br /&gt;
&lt;br /&gt;
Des recherches sur le mode de connexion entre le smartphone et le Mega à travers le module WIFI ont également été effectuer dans le but de se faire une idée, nous hésitons sur l'utilisation de Sockets UDP , ou de réaliser une transmission en TCP .&lt;br /&gt;
&lt;br /&gt;
Le programme réalisée lors de la séance précédente a été testé, notamment les tests de récupération des données de l'accéléromètre 10-DOF sur le Mega.&lt;br /&gt;
&lt;br /&gt;
Le code pour les autres accéléromètres en attendant la livraison de l'ADXL335 également été entamé.&lt;br /&gt;
&lt;br /&gt;
Nous avons également rencontré un certain nombre de problème :&lt;br /&gt;
&lt;br /&gt;
*Afin se connecter en WIFI à partir de n’importe où, nous avons décidé de se connecter premièrement à un réseau standard (point d'accès fourni par le smartphone dans un premier temps) puis de modifier le réseau sur lequel nous sommes connecté à partir du smartphone. Ce dernier enverra le SSID et le mot de passe du nouveau réseau souhaité au module et on  modifiera le paramètre de  cette manière.&lt;br /&gt;
&lt;br /&gt;
*La possibilité et l'utilité de l'ajout de l'acquisition des données du gyroscope pour avoir plus de précision sur l'accéléromètre 10-DOF qui sera sur la tête.&lt;br /&gt;
&lt;br /&gt;
En parallèle, nous avons également avancé avec la création d'une application android pour la réception et l'affichage de données.&lt;br /&gt;
Nous avons décidé de:&lt;br /&gt;
* faire une page d'accueil dans laquelle le kinésithérapeute devra appuyer sur un bouton lorsqu'il aura bien positionné le patient pour enregistrer la bonne position.&lt;br /&gt;
* à l'appui du bouton, le smartphone va contacter le module WIFI à travers un message broadcast (en utilisant une communication UDP) dans le réseau. &lt;br /&gt;
* Le MODULE WIFI, qui est déjà en attente d'une trame venant du smartphone, reçoit le message broadcast, extrait l'adresse IP du smartphone, puis, lui envoie des données du capteur.&lt;br /&gt;
* le smartphone, à son tour va utiliser ces données pour calculer les angles d'inclinaison sur les différents axes et les afficher. Notons que les premiers angles calculés sont ceux correspondant à la bonne position. &lt;br /&gt;
* A intervalle régulier, le module ESP va envoyer de nouvelles données que le smartphone va traiter et comparer avec les angles de la bonne position et prévenir le patient si la position a changer.&lt;br /&gt;
&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
* Réception du matériel&lt;br /&gt;
Nous avons commencé par étudier l'accéléromètre reçu, en effet la référence de ce dernier est ADXL345 et est digital à l’inverse de celui choisi qui était analogique. De ce fait, nous avons modifié une partie du cahier des charges.&lt;br /&gt;
&lt;br /&gt;
Les accéléromètres adxl345 sont alimentés en 3.3V et sont digitaux. Par conséquent, nous n'aurons plus besoin de sortie analogique. No  &lt;br /&gt;
&lt;br /&gt;
L'établissement des activités nécessairement et documentation sur le choix des sockets à utiliser pour l'envoi des données a également été entamé.&lt;br /&gt;
&lt;br /&gt;
*fonctionnement : accéléromètres digitaux pouvant fonctionner en SPI comme en I2C et supportant 3.3V. Résolution: 10 bits, régler en mode +/-2g. Donc les valeurs de notre registre de données seront dans la plage [-512 ,512]. Mais puisque nous ne mesurons que la force gravitationnelle, nous aurons des valeurs comprises entre [-256,256] qui est la plage correspondant à -/1g. 1g correspond à la valeur de 9.80m/s2.&lt;br /&gt;
&lt;br /&gt;
*type de données collectées: des entiers de -512 à 512 qu'il faudra transformer de telle sorte à avoir l'inclinaison de l'accéléromètre selon l'axe x, y et z&lt;br /&gt;
 &lt;br /&gt;
Coté Smartphone: &lt;br /&gt;
&lt;br /&gt;
*Créations de la page d'accueil et de la page de visualisation des angles d'inclinaisons&lt;br /&gt;
&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
&lt;br /&gt;
Nous avons réalisé l'étude de l'accéléromètre digital, nous devrons nous servir des ports digitales du MEGA et choisir l’accéléromètre à partir duquel nous récupérons les données grâce à un chip select. Pour cela nous devrons utiliser la bibliothèque SPI.h et brancher le CS de l'accéléromètre à des digital pin du mega.&lt;br /&gt;
&lt;br /&gt;
Le deuxième problème survenue est dans la tension limite de l'accéléromètre, en effet ce dernier ne peut supporter que du 3.3V, hors la carte MEGA, elle, délivre du 5V.&lt;br /&gt;
&lt;br /&gt;
De plus le signal sortant de l'accéléromètre est de l'ordre du 3.3V ce qui pourrais être problématique au niveau de la sensibilité du MEGA qui pourrais alors détecter des données biaisées. Nous serons donc amené à réaliser une carte pour faire l'adaptation d'impédance entre  la carte MEGA et l'accéléromètre.&lt;br /&gt;
&lt;br /&gt;
===Semaine 8===&lt;br /&gt;
Nous avons réalisé une carte électronique grâce au logiciel fritzing pour réaliser l’adaptation de tensions entre l’accéléromètre adxl345 et la carte MEGA. En effet l'accéléromètre supporte des tensions maximales de 3.3V alors que le MEGA donne en sortie 5V.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Coté Smartphone:&lt;br /&gt;
&lt;br /&gt;
* création de la page d'accueil avec implémentation du code pour la communication UDP entre le smartphone et l'ESP8266.&lt;br /&gt;
* Nous rencontrons des problèmes en ce qui concerne la l'implémentation du programme coté ESP.&lt;br /&gt;
&lt;br /&gt;
===Semaine 9===&lt;br /&gt;
&lt;br /&gt;
Nous avons testé la carte électronique faite la semaine précédente. Elle ne fonctionne pas et nous n'avons pas pu comprendre pourquoi. Par conséquent, nous avons changé de microcontrolleur. Nous avons reçu un arduino pro mini 3.3V compatible avec nos capteurs. Nous commençons par conséquent à recueillir les données du capteurs. &lt;br /&gt;
&lt;br /&gt;
Etude de la partie communication entre l'arduino pro mini et l'ESP8266 pour l'envoie des données du capteur.&lt;br /&gt;
&lt;br /&gt;
Partie smartphone:&lt;br /&gt;
succès de la connexion au wi-fi partagé d'un smartphone. Coté ESP comme coté smartphone.&lt;/div&gt;</summary>
		<author><name>Mdiop</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P18&amp;diff=41912</id>
		<title>IMA4 2016/2017 P18</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P18&amp;diff=41912"/>
				<updated>2017-05-10T01:05:13Z</updated>
		
		<summary type="html">&lt;p&gt;Mdiop : /* Semaine 6 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===Présentation générale du projet=== &lt;br /&gt;
&lt;br /&gt;
===Objectif du projet===&lt;br /&gt;
Rééducation de la position de la tête.&lt;br /&gt;
&lt;br /&gt;
===Contexte===&lt;br /&gt;
L’évolution de l'informatique a engendré une modification de la place du salarié dans l'entreprise. Ainsi, nombreux sont ceux qui travaillent dans un bureau face à un ordinateur. De ce fait, il a été remarqué par une association de la santé que les maux de dos sont en majorité dus à une mauvaise hygiène de vie notamment liée à une mauvaise posture au travail.&lt;br /&gt;
 &lt;br /&gt;
C'est après différentes études, notamment un bilan postural montrant où se situe la tête par rapport à une position idéale que l'on a remarqué que ces dernières années, 50% des personnes ayant des maux de dos sont en réalité dûs aux cervicales contre 20 % seulement il y a une dizaine d’années.&lt;br /&gt;
 &lt;br /&gt;
Du constat précédent découle ce projet ayant pour but de faciliter aux kinésithérapeutes la rééducation de la position de la tête des patients se plaignants de leur dos.&lt;br /&gt;
&lt;br /&gt;
=== Description du projet ===&lt;br /&gt;
 &lt;br /&gt;
La rééducation de la posture de la tête chez un kinésithérapeute pourrait être améliorée si le travail pouvait se faire en autonomie.&lt;br /&gt;
 &lt;br /&gt;
Ce projet propose de réaliser un système de suivi de la position de la tête d'un patient en rééducation grâce à un monitoring continu de la position de la tête, ainsi qu'un mécanisme pour aider le patient à reprendre une position correcte. En effet on lancera le système pendant environ 30 min durant lesquelles nous détecterons les variations de position et indiquerons au patient le moment ou sa position n’est plus bonne.&lt;br /&gt;
 &lt;br /&gt;
Ce projet devra ainsi comparer la position actuelle de la tête du patient à une position idéale (celle de la verticale) et lui signaler s’il doit ou non ajuster sa position.&lt;br /&gt;
&lt;br /&gt;
=== Choix techniques : matériel et logiciels ===&lt;br /&gt;
 &lt;br /&gt;
Nous avons choisi d’utiliser des accéléromètres afin de pouvoir récupérer des données décrivant la position de la tête. Les accéléromètres nous permettent de calculer l'angle d'inclinaison à partir de la force gravitationnelle qu'ils peuvent mesurer selon les trois axes. Lorsque la position idéale du patient sera choisie par le médecin, nous pourrons enregistrer cette position en mémorisant l'inclinaison de chaque accéléromètre pour cette position. Ainsi un changement de position sera identifié par une variation des angles d'inclinaison précédemment pris. Nous allons utilisé les accéléromètres analogiques de type adxl335. Une fois que nous aurons à disposition les valeurs de l'accéléromètre et, par conséquent les angles d'inclinaison, nous aurons besoin d'un moyen d'affichage des ces données. Pour ce faire, nous avons opté dans un premier temps pour une affichage sur smartphone. Les données vont être envoyées au smartphone à travers un module WIFI connectés au même réseau que le smartphone.  En récapitulant, nous aurons finalement besoin de:&lt;br /&gt;
* 5 accéléromètres adxl335.&lt;br /&gt;
* un arduino Mega&lt;br /&gt;
* un module WIFI &lt;br /&gt;
* des fils pour la liaison.&lt;br /&gt;
&lt;br /&gt;
===Calendrier prévisionnel===&lt;br /&gt;
&lt;br /&gt;
====Liste des tâches à effectuer====&lt;br /&gt;
Etude et choix des accéléromètres&lt;br /&gt;
*fonctionnement : accéléromètres à sortie analogique. Nous aurons donc besoin de 3 sorties analogiques par capteur (donc 3*5 sorties analogiques)&lt;br /&gt;
&lt;br /&gt;
*type de données collectées: force gravitationnelle selon les trois axes qu'il faudra transformer de telle sorte à avoir l'inclinaison de l'accéléromètre par rapport à l'axe x, y et z&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*mise en œuvre du programme d'acquisition.&lt;br /&gt;
&lt;br /&gt;
Moyen d'affichage des résultats &lt;br /&gt;
&lt;br /&gt;
*si position correcte par rapport à celle idéale ;&lt;br /&gt;
*envoi des résultats sur un smartphone.&lt;br /&gt;
&lt;br /&gt;
Réalisation d'un prototype &lt;br /&gt;
 &lt;br /&gt;
*identification et acquisition de la position idéale à l'aide des accéléromètres placées le long de la colonne vertébrale;&lt;br /&gt;
*notification au patient (à travers le smartphone) lorsqu'une position différente de celle idéale a été détectée.&lt;br /&gt;
&lt;br /&gt;
====Calendrier====&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! Prélude !! Heures S1 !! Heures S2 !! Heures S3 !! Heures S4 !! Heures S5 !! Heures S6 !! Heures S7 !! Heures S8 !! Heures S9 !! Heures S10 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Définition cahier des charges &lt;br /&gt;
| 2H&lt;br /&gt;
| &lt;br /&gt;
| 8H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| documentation&lt;br /&gt;
| 2h&lt;br /&gt;
| 4h&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 4h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| liste du matériel &lt;br /&gt;
| &lt;br /&gt;
| 2h&lt;br /&gt;
| 6h&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| étude du module Wi-fi&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 8H&lt;br /&gt;
| 2H&lt;br /&gt;
| 4H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 12h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| étude, programmation, câblage du 10 DOF &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 4H&lt;br /&gt;
| 8H&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Accéléromètre &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| 2H&lt;br /&gt;
| étude 3H &lt;br /&gt;
| &lt;br /&gt;
| schématique 2H &lt;br /&gt;
| 12h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| application mobile&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|2H&lt;br /&gt;
|4H&lt;br /&gt;
|4H&lt;br /&gt;
|&lt;br /&gt;
|10h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avancement du Projet==&lt;br /&gt;
&lt;br /&gt;
===Semaine 1===&lt;br /&gt;
&lt;br /&gt;
Nous avons été confronté à différents choix matériel notamment dans la référence des accéléromètres ou encore le moyen de transmission des données. &lt;br /&gt;
&lt;br /&gt;
L'accéléromètre doit être assez précis pour des petites variations de position. Après avoir parcouru les catalogues de fournisseurs nous avons trouvé le ADXL335. &lt;br /&gt;
&lt;br /&gt;
De plus, nous devions choisir le mode de transmission des données vers un smartphone. Nous avions le choix entre un module Bluetooth et un module wifi. Le module Bluetooth est plus rapide que le module bluetooth. Cependant, ce dernier ne consomme pas beaucoup de charge de la batterie du smartphone mais il fonctionne  essentiellement sur de petites distances et avec des données de petite taille. En revanche le module WIFI lui consomme beaucoup plus de batterie mais couvre des distances beaucoup plus grandes ainsi que des tailles de données beaucoup plus importantes.&lt;br /&gt;
&lt;br /&gt;
Finalement, nous avons opté pour le module WIFI pour limiter le moins possible l'utilisateur en ce qui concerne la distance entre les appareils et le volume de données transmis.&lt;br /&gt;
&lt;br /&gt;
*Confirmation de la liste de matériel: &lt;br /&gt;
  *accéléromètre ADXL335&lt;br /&gt;
  *Smartphone sous Android&lt;br /&gt;
  *15 longs fils mâle-femelle, mâle-mâle&lt;br /&gt;
  *Arduino pro -mini&lt;br /&gt;
  *Module WIFI&lt;br /&gt;
&lt;br /&gt;
===Semaine 2===&lt;br /&gt;
&lt;br /&gt;
Réalisation d'un cahier des charges fonctionnelles avec les outils de gestions de projet telle que le FAST, la bete à corne, SADT.&lt;br /&gt;
[https://docs.google.com/document/d/1e6291kst6O6Ic0IWnadg5l10HiiZeqsw72GxfXC7O7U/edit cahier des charges fonctionnels]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:cad1_1.PNG| 900px ]]&lt;br /&gt;
[[Fichier:cad1.PNG| 900px ]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
&lt;br /&gt;
En début de semaine, nous avons reçus un premier capteur, l'accéLéromètre 10 DOF, ainsi que l'arduino MEGA qui sera utilisé pour l’acquisition des données. L'accéléromètre 10DOF incorpore un gyroscope et un magnétomètre. Ceux-ci nous permettront d'avoir une meilleure précision des mesures notamment avec la mesure des orientations (vitesses angulaires).&lt;br /&gt;
&lt;br /&gt;
Nous avons ensuite étudié le capteur et réalisé le premier montage en connectant ce capteur de manière à pouvoir lire les données récupérées en direct sur l'ordinateur.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:10dof.PNG| 500px ]]&lt;br /&gt;
&lt;br /&gt;
Nous avons ensuite réalisé un premier programme afin de lire les données du 10DOF que nous testerons la semaine suivante.&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
&lt;br /&gt;
Nous avons débuté le traitement des données directement sur le MEGA en réalisant de code de récupération de l'angle réalisé par l'accéléromètre.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Nous nous sommes rendus compte que les calculs ne sont pas réalisés correctement par le MEGA. En effet la mesure de l'angle n'était pas précis car le MEGA n'a pas assez de puissance de calcul pour faire les différentes divisions.  &lt;br /&gt;
&lt;br /&gt;
[[Fichier:Exempleaccelero.PNG| 200px ]]&lt;br /&gt;
&lt;br /&gt;
Nous avons donc décidé que le MEGA servira uniquement à récupérer les données et à les envoyer via module WIFI. Ce sera donc à l'application Android d'effectuer le traitement des données.&lt;br /&gt;
&lt;br /&gt;
Nous avons ensuite étudié le module WIFI ESP8266 que nous utiliserons, afin de nous faire une idée de son utilisation.&lt;br /&gt;
&lt;br /&gt;
Nous avons également installé les logiciels nécessaires ( Android studio,... )&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
&lt;br /&gt;
Nous nous sommes intéressées  au module wifi, en commençant par lire la fiche technique de l'esp 8266, nous avons également cherché les différents types d'exemples . &lt;br /&gt;
&lt;br /&gt;
Des recherches sur le mode de connexion entre le smartphone et le Mega à travers le module WIFI ont également été effectuer dans le but de se faire une idée, nous hésitons sur l'utilisation de Sockets UDP , ou de réaliser une transmission en TCP .&lt;br /&gt;
&lt;br /&gt;
Le programme réalisée lors de la séance précédente a été testé, notamment les tests de récupération des données de l'accéléromètre 10-DOF sur le Mega.&lt;br /&gt;
&lt;br /&gt;
Le code pour les autres accéléromètres en attendant la livraison de l'ADXL335 également été entamé.&lt;br /&gt;
&lt;br /&gt;
Nous avons également rencontré un certain nombre de problème :&lt;br /&gt;
&lt;br /&gt;
*Afin se connecter en WIFI à partir de n’importe où, nous avons décidé de se connecter premièrement à un réseau standard (point d'accès fourni par le smartphone dans un premier temps) puis de modifier le réseau sur lequel nous sommes connecté à partir du smartphone. Ce dernier enverra le SSID et le mot de passe du nouveau réseau souhaité au module et on  modifiera le paramètre de  cette manière.&lt;br /&gt;
&lt;br /&gt;
*La possibilité et l'utilité de l'ajout de l'acquisition des données du gyroscope pour avoir plus de précision sur l'accéléromètre 10-DOF qui sera sur la tête.&lt;br /&gt;
&lt;br /&gt;
En parallèle, nous avons également avancé avec la création d'une application android pour la réception et l'affichage de données.&lt;br /&gt;
Nous avons décidé de:&lt;br /&gt;
* faire une page d'accueil dans laquelle le kinésithérapeute devra appuyer sur un bouton lorsqu'il aura bien positionné le patient pour enregistrer la bonne position.&lt;br /&gt;
* à l'appui du bouton, le smartphone va contacter le module WIFI à travers un message broadcast (en utilisant une communication UDP) dans le réseau. &lt;br /&gt;
* Le MODULE WIFI, qui est déjà en attente d'une trame venant du smartphone, reçoit le message broadcast, extrait l'adresse IP du smartphone, puis, lui envoie des données du capteur.&lt;br /&gt;
* le smartphone, à son tour va utiliser ces données pour calculer les angles d'inclinaison sur les différents axes et les afficher. Notons que les premiers angles calculés sont ceux correspondant à la bonne position. &lt;br /&gt;
* A intervalle régulier, le module ESP va envoyer de nouvelles données que le smartphone va traiter et comparer avec les angles de la bonne position et prévenir le patient si la position a changer.&lt;br /&gt;
&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
* Réception du matériel&lt;br /&gt;
Nous avons commencé par étudier l'accéléromètre reçu, en effet la référence de ce dernier est ADXL345 et est digital à l’inverse de celui choisi qui était analogique. De ce fait, nous avons modifié une partie du cahier des charges.&lt;br /&gt;
&lt;br /&gt;
Les accéléromètres adxl345 sont alimentés en 3.3V et sont digitaux. Par conséquent, nous n'aurons plus besoin de sortie analogique. No  &lt;br /&gt;
&lt;br /&gt;
L'établissement des activités nécessairement et documentation sur le choix des sockets à utiliser pour l'envoi des données a également été entamé.&lt;br /&gt;
&lt;br /&gt;
*fonctionnement : accéléromètres digitaux pouvant fonctionner en SPI comme en I2C et supportant 3.3V. Résolution: 10 bits, régler en mode +/-2g. Donc les valeurs de notre registre de données seront dans la plage [-512 ,512]. Mais puisque nous ne mesurons que la force gravitationnelle, nous aurons des valeurs comprises entre [-256,256] qui est la plage correspondant à -/1g. 1g correspond à la valeur de 9.80m/s2.&lt;br /&gt;
&lt;br /&gt;
*type de données collectées: des entiers de -512 à 512 qu'il faudra transformer de telle sorte à avoir l'inclinaison de l'accéléromètre selon l'axe x, y et z&lt;br /&gt;
 &lt;br /&gt;
Coté Smartphone: &lt;br /&gt;
&lt;br /&gt;
*Créations de la page d'accueil et de la page de visualisation des angles d'inclinaisons&lt;br /&gt;
&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
&lt;br /&gt;
Nous avons réalisé l'étude de l'accéléromètre digital, nous devrons nous servir des ports digitales du MEGA et choisir l’accéléromètre à partir duquel nous récupérons les données grâce à un chip select. Pour cela nous devrons utiliser la bibliothèque SPI.h et brancher le CS de l'accéléromètre à des digital pin du mega.&lt;br /&gt;
&lt;br /&gt;
Le deuxième problème survenue est dans la tension limite de l'accéléromètre, en effet ce dernier ne peut supporter que du 3.3V, hors la carte MEGA, elle, délivre du 5V.&lt;br /&gt;
&lt;br /&gt;
De plus le signal sortant de l'accéléromètre est de l'ordre du 3.3V ce qui pourrais être problématique au niveau de la sensibilité du MEGA qui pourrais alors détecter des données biaisées. Nous serons donc amené à réaliser une carte pour faire l'adaptation d'impédance entre  la carte MEGA et l'accéléromètre.&lt;br /&gt;
&lt;br /&gt;
===Semaine 8===&lt;br /&gt;
Nous avons réalisé une carte électronique grâce au logiciel fritzing pour réaliser l’adaptation de tensions entre l’accéléromètre adxl345 et la carte MEGA. En effet l'accéléromètre supporte des tensions maximales de 3.3V alors que le MEGA donne en sortie 5V.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Coté Smartphone:&lt;br /&gt;
&lt;br /&gt;
* création de la page d'accueil avec implémentation du code pour la communication UDP entre le smartphone et l'ESP8266.&lt;br /&gt;
* Nous rencontrons des problèmes en ce qui concerne la l'implémentation du programme coté ESP.&lt;br /&gt;
&lt;br /&gt;
===Semaine 9===&lt;br /&gt;
&lt;br /&gt;
Nous avons testé la carte électronique faite la semaine précédente. Elle ne fonctionne pas et nous n'avons pas pu comprendre pourquoi. Par conséquent, nous avons changé de microcontrolleur. Nous avons reçu un arduino pro mini 3.3V compatible avec nos capteurs. Nous commençons par conséquent à recueillir les données du capteurs. &lt;br /&gt;
&lt;br /&gt;
Partie smartphone:&lt;br /&gt;
succès de la connexion au wi-fi partagé d'un smartphone. Coté ESP comme coté smartphone.&lt;/div&gt;</summary>
		<author><name>Mdiop</name></author>	</entry>

	</feed>