Surveillance passive du sommeil : Différence entre versions
(→Accéléromètre) |
(→Codes) |
||
(146 révisions intermédiaires par 4 utilisateurs non affichées) | |||
Ligne 1 : | Ligne 1 : | ||
+ | <include nopre noesc src="/home/pedago/pimasc/include/video-SurveillanceSommeil-iframe.html" /> | ||
__TOC__ | __TOC__ | ||
<br style="clear: both;"/> | <br style="clear: both;"/> | ||
− | |||
=Présentation générale du projet= | =Présentation générale du projet= | ||
==Contexte== | ==Contexte== | ||
Ligne 25 : | Ligne 25 : | ||
* Un mode actif (transmission des données régulière vers un smartphone) pour traiter et analyser en temps réel le sommeil | * Un mode actif (transmission des données régulière vers un smartphone) pour traiter et analyser en temps réel le sommeil | ||
− | + | Le contrôle de ce capteur et ses différents modes s’effectue à travers une application. L’application permet également de stocker les données enregistrées et d’analyser sous forme de graphe le sommeil. | |
− | |||
=Description du projet= | =Description du projet= | ||
Ligne 54 : | Ligne 53 : | ||
==Description du capteur== | ==Description du capteur== | ||
Le capteur passif à glisser sous le matelas d'une personne est une carte électronique qui permet de surveiller et d'enregistrer les différentes phases du sommeil en mesurant et analysant les déplacements de l'utilisateur durant le sommeil. | Le capteur passif à glisser sous le matelas d'une personne est une carte électronique qui permet de surveiller et d'enregistrer les différentes phases du sommeil en mesurant et analysant les déplacements de l'utilisateur durant le sommeil. | ||
− | |||
− | |||
− | |||
=Cahier des charges= | =Cahier des charges= | ||
Ligne 62 : | Ligne 58 : | ||
Pour créer notre capteur de sommeil : | Pour créer notre capteur de sommeil : | ||
− | * Un accéléromètre pour détecter les mouvements du dormeur [<span style="color: green">fourni le 28/01/2015</span>] [<span style="color: blue;">un 2ème fourni le 29/01/2015</span>] [<span style="color: green;">2 Lilypad fournis le 11/02/2015</span>] | + | * Un accéléromètre pour détecter les mouvements du dormeur [<span style="color: green">fourni le 28/01/2015</span>] [<span style="color: blue;">un 2ème fourni le 29/01/2015</span>] [<span style="color: green;">2 Lilypad fournis le 11/02/2015</span>][<span style="color: green;">Récupéré le 18/05/2015</span>] |
* Éventuellement, une sonde de température pour déterminer la chaleur rejetée par le dormeur [<span style="color: lightgreen">disponible au 28/01/2015 en E304</span>] | * Éventuellement, une sonde de température pour déterminer la chaleur rejetée par le dormeur [<span style="color: lightgreen">disponible au 28/01/2015 en E304</span>] | ||
* En fonction des premiers résultats obtenus par l'accéléromètre, on pourrait être amené à utiliser d'autres composants | * En fonction des premiers résultats obtenus par l'accéléromètre, on pourrait être amené à utiliser d'autres composants | ||
Ligne 68 : | Ligne 64 : | ||
==Base== | ==Base== | ||
Pour notre base à poser sur le chevet et reliée au capteur : | Pour notre base à poser sur le chevet et reliée au capteur : | ||
− | * Un arduino pour traiter les données [<span style="color: green">fourni le 28/01/2015</span>] | + | * Un arduino pour traiter les données [<span style="color: green">fourni le 28/01/2015</span>][<span style="color: green;">Récupéré le 18/05/2015</span>] |
− | * Un shield Wireless SD pour stocker et transmettre les données [<span style="color: green">fourni le 28/01/2015</span>] [<span style="color: blue;">un shield SD fourni le 29/01/2015</span>] | + | * Un shield Wireless SD pour stocker et transmettre les données [<span style="color: green">fourni le 28/01/2015</span>] [<span style="color: blue;">un shield SD fourni le 29/01/2015</span>][<span style="color: green;">Récupéré le 18/05/2015</span>] |
− | * Une carte micro-SD 2Go [<span style="color: green">fourni le 28/01/2015</span>] | + | * Une carte micro-SD 2Go [<span style="color: green">fourni le 28/01/2015</span>][<span style="color: green;">Récupéré le 18/05/2015</span>] |
− | * Un adaptateur pour carte micro-SD [<span style="color: green">fourni le 29/01/2015</span>] | + | * Un adaptateur pour carte micro-SD [<span style="color: green">fourni le 29/01/2015</span>][<span style="color: green;">Récupéré le 18/05/2015</span>] |
− | * Un bouton pour commander le début et la fin de la surveillance de sommeil | + | * Un bouton pour commander le début et la fin de la surveillance de sommeil[<span style="color: green;">Récupéré le 18/05/2015</span>] |
− | * Un bouton pour commander le changement de mode | + | * Un bouton pour commander le changement de mode[<span style="color: green;">Récupéré le 18/05/2015</span>] |
− | * Une alimentation avec prise secteur pour alimenter la base (carte Arduino Uno) [<span style="color: green">fournie le 05/02/2015</span>] | + | * Une alimentation avec prise secteur pour alimenter la base (carte Arduino Uno) [<span style="color: green">fournie le 05/02/2015</span>][<span style="color: green;">Récupéré le 18/05/2015</span>] |
− | * Un shield horloge temps réel : MOD-RTC [<span style="color: green">fourni le 05/02/2015</span>] | + | * Un shield horloge temps réel : MOD-RTC [<span style="color: green">fourni le 05/02/2015</span>][<span style="color: green;">Récupéré le 18/05/2015</span>] |
− | * BLE nRF8001 [http://www.nordicsemi.com/eng/Products/Bluetooth-Smart-Bluetooth-low-energy/nRF8001] [<span style="color: green;">1 fourni le 11/2/2015</span>] | + | * BLE nRF8001 [http://www.nordicsemi.com/eng/Products/Bluetooth-Smart-Bluetooth-low-energy/nRF8001] [<span style="color: green;">1 fourni le 11/2/2015</span>][<span style="color: green;">Récupéré le 18/05/2015</span>] |
==Application mobile== | ==Application mobile== | ||
Pour développer l'application mobile : | Pour développer l'application mobile : | ||
− | * Une tablette Android | + | * Une tablette Android[<span style="color: green;">Récupéré le 18/05/2015</span>] |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
=Planning prévisionnel= | =Planning prévisionnel= | ||
Ligne 111 : | Ligne 99 : | ||
** sur différentes personnes (enfant, adulte, âgé) | ** sur différentes personnes (enfant, adulte, âgé) | ||
− | ==Étape 3 | + | ==Étape 3== |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
* Programmation du mode de fonctionnement : alarme et actif | * Programmation du mode de fonctionnement : alarme et actif | ||
− | * Développement d'une application Android pour le | + | * Développement d'une application Android pour le contrôle du capteur |
− | ** Synchronisation des données avec graphes détaillant les différentes étapes du sommeil | + | * Recherche d’un algorithme pour l’étude du sommeil à partir des données enregistrées par le capteur |
+ | * Suivi du sommeil dans l'application : | ||
+ | ** Synchronisation des données avec graphes détaillant la qualité du sommeil, les différentes étapes du sommeil | ||
** Durée du sommeil | ** Durée du sommeil | ||
− | ** Statistiques sur les jours passés | + | ** Statistiques sur les jours passés |
* Tests des trois programmes en situation simulé et réel | * Tests des trois programmes en situation simulé et réel | ||
− | ==Étape | + | ==Étape 4== |
* Création de la carte PCB finale | * Création de la carte PCB finale | ||
− | |||
− | |||
− | |||
=Avancement du Projet= | =Avancement du Projet= | ||
Ligne 225 : | Ligne 205 : | ||
** L'application démarre, active le bluetooth et scanne les environs. Il ne reste plus qu'à tester avec l'ensemble Arduino comprenant le BLE nRF8001 afin de s'y connecter | ** L'application démarre, active le bluetooth et scanne les environs. Il ne reste plus qu'à tester avec l'ensemble Arduino comprenant le BLE nRF8001 afin de s'y connecter | ||
− | + | === Bilan Mi-chemin === | |
− | + | * ARDUINO : | |
− | + | ** 80% du programme réalisé | |
− | + | *** Module SD : OK | |
− | + | *** Module Accéléromètre : OK | |
− | + | *** Module Horloge temps réel : OK | |
− | + | ** 20% du programme à tester ou réaliser | |
− | + | *** Module Bluetooth : Test de connexion sur l'application Android et transfert du fichier par alarme ou en continu | |
− | + | * MATLAB : | |
− | + | ** 40% des tests réalisés sur les données | |
− | + | *** Fonctionnement de MatLab pour le traitement des données : OK | |
− | + | ** 60% des tests à réaliser sur les données | |
− | + | *** Utilisation du meilleur filtrage possible (à voir avec le professeur référent M. Boé) | |
− | + | * ANDROID : | |
− | + | ** 10% du programme réalisé: | |
− | + | *** Tester la connexion sur le boitier Arduino comprenant le nRF8001 | |
− | + | *** Tester l'envoie et la réception de caractères entre l'application Android et l'Arduino depuis la liaison série | |
− | + | ** 90% à réaliser : | |
− | + | *** Synchronisation des données avec graphes détaillant les différentes étapes du sommeil (réfléchir sur comment différencier les étapes du sommeil à partir des données récupérées) | |
− | + | *** Durée total du sommeil | |
− | + | *** Statistiques sur les jours passés | |
− | + | *** Programmation du mode de fonctionnement : alarme et actif | |
+ | |||
+ | ==Semaine 6 (du 09/03/2015 au 15/03/2015)== | ||
+ | |||
+ | *Rédaction et Recherche | ||
+ | ** Etablissement d'un cahier de charge de fonctionnement (limites et contraintes) selon les différents mode du DREAMER | ||
+ | |||
+ | * Programmation ARDUINO | ||
+ | ** Communication bluetooth avec l'application Android réussie | ||
+ | ** Programme de réception de commande, de comparaison avec les commandes de référence et de traitement de commande | ||
+ | ** Création des librairies BLE.h, RTC.h, DREAMER.h pour épurer le programme principal. | ||
+ | |||
+ | * Programmation ANDROID | ||
+ | ** Application SleepWatcher pour tester la communication BLE réussie : le téléphone scanne les environs, repère les appareils compatible avec le BLE (dont le nRF8001), s'y connecte, affiche l'adresse du dispositif auquel il est connecté, et permet l'envoie et la réception de données. | ||
+ | |||
+ | ==Semaine 7 (du 16/03/2015 au 22/03/2015)== | ||
+ | * Programmation ANDROID | ||
+ | ** Création d'une application bloc-note TestFile pour sauvegarder un texte dans un fichier et l'afficher. Le fichier est crée dans la "mémoire externe" du téléphone: sa carte disque dur et non sa ROM. Il n'est donc pas nécessaire d'avoir l'accès Root pour accéder au fichier depuis un explorateur. | ||
+ | ** Envoie de commande par bluetooth à l'Arduino par l'intermédiaire de boutons dans l'application. Les commandes sont reçues et reconnues par l'Arduino et devront traiter la fonctionnalité désiré. | ||
+ | ** A la réception d'une donnée par BLE (test réalisé avec quelques chaînes de caractères), un fichier est crée contenant ces données. | ||
+ | ** A faire : transférer tout le contenu de la carte SD de l'Arduino sur le téléphone lorsqu'elles sont envoyés par BLE (Mode silencieux du capteur). | ||
+ | ** Recherche bibliographique pour créer des graphes dans une application Android: la librairie opensource AChartEngine correspond au projet. Mise en place de la librairie. | ||
+ | ** Création de l'application TestGraph afin de créer quelques graphiques simples : linéaires, barres, camembert, nuage de point. | ||
+ | *** Création d'un graphe à partir de données dans un fichier réussi. En cliquant sur le bouton XGraph, la courbe est crée à partir de flottants séparés par des espaces et sur plusieurs lignes. | ||
+ | *** Les autres boutons affichent des graphiques spécifiques dont les valeurs ont été écrites dans le code de l'application (simplement pour se familiariser à coder différents types de graphes). | ||
+ | * Programmation ARDUINO | ||
+ | ** Programme qui lit les fichiers de l'ensemble de la carte SD | ||
+ | ** Programme qui lit une ligne (un échantillon de mesure = HH:MM:SS X Y Z P R) d'un fichier qui le convertit en byte | ||
+ | ** Programme qui envoie une trame via bluetooth, contenant 3 données d'un échantillon | ||
+ | ** Programme qui transfert à l'application android via bluetooth un fichier contenu dans la carte SD | ||
+ | ** Programme qui transfert à l'application android via bluetooth tout les fichiers contenu dans la carte SD puis les supprime | ||
+ | |||
+ | ==Semaine 8 (du 23/03/2015 au 29/03/2015)== | ||
+ | * Programmation ANDROID | ||
+ | ** Application SleepWatcher : Création d'une nouvelle activité GraphActivity dans l'application qui se lance en appuyant sur le bouton Stat dans DeviceControlActivity. | ||
+ | *** Cette activité se résume pour l'instant à des boutons permettant d'accéder aux différentes courbes des données d'un fichier (1 seul fichier pour le moment). | ||
+ | *** A l'appuie d'un des boutons, la courbe de variation de X ou Y, Z, Pitch, Roll en fonction du temps s'affiche. | ||
+ | *** La prochaine amélioration serait de créer un calendrier intégré dans l'application, avec pour chaque date les données et statistiques correspondante. | ||
+ | * Programmation ARDUINO | ||
+ | ** Développement du programme bluetooth : | ||
+ | *** Éteindre et allumer le bluetooth à l'aide d'interrupteur physique. | ||
+ | *** Éteindre et allumer des LEDs selon l'état de fonctionnement ON/OFF du bluetooth et l'état de fonctionnement ON/OFF du Dreamer. | ||
+ | |||
+ | ==Semaine 9 (du 30/03/2015 au 05/04/2015)== | ||
+ | * Programmation ANDROID | ||
+ | ** Application SleepWatcher : Ajout d'un calendrier dans l'application à partir de l'activité CalendarActivity. | ||
+ | *** Pour chaque date est associé un fichier .txt contenant les données acquisent par l'accéléromètre (si il n'y a pas eu d'acquisition un jour il n'y a pas de fichier correspondant à cette date). Le nom du fchier est associé à la date (par exemple: 040415.txt pour le 4 avril 2015). | ||
+ | *** En cochant une date du calendrier on appuie sur le bouton menu "Stat" pour accéder à une nouvelle activité FileActivity tout en ouvrant le fichier en lecture. | ||
+ | * Programmation ARDUINO | ||
+ | ** Liste des problèmes à régler : | ||
+ | *** Mise à l'état On/OFF pas très fonctionnel : le BLE s'allume tout seul ou ne veut plus s'allumer une fois à l'état OFF. ==> Non résolu | ||
+ | *** Saturation de l'envoi des données du bluetooth à l'application android au bout d'une dizaine de trame envoyée. ==> Non résolu | ||
+ | *** Perte de la valeur d'une variable "nom_fichier" ==> Résolu (chaine de caractère non alloué) | ||
+ | |||
+ | ==Semaine 10 (du 06/04/2015 au 12/04/2015)== | ||
+ | * Rédaction et recherche | ||
+ | ** Réflexion et recherche sur un algorithme permettant de différencier les différentes phases de sommeil durant la nuit à partir des données de l’accéléromètre. | ||
+ | ** Après analyse des articles de recherches sur le sommeil fournis par M.Boé, un élément commun ressort : le nombre de mouvements effectués par le corps par minute tout au long de la nuit. | ||
+ | |||
+ | * Programmation ANDROID | ||
+ | ** Application TestGraph : Implémentation d'un algorithme qui calcule le nombre de mouvements par minute tout en prenant en compte le bruit de l'accéléromètre Lilypad. Une variation de 0.05 g entre 2 valeurs successives d'accélération (sur X, Y ou Z) correspond à un mouvement du dormeur. Pour les angles Pitch et Roll une variation de 3 degrés est interprété par un mouvement. Nous obtenons une 1ère courbe dont le résultat est plutôt satisfaisant à partir d'un fichier test sur toute la nuit de la semaine 4. On aperçoit des pics de mouvements environ toutes les 90 minutes ce qui correspond à la durée d'un cycle de sommeil qui alterne micro-réveil (beaucoup de mouvements), phase de sommeil léger (mouvements réguliers), sommeil profond (peu de mouvements voir nul), sommeil paradoxal (peu de mouvements). La courbe indique une nuit agité avec une succession de pics élevés vers la 220ème minute environ qui correspond au moment où je me suis réveillé durant la nuit. | ||
+ | |||
+ | * Programmation ARDUINO | ||
+ | ** Recherche de solutions pour le fonctionnement ON/OFF du BLE : | ||
+ | *** Gestion du mode OFF dans la fonction "évènements du bluetooth" en prenant en compte d'un booléen qui est mis à vrai par interruption via l'appuie du bouton ==> sans succès (le BLE se réactive automatiquement malgré un delai d'attente) | ||
+ | *** Gestion du mode OFF en dehors de la fonction "évènements du bluetooth" en prenant en compte d'un booléen qui est mis à vrai par interruption via l'appuie du bouton ==> sans succès (le BLE ne se rallume plus si demandé) | ||
+ | *** Gestion du mode OFF dès l'appuie du bouton ==> Impossible car le bouton poussoir agit par interruption et le ble aussi... | ||
+ | *** ==> sans succès | ||
+ | ** Recherche de solutions pour l'envoi des données via bluetooth sans saturation de données dans la liaison (pipe) entre le dreamer et l'application android : | ||
+ | *** Augmentation de la capacité de données dans le "pipe" et de la file d'attente d'envoie de donnée ==> sans succès | ||
+ | *** Changement total du code d'envoi pour la prise en compte d'un ACK fourni par l'application android dès qu'elle reçoit une trame de données, ainsi cela libère le pipe est une nouvelle trame peut être envoyée. (mais transfert d'échantillon de donnée en mode actif et transfert de fichier plus long) ==> à tester | ||
+ | |||
+ | ==Semaine 11 (du 13/04/2015 au 19/04/2015)== | ||
+ | |||
+ | *Programmation ARDUINO | ||
+ | ** Gestion du mode OFF/ON dès l'appuie du bouton lorsque un évènement "disconnect" a lieu (c'est à dire quand le BLE est déconnecté de l'application) et quand l'utilisateur le souhaite : Done | ||
+ | ** Gestion du bouton OFF/ON (booléen déterminant l'état ON/OFF du BLE change selon l'appui sur le bouton) : Done | ||
+ | ** Gestion des LEDs (l'une donne l'état de marche du BLE, l'autre l'état de marche du Dreamer) : Done | ||
+ | ** Gestion du bouton START/STOP du mode silence : Done | ||
+ | ** Gestion du start du mode silence, commandé à partir de l'application : d'abord déconnexion avec l'application, puis délai d'attente pour quitter la page de connexion Dreamer de l'application, puis la commande silence est activée | ||
+ | |||
+ | * Programmation ANDROID | ||
+ | ** Application SleepWatcher : | ||
+ | *** Mode Actif quasi-opérationnel : on coche la case "Mode Actif" pour configurer l'Arduino dans ce mode. Après appuie de "Start", l'Arduino envoie directement par liaison Bluetooth ses données au téléphone. Une led jaune est allumé indiquant l'envoie de donnée. On appuie sur "Stop" pour arrêter l'envoie de données. Les données reçus sont traitées et enregistrées dans un fichier dont le nom est la date actuelle. Seul problème : le RTC bug souvent de façon aléatoire sur l'heure courante (principalement la partie heure). il peut envoyer tout d'abord l'heure exacte (ex: 17:40:02) puis envoyer quelques secondes plus tard une heure improbable (comme 67:40:05). | ||
+ | *** Mode Silence : on coche cette fois-ci la case "Mode Silence". Après appuie de "Start", l'Arduino enregistre ses données sur la carte SD. Une led est allumé indiquant l'enregistrement des données. On appuie sur "Stop" pour arrêter. Lorsque les données ont finis d'être enregistrées sur la carte SD de l'Arduino (dans des fichiers) on peut alors les transférer sur le téléphone (qui va également stocker dans des fichiers) en appuyant sur "Transfert". Les noms sont les mêmes que ceux sur l'Arduino soit les dates d'enregistrements. Durant le transfert les données sont traitées et lorsque l'on reçoit un nom de fichier on crée un nouveau fichier pour enregistrer les données. | ||
+ | *** Réflexion sur le Mode Alarme | ||
+ | |||
+ | ==Semaine 12 (du 20/04/15 au 26/04/15)== | ||
− | + | * Programmation ARDUINO | |
+ | ** Envoi des données via bluetooth sans saturation de données dans la liaison (pipe) entre le dreamer et l'application android : Done | ||
+ | ** Commentaire des différents fonctions des librairies | ||
* Programmation ANDROID | * Programmation ANDROID | ||
− | ** Application | + | ** Application SleepWatcher : |
+ | *** Le calendrier est remplacé par une ListView dans l'activité ListFilesActivity. Les fichiers contenus dans le dossier apparaissent dans la liste avec un numéro d'acquisition et la date d'acquisition. Lorsque l'on clique sur l'un des éléments, un AlertDialog s'affiche. Cet AlertDialog va demander à l’utilisateur de choisir entre : | ||
+ | **** Afficher la courbe | ||
+ | **** Supprimer les données pour cette date | ||
+ | **** Ne rien faire donc retourner à la liste | ||
+ | *** Programmation du mode Alarme. Ce mode est similaire au mode Actif à la différence qu'elle va comparer chaque donnée reçue par Bluetooth (le principe est le même que pour l'affichage des courbes de mouvements). Lorsqu'il n'y a plus de mouvement pendant une certaine durée, une alarme se déclenche. | ||
+ | *** La courbe de sommeil s'affiche à présent au sein de l'activité FileActivity et non plus dans une autre activité. La courbe a été stylisé pour avoir un meilleur rendu. En complément s'affiche également le début et la fin de l'acquisition ainsi que la durée totale. | ||
+ | ** Le schéma ci-dessous résume les 4 activités du programme:<br> | ||
− | == | + | [[Fichier:schema_activity.png|thumb|600px|center|Description de l'application SleepWatcher]]<br> |
− | + | ||
− | + | === Bilan final === | |
− | + | * ARDUINO : | |
− | + | ** 100% du programme réalisé | |
− | + | *** Module SD : OK | |
+ | *** Module Accéléromètre : OK | ||
+ | *** Module Horloge temps réel : OK | ||
+ | *** Module Bluetooth : Ok | ||
+ | ** Remarque : | ||
+ | *** Bon fonctionnement de l'ensemble du programme | ||
+ | *** Le RTC utilisé n'est pas très performant (les valeurs de temps changent de manière non formelles) | ||
+ | *** Les boutons ne sont pas très pratique à utiliser (saute un appui ou un appui entraine un autre) | ||
+ | ** Solution à apporter : | ||
+ | *** Envoie de la date et de l'heure directement de l'application Android, puis comptage du RTC pour déterminer le temps ou utiliser un autre module RTC | ||
+ | *** Changer de boutons | ||
+ | ** Amélioration à apporter : | ||
+ | *** Possibilité de utiliser un MDP pour la connexion bluetooth du Dreamer à partir de l'application | ||
+ | * ANDROID : | ||
+ | ** 90% du programme réalisé | ||
+ | *** Interface de contrôle pour communiquer via BLE avec le capteur. Possibilité de choisir entre différents modes : Actif, Silencieux, Alarme. | ||
+ | *** Liste des acquisitions avec leur dates correspondantes | ||
+ | *** Courbe du sommeil précisant la quantité de mouvements par minute tout au long de l'acquisiton | ||
+ | ** 10 % non réalisé | ||
+ | *** Description des différentes étapes du sommeil dans la courbe | ||
+ | ** Amélioration à apporter : | ||
+ | *** Statistique sur les jours passés | ||
= Fichiers Rendus = | = Fichiers Rendus = | ||
Ligne 264 : | Ligne 361 : | ||
== Accéléromètre == | == Accéléromètre == | ||
− | * | + | * 01/02/2015 Montage pour calibrer l'accéléromètre ADXL 335 |
+ | |||
+ | L'ADXL335 est calibré afin de convertir les valeurs de tensions brutes en unité de force gravitationnelle (en "g"). | ||
+ | Lorsque un axe (X,Y,Z) de l'accéléromètre est précisément aligné avec l'attraction terrestre (attraction gravitationnelle) on appuie sur le bouton afin d'obtenir la valeur minimale ou maximale d'un axe. Concrètement sur la photo ci-dessous lorsqu'on appuie sur le bouton on enregistre la valeur minimale de Z. Si on retourne la breadboard on obtiendra la valeur maximale sur Z. | ||
+ | |||
[[Fichier:Calibration_accelerometre.jpg|thumb|400px|center]] | [[Fichier:Calibration_accelerometre.jpg|thumb|400px|center]] | ||
− | * | + | == Résultats de tests du Lilypad == |
+ | |||
+ | * 11/02/2015 Résultats de test du Lilypad affiché sous Gnuplot avec le scénario suivant: | ||
+ | ** 0s -> va se coucher sur le lit | ||
+ | ** 0s-1m -> couché sur le dos | ||
+ | ** 1m-2m -> couché sur le coté droit | ||
+ | ** 2m-3m -> couché sur le coté gauche | ||
+ | ** 3m-4m -> couché sur le ventre | ||
+ | ** 4m-5m -> couché sur le dos et et effectue de façon irrégulière des petits sauts | ||
+ | ** 5m-6m -> se roule à droite et à gauche | ||
+ | ** 6m-7m -> assis sur le lit | ||
+ | ** 7m-7m30s -> sort du lit à 7m, et on laisse tourner le programme à vide | ||
+ | |||
+ | [[Fichier:res_pitch.png|left|thumb|200px|Résultat pitch]] | ||
+ | [[Fichier:res_pitch_zoom.png|center|thumb|200px|Résultat pitch zoom]]<br> | ||
+ | |||
+ | [[Fichier:res_roll.png|left|thumb|200px|Résultat roll]] | ||
+ | [[Fichier:res_roll_zoom.png|center|thumb|200px|Résultat roll zoom]]<br> | ||
+ | |||
+ | [[Fichier:res_x.png|left|thumb|200px|Résultat x]] | ||
+ | [[Fichier:res_x_zoom.png|center|thumb|200px|Résultat x zoom]]<br> | ||
+ | |||
+ | [[Fichier:res_y.png|left|thumb|200px|Résultat y]] | ||
+ | [[Fichier:res_y_zoom.png|center|thumb|200px|Résultat y zoom]]<br> | ||
+ | |||
+ | [[Fichier:res_z.png|left|thumb|200px|Résultat z]] | ||
+ | [[Fichier:res_z_zoom.png|center|thumb|200px|Résultat z zoom]]<br> | ||
== Application Android == | == Application Android == | ||
− | * 11/03/2015 Application | + | * 11/03/2015 Application SleepWatcher qui teste la communication BLE : |
+ | **Dans l'activité Device Scan le téléphone active le bluetooth, scanne les environs et repère les appareils compatible avec le BLE (dont le nRF8001). En appuyant sur le nom et l'adresse qui figure on se connecte à l'appareil. | ||
+ | ** L'activité Device Control permet l'envoie et la réception de données à l'appareil connecté. | ||
− | [[Fichier:scan.png|left|thumb| | + | [[Fichier:scan.png|left|thumb|Device Scan activity]] |
+ | [[Fichier:main.png|center|thumb|Device Control activity]]<br> | ||
− | [[Fichier: | + | * 22/03/2015 Application Test Graph pour créer des graphes avec AChartEngine : |
+ | |||
+ | [[Fichier:Screenshot_2015-03-22-20-19-20.png|left|thumb|Main Activity]] | ||
+ | [[Fichier:Screenshot_2015-03-22-20-48-03.png|right|thumb|Données contenues dans le fichier pour XGraph]] | ||
+ | [[Fichier:Screenshot_2015-03-22-20-19-03.png|center|thumb|XGraph]]<br> | ||
+ | |||
+ | [[Fichier:Screenshot_2015-03-22-20-19-45.png|left|thumb|BarGraph]] | ||
+ | [[Fichier:Screenshot_2015-03-22-20-19-48.png|center|thumb|PieGraph]]<br> | ||
+ | |||
+ | * 25/03/2015 Amélioration apportée à l'application SleepWatcher: ajout de l'activité GraphActivity et des courbes de données: | ||
+ | |||
+ | [[Fichier:Screenshot_2015-03-25-18-51-25.png|left|thumb|Device Control Activity]] | ||
+ | [[Fichier:Screenshot_2015-03-25-18-51-32.png|center|thumb|Graph Activity après appuie du bouton Stats]]<br> | ||
+ | |||
+ | [[Fichier:Screenshot_2015-03-25-18-51-46.png|left|thumb|X Graph : Variation de X par rapport au temps]] | ||
+ | [[Fichier:Screenshot_2015-03-25-18-52-25.png|center|thumb|Z Graph: Variation de Z par rapport au temps]]<br> | ||
+ | |||
+ | * 09/04/2015 Implémentation d'un algorithme dans l'application TestGraph qui calcule le nombre de mouvements par minute tout au long de l'acquisition: | ||
+ | |||
+ | [[Fichier:Screenshot_2015-04-13-14-27-35.png|center|thumb|400px|Mouvements durant la nuit]] | ||
+ | |||
+ | * 06/05/2015 Prototype final de l'application SleepWatcher | ||
+ | |||
+ | [[Fichier:Screenshot_2015-05-05-15-52-04.png|left|thumb|Device Scan Activity : Scan BLE]] | ||
+ | [[Fichier:Screenshot_2015-05-05-16-22-19.png|center|thumb|Device Control Activity : Interface de contrôle]]<br> | ||
+ | |||
+ | [[Fichier:Screenshot_2015-05-05-16-39-36.png|left|thumb|List Files Activity : Liste des acquisitions]] | ||
+ | [[Fichier:Screenshot_2015-05-05-16-39-45.png|center|thumb|Alert Dialog]]<br> | ||
+ | |||
+ | [[Fichier:Screenshot_2015-05-06-14-19-28.png|400px|center|thumb|File Activity : Courbe de sommeil]]<br> | ||
+ | |||
+ | == Prototype final Dreamer == | ||
+ | |||
+ | [[Fichier:dreamerImage1.JPG|350px|left|thumb|]] | ||
+ | [[Fichier:dreamerImage2.JPG|350px|center|thumb|]]<br> | ||
+ | |||
+ | =Rapport= | ||
+ | |||
+ | Rapport de projet : [[Fichier:Rapport_SPS_SM&BJ.pdf]] | ||
+ | |||
+ | =Codes= | ||
+ | |||
+ | Fichiers sources du projet : | ||
+ | |||
+ | * Code Partie Arduino [[Fichier:Dreamer.zip]] | ||
+ | * Code Partie Android [[Fichier:SleepWatcher.zip]] | ||
=Références= | =Références= | ||
Ligne 293 : | Ligne 468 : | ||
* Tutoriel développement Android BLE : http://developer.android.com/guide/topics/connectivity/bluetooth-le.html | * Tutoriel développement Android BLE : http://developer.android.com/guide/topics/connectivity/bluetooth-le.html | ||
+ | |||
* Lien vers les codes sources pour l'utilisation du BLE : https://developer.android.com/samples/BluetoothLeGatt/index.html | * Lien vers les codes sources pour l'utilisation du BLE : https://developer.android.com/samples/BluetoothLeGatt/index.html | ||
+ | |||
* Getting started with the nRF8001 Bluefruit LE Breakout https://learn.adafruit.com/downloads/pdf/getting-started-with-the-nrf8001-bluefruit-le-breakout.pdf | * Getting started with the nRF8001 Bluefruit LE Breakout https://learn.adafruit.com/downloads/pdf/getting-started-with-the-nrf8001-bluefruit-le-breakout.pdf | ||
+ | |||
+ | *Tutoriel pour écrire et lire des fichiers sur Android : http://webauditeur.cnam-paysdelaloire.fr/nfa25/nfa24/seance10/lecture-ecriture-FICHIERS.pdf | ||
+ | |||
+ | *Tutoriel pour utiliser les ListView : http://www.ltm.fr/creez-une-vue-en-liste-listview-avec-texte-image/ | ||
+ | |||
+ | * Tutoriel AChartEngine : https://www.youtube.com/playlist?list=PL2603F3CABBF5EEB0 | ||
+ | |||
+ | *Body Movement During Sleep http://blog.sachleen.com/posts/1353217318/body-movement-during-sleep/ |
Version actuelle datée du 15 juillet 2015 à 07:30
Sommaire
- 1 Présentation générale du projet
- 2 Description du projet
- 3 Cahier des charges
- 4 Planning prévisionnel
- 5 Avancement du Projet
- 5.1 Semaine 1 (du 26/01/2015 au 01/02/2015)
- 5.2 Semaine 2 (du 02/02/2015 au 08/02/2015)
- 5.3 Semaine 3 (du 09/02/2015 au 15/02/2015)
- 5.4 Semaine 4 (du 16/02/2015 au 22/02/2015)
- 5.5 Semaine 5 (du 23/02/2015 au 01/03/2015)
- 5.6 Vacance de Février (du 02/03/2015 au 08/03/2015)
- 5.7 Semaine 6 (du 09/03/2015 au 15/03/2015)
- 5.8 Semaine 7 (du 16/03/2015 au 22/03/2015)
- 5.9 Semaine 8 (du 23/03/2015 au 29/03/2015)
- 5.10 Semaine 9 (du 30/03/2015 au 05/04/2015)
- 5.11 Semaine 10 (du 06/04/2015 au 12/04/2015)
- 5.12 Semaine 11 (du 13/04/2015 au 19/04/2015)
- 5.13 Semaine 12 (du 20/04/15 au 26/04/15)
- 6 Fichiers Rendus
- 7 Rapport
- 8 Codes
- 9 Références
Présentation générale du projet
Contexte
La surveillance du sommeil devient de plus en plus importante avec la diminution consacrée au repos nocturne.
Nous consacrons un tiers de notre existence à dormir. Ce tiers très important à notre équilibre, et de moins en moins respecté, toujours plus bâclé. Nous ressentons les conséquences de notre sommeil dès le matin au levé. Cela va jouer sur notre humeur, nos envies, nos émotions...
Selon plusieurs études, les Français dorment en moyenne moins de 7 heures par nuit, tandis que l’OMS recommande huit heures de sommeil quotidien. Ajouter aussi que 64 % des personnes se sentent toujours fatiguées après leur nuit de sommeil.
De plus, l'augmentation de l'utilisation des technologies au lit avant de dormir (smartphone, télévision, tablette,...) ont tendance à nous mettre en éveil et exciter nos yeux, et de ce fait modifier la qualité et quantité de notre sommeil.
Nous avons pour projet d'améliorer l'expérience et la qualité du sommeil. En analysant son sommeil, on pourrait ainsi responsabiliser chacun et l'aider à retrouver un cycle de vie plus équilibré.
Objectif du projet
L'objectif du projet est de concevoir un capteur passif qui permettrait de suivre et d'analyser le sommeil de son utilisateur, avec plusieurs modes de fonctionnement:
- Un mode silencieux (sans transmission de données et donc pas d'émission radio) plus destiné aux personnes sensibles aux ondes électromagnétiques.
- Un mode alarme (pas de transmission sauf dans le cas d'une alarme programmée) afin de surveiller les enfants et d'alerter les parents en cas de problème. (à étudier en fonction des premiers résultats de surveillance obtenus)
- Un mode actif (transmission des données régulière vers un smartphone) pour traiter et analyser en temps réel le sommeil
Le contrôle de ce capteur et ses différents modes s’effectue à travers une application. L’application permet également de stocker les données enregistrées et d’analyser sous forme de graphe le sommeil.
Description du projet
Description du sommeil
Le sommeil est constitué d’une succession de 5 cycles de 90 à 120 minutes chacun, ces cycles se succèdent durant la période de sommeil et correspondent à des rythmes cérébraux.
- L'endormissement
Le cerveau ralentit, le calme s’installe, la respiration devient régulière, à ce stade nous pouvons encore entendre les bruits. L’endormissement se décompose en deux stade : somnolence et assouplissement.
- Le sommeil lent léger
Phase intermédiaire entre l’endormissement et le sommeil profond.
- Le sommeil lent profond
L’activité cérébrale ralentit, c’est la période d’installation du sommeil profond.
- Le sommeil profond
C’est la période la plus difficile pour réveiller un dormeur, à ce stade le cerveau, les muscles et tout l’organisme sont au repos. Le dormeur se coupe du monde extérieur. Cette étape est primordiale elle agit sur la récupération de la fatigue physique.
- Le sommeil paradoxal
C’est le moment des rêves. Les ondes émises par le cerveau sont rapides, le visage s’anime, la respiration devient irrégulière comme si l’on allait s’éveiller, alors que PARADOXALEMENT le sommeil à ce stade est très profond .Il associe des signes de sommeil profond (atonie musculaire, seuils d’éveil élevés) et des signes d’éveil (EEG rapides, mouvements oculaires, respiration irrégulière).
Description du capteur
Le capteur passif à glisser sous le matelas d'une personne est une carte électronique qui permet de surveiller et d'enregistrer les différentes phases du sommeil en mesurant et analysant les déplacements de l'utilisateur durant le sommeil.
Cahier des charges
Capteur de sommeil
Pour créer notre capteur de sommeil :
- Un accéléromètre pour détecter les mouvements du dormeur [fourni le 28/01/2015] [un 2ème fourni le 29/01/2015] [2 Lilypad fournis le 11/02/2015][Récupéré le 18/05/2015]
- Éventuellement, une sonde de température pour déterminer la chaleur rejetée par le dormeur [disponible au 28/01/2015 en E304]
- En fonction des premiers résultats obtenus par l'accéléromètre, on pourrait être amené à utiliser d'autres composants
Base
Pour notre base à poser sur le chevet et reliée au capteur :
- Un arduino pour traiter les données [fourni le 28/01/2015][Récupéré le 18/05/2015]
- Un shield Wireless SD pour stocker et transmettre les données [fourni le 28/01/2015] [un shield SD fourni le 29/01/2015][Récupéré le 18/05/2015]
- Une carte micro-SD 2Go [fourni le 28/01/2015][Récupéré le 18/05/2015]
- Un adaptateur pour carte micro-SD [fourni le 29/01/2015][Récupéré le 18/05/2015]
- Un bouton pour commander le début et la fin de la surveillance de sommeil[Récupéré le 18/05/2015]
- Un bouton pour commander le changement de mode[Récupéré le 18/05/2015]
- Une alimentation avec prise secteur pour alimenter la base (carte Arduino Uno) [fournie le 05/02/2015][Récupéré le 18/05/2015]
- Un shield horloge temps réel : MOD-RTC [fourni le 05/02/2015][Récupéré le 18/05/2015]
- BLE nRF8001 [1] [1 fourni le 11/2/2015][Récupéré le 18/05/2015]
Application mobile
Pour développer l'application mobile :
- Une tablette Android[Récupéré le 18/05/2015]
Planning prévisionnel
Étape 1
- Schéma du système avec les différents modules à implémenter
- Liste des composants à utiliser dans le projet
- Montage du système
Étape 2
- Programmation de l'arduino : récupération des données du capteur sur la carte SD (mode silencieux)
- Réalisation des premiers tests :
- tests simulés :
- Saut sur le lit
- Levé / couché
- Allongé / assis
- Mouvement rotatif (penché à droite / penché à gauche)
- tests réels (en sommeil)
- où le capteur est situé dans différentes positions du lit
- sur différentes personnes (enfant, adulte, âgé)
Étape 3
- Programmation du mode de fonctionnement : alarme et actif
- Développement d'une application Android pour le contrôle du capteur
- Recherche d’un algorithme pour l’étude du sommeil à partir des données enregistrées par le capteur
- Suivi du sommeil dans l'application :
- Synchronisation des données avec graphes détaillant la qualité du sommeil, les différentes étapes du sommeil
- Durée du sommeil
- Statistiques sur les jours passés
- Tests des trois programmes en situation simulé et réel
Étape 4
- Création de la carte PCB finale
Avancement du Projet
Semaine 1 (du 26/01/2015 au 01/02/2015)
- Rédaction et Recherche
- Étude sur le sommeil par une recherche bibliographique et web
- Étude sur les nouvelles générations de surveillance de sommeil
- Étude sur le nombre d'accéléromètre nécessaire pour recevoir les mouvements présents sur un lit entier
- Finalisation du cahier des charges
- Programmation ARDUINO
- Programme pour récupérer les données d'un accéléromètre via l'arduino uno
- Amélioration du programme précédent afin de calibrer l'accéléromètre pour convertir les données en unité de force gravitationnelle (en "g")
- Calcul des angles Pitch et Roll de l'accéléromètre
Semaine 2 (du 02/02/2015 au 08/02/2015)
- Rédaction et Recherche
- Étude sur le sommeil par une recherche bibliographique et web
- Étude sur l'intégration d'une shield horloge temps réel à notre Arduino Uno
- Acquisition et traitement des données dans le cas "au hasard"
- Programmation ARDUINO
- Programme pour stocker les mesures de l'accéléromètre via le shield Wireless/SD
Semaine 3 (du 09/02/2015 au 15/02/2015)
- Tests
- Réalisation de plusieurs tests avec l'ADXL335 et utilisation de Gnuplot pour créer les courbes correspondantes :
- Test de 7 min avec un dormeur
- Test de 7 min sans dormeur
- Test sur une nuit complète
- Réalisation de plusieurs tests avec l'ADXL335 et utilisation de Gnuplot pour créer les courbes correspondantes :
- Modifications
- L'ADXL335 est remplacé par l'accéléromètre Lilypad plus adapté au projet. Des soudures ont été faites. Calibration de l'accéléromètre Lilypad dans le programme.
- Exploitation des résultats avec MatLab afin de filtrer et linéariser les courbes obtenues
- Tests
- Réalisation de plusieurs tests avec l'ADXL335 avec le Lilypad et utilisation de MatLab pour créer et exploiter les courbes correspondantes
- Résultats plus concluant : plus de données exploitables sur les courbes, accéléromètre au centre sous le matelas du lit, l'accéléromètre est une surface plane donc plus adapté au support du lit.
- Réalisation de plusieurs tests avec l'ADXL335 avec le Lilypad et utilisation de MatLab pour créer et exploiter les courbes correspondantes
- Programmation ARDUINO
- Programme pour obtenir l'heure et la date actuelle via le shield MOD-RTC
Semaine 4 (du 16/02/2015 au 22/02/2015)
- Rédaction et Recherche
- Étude sur l'intégration d'un shield bluetooth à notre Arduino Uno
- Étude sur l'exploitation des données via MatLab (filtrage, linéarisation, ...)
- Programmation ARDUINO
- Mise en commun des programmes correspondant à la carteSD+accéléromètre et à l'horloge temps réel :
- Créer un fichier "jj_mm_aaa.txt" selon la date actuel lors de l'appui sur un bouton commandant le début de l'acquisition des données (le bouton sera ensuite virtualisé avec l'application android)
- Acquérir les informations données par l'accéléromètre à l'instant t=hh:mm:ss
- Mise en commun des programmes correspondant à la carteSD+accéléromètre et à l'horloge temps réel :
- Programmation MATLAB
- Programme qui lit les valeurs d'un fichier txt et créer les courbes correspondantes
- Programmation ANDROID
- Mise en place pour programmer une application android (installation des logiciels JDK et android-studio, préparation d'un émulateur de portable sous android, lancement de l'application test HelloWorld qui affiche le texte "HelloWorld")
Semaine 5 (du 23/02/2015 au 01/03/2015)
- Rédaction et recherche
- Etude sur les différents méthodes de filtre et de linéarisation à employer pour obtenir une courbe de sommeil correct pour une meilleur exploitation des données
- Programmation MATLAB
- Test de différents programmes qui filtrent et linéarisent les courbes de sommeil ** Réflexion sur l'utilisation des programmes
- Programmation ARDUINO
- Programme principal de l'arduino amélioré : l'horloge temps réel se met à jour automatiquement en récupérant l'heure et la date de l'ordinateur au moment de la compilation et du transfert du programme
- Programmation ANDROID
- Approfondissement de connaissances pour le développement d'une application Android :
- création d'interface graphique avec des widgets simples en xml et interaction avec le code java
- organisation de l'interface, du layout
- gestion des ressources
- Approfondissement de connaissances pour le développement d'une application Android :
Vacance de Février (du 02/03/2015 au 08/03/2015)
- Rédaction et recherche
- Etude sur le module Bluetooth et questionnement sur le transfert du fichier de l'arduino vers le portable
- Etude de la base de traitement de donnée : qui de l'application android ou de l'arduino s'occupe du traitement des données ?
- Programmation ARDUINO
- Programme pour se connecter au portable via bluetooth
- Début de programme sur le transfert de fichier via bluetooth
- Programmation ANDROID
- Implémentation des fichiers sources pour le BLE
- Configuration du téléphone portable, et installation des drivers afin de tester directement l'application
- L'application démarre, active le bluetooth et scanne les environs. Il ne reste plus qu'à tester avec l'ensemble Arduino comprenant le BLE nRF8001 afin de s'y connecter
Bilan Mi-chemin
- ARDUINO :
- 80% du programme réalisé
- Module SD : OK
- Module Accéléromètre : OK
- Module Horloge temps réel : OK
- 20% du programme à tester ou réaliser
- Module Bluetooth : Test de connexion sur l'application Android et transfert du fichier par alarme ou en continu
- 80% du programme réalisé
- MATLAB :
- 40% des tests réalisés sur les données
- Fonctionnement de MatLab pour le traitement des données : OK
- 60% des tests à réaliser sur les données
- Utilisation du meilleur filtrage possible (à voir avec le professeur référent M. Boé)
- 40% des tests réalisés sur les données
- ANDROID :
- 10% du programme réalisé:
- Tester la connexion sur le boitier Arduino comprenant le nRF8001
- Tester l'envoie et la réception de caractères entre l'application Android et l'Arduino depuis la liaison série
- 90% à réaliser :
- Synchronisation des données avec graphes détaillant les différentes étapes du sommeil (réfléchir sur comment différencier les étapes du sommeil à partir des données récupérées)
- Durée total du sommeil
- Statistiques sur les jours passés
- Programmation du mode de fonctionnement : alarme et actif
- 10% du programme réalisé:
Semaine 6 (du 09/03/2015 au 15/03/2015)
- Rédaction et Recherche
- Etablissement d'un cahier de charge de fonctionnement (limites et contraintes) selon les différents mode du DREAMER
- Programmation ARDUINO
- Communication bluetooth avec l'application Android réussie
- Programme de réception de commande, de comparaison avec les commandes de référence et de traitement de commande
- Création des librairies BLE.h, RTC.h, DREAMER.h pour épurer le programme principal.
- Programmation ANDROID
- Application SleepWatcher pour tester la communication BLE réussie : le téléphone scanne les environs, repère les appareils compatible avec le BLE (dont le nRF8001), s'y connecte, affiche l'adresse du dispositif auquel il est connecté, et permet l'envoie et la réception de données.
Semaine 7 (du 16/03/2015 au 22/03/2015)
- Programmation ANDROID
- Création d'une application bloc-note TestFile pour sauvegarder un texte dans un fichier et l'afficher. Le fichier est crée dans la "mémoire externe" du téléphone: sa carte disque dur et non sa ROM. Il n'est donc pas nécessaire d'avoir l'accès Root pour accéder au fichier depuis un explorateur.
- Envoie de commande par bluetooth à l'Arduino par l'intermédiaire de boutons dans l'application. Les commandes sont reçues et reconnues par l'Arduino et devront traiter la fonctionnalité désiré.
- A la réception d'une donnée par BLE (test réalisé avec quelques chaînes de caractères), un fichier est crée contenant ces données.
- A faire : transférer tout le contenu de la carte SD de l'Arduino sur le téléphone lorsqu'elles sont envoyés par BLE (Mode silencieux du capteur).
- Recherche bibliographique pour créer des graphes dans une application Android: la librairie opensource AChartEngine correspond au projet. Mise en place de la librairie.
- Création de l'application TestGraph afin de créer quelques graphiques simples : linéaires, barres, camembert, nuage de point.
- Création d'un graphe à partir de données dans un fichier réussi. En cliquant sur le bouton XGraph, la courbe est crée à partir de flottants séparés par des espaces et sur plusieurs lignes.
- Les autres boutons affichent des graphiques spécifiques dont les valeurs ont été écrites dans le code de l'application (simplement pour se familiariser à coder différents types de graphes).
- Programmation ARDUINO
- Programme qui lit les fichiers de l'ensemble de la carte SD
- Programme qui lit une ligne (un échantillon de mesure = HH:MM:SS X Y Z P R) d'un fichier qui le convertit en byte
- Programme qui envoie une trame via bluetooth, contenant 3 données d'un échantillon
- Programme qui transfert à l'application android via bluetooth un fichier contenu dans la carte SD
- Programme qui transfert à l'application android via bluetooth tout les fichiers contenu dans la carte SD puis les supprime
Semaine 8 (du 23/03/2015 au 29/03/2015)
- Programmation ANDROID
- Application SleepWatcher : Création d'une nouvelle activité GraphActivity dans l'application qui se lance en appuyant sur le bouton Stat dans DeviceControlActivity.
- Cette activité se résume pour l'instant à des boutons permettant d'accéder aux différentes courbes des données d'un fichier (1 seul fichier pour le moment).
- A l'appuie d'un des boutons, la courbe de variation de X ou Y, Z, Pitch, Roll en fonction du temps s'affiche.
- La prochaine amélioration serait de créer un calendrier intégré dans l'application, avec pour chaque date les données et statistiques correspondante.
- Application SleepWatcher : Création d'une nouvelle activité GraphActivity dans l'application qui se lance en appuyant sur le bouton Stat dans DeviceControlActivity.
- Programmation ARDUINO
- Développement du programme bluetooth :
- Éteindre et allumer le bluetooth à l'aide d'interrupteur physique.
- Éteindre et allumer des LEDs selon l'état de fonctionnement ON/OFF du bluetooth et l'état de fonctionnement ON/OFF du Dreamer.
- Développement du programme bluetooth :
Semaine 9 (du 30/03/2015 au 05/04/2015)
- Programmation ANDROID
- Application SleepWatcher : Ajout d'un calendrier dans l'application à partir de l'activité CalendarActivity.
- Pour chaque date est associé un fichier .txt contenant les données acquisent par l'accéléromètre (si il n'y a pas eu d'acquisition un jour il n'y a pas de fichier correspondant à cette date). Le nom du fchier est associé à la date (par exemple: 040415.txt pour le 4 avril 2015).
- En cochant une date du calendrier on appuie sur le bouton menu "Stat" pour accéder à une nouvelle activité FileActivity tout en ouvrant le fichier en lecture.
- Application SleepWatcher : Ajout d'un calendrier dans l'application à partir de l'activité CalendarActivity.
- Programmation ARDUINO
- Liste des problèmes à régler :
- Mise à l'état On/OFF pas très fonctionnel : le BLE s'allume tout seul ou ne veut plus s'allumer une fois à l'état OFF. ==> Non résolu
- Saturation de l'envoi des données du bluetooth à l'application android au bout d'une dizaine de trame envoyée. ==> Non résolu
- Perte de la valeur d'une variable "nom_fichier" ==> Résolu (chaine de caractère non alloué)
- Liste des problèmes à régler :
Semaine 10 (du 06/04/2015 au 12/04/2015)
- Rédaction et recherche
- Réflexion et recherche sur un algorithme permettant de différencier les différentes phases de sommeil durant la nuit à partir des données de l’accéléromètre.
- Après analyse des articles de recherches sur le sommeil fournis par M.Boé, un élément commun ressort : le nombre de mouvements effectués par le corps par minute tout au long de la nuit.
- Programmation ANDROID
- Application TestGraph : Implémentation d'un algorithme qui calcule le nombre de mouvements par minute tout en prenant en compte le bruit de l'accéléromètre Lilypad. Une variation de 0.05 g entre 2 valeurs successives d'accélération (sur X, Y ou Z) correspond à un mouvement du dormeur. Pour les angles Pitch et Roll une variation de 3 degrés est interprété par un mouvement. Nous obtenons une 1ère courbe dont le résultat est plutôt satisfaisant à partir d'un fichier test sur toute la nuit de la semaine 4. On aperçoit des pics de mouvements environ toutes les 90 minutes ce qui correspond à la durée d'un cycle de sommeil qui alterne micro-réveil (beaucoup de mouvements), phase de sommeil léger (mouvements réguliers), sommeil profond (peu de mouvements voir nul), sommeil paradoxal (peu de mouvements). La courbe indique une nuit agité avec une succession de pics élevés vers la 220ème minute environ qui correspond au moment où je me suis réveillé durant la nuit.
- Programmation ARDUINO
- Recherche de solutions pour le fonctionnement ON/OFF du BLE :
- Gestion du mode OFF dans la fonction "évènements du bluetooth" en prenant en compte d'un booléen qui est mis à vrai par interruption via l'appuie du bouton ==> sans succès (le BLE se réactive automatiquement malgré un delai d'attente)
- Gestion du mode OFF en dehors de la fonction "évènements du bluetooth" en prenant en compte d'un booléen qui est mis à vrai par interruption via l'appuie du bouton ==> sans succès (le BLE ne se rallume plus si demandé)
- Gestion du mode OFF dès l'appuie du bouton ==> Impossible car le bouton poussoir agit par interruption et le ble aussi...
- ==> sans succès
- Recherche de solutions pour l'envoi des données via bluetooth sans saturation de données dans la liaison (pipe) entre le dreamer et l'application android :
- Augmentation de la capacité de données dans le "pipe" et de la file d'attente d'envoie de donnée ==> sans succès
- Changement total du code d'envoi pour la prise en compte d'un ACK fourni par l'application android dès qu'elle reçoit une trame de données, ainsi cela libère le pipe est une nouvelle trame peut être envoyée. (mais transfert d'échantillon de donnée en mode actif et transfert de fichier plus long) ==> à tester
- Recherche de solutions pour le fonctionnement ON/OFF du BLE :
Semaine 11 (du 13/04/2015 au 19/04/2015)
- Programmation ARDUINO
- Gestion du mode OFF/ON dès l'appuie du bouton lorsque un évènement "disconnect" a lieu (c'est à dire quand le BLE est déconnecté de l'application) et quand l'utilisateur le souhaite : Done
- Gestion du bouton OFF/ON (booléen déterminant l'état ON/OFF du BLE change selon l'appui sur le bouton) : Done
- Gestion des LEDs (l'une donne l'état de marche du BLE, l'autre l'état de marche du Dreamer) : Done
- Gestion du bouton START/STOP du mode silence : Done
- Gestion du start du mode silence, commandé à partir de l'application : d'abord déconnexion avec l'application, puis délai d'attente pour quitter la page de connexion Dreamer de l'application, puis la commande silence est activée
- Programmation ANDROID
- Application SleepWatcher :
- Mode Actif quasi-opérationnel : on coche la case "Mode Actif" pour configurer l'Arduino dans ce mode. Après appuie de "Start", l'Arduino envoie directement par liaison Bluetooth ses données au téléphone. Une led jaune est allumé indiquant l'envoie de donnée. On appuie sur "Stop" pour arrêter l'envoie de données. Les données reçus sont traitées et enregistrées dans un fichier dont le nom est la date actuelle. Seul problème : le RTC bug souvent de façon aléatoire sur l'heure courante (principalement la partie heure). il peut envoyer tout d'abord l'heure exacte (ex: 17:40:02) puis envoyer quelques secondes plus tard une heure improbable (comme 67:40:05).
- Mode Silence : on coche cette fois-ci la case "Mode Silence". Après appuie de "Start", l'Arduino enregistre ses données sur la carte SD. Une led est allumé indiquant l'enregistrement des données. On appuie sur "Stop" pour arrêter. Lorsque les données ont finis d'être enregistrées sur la carte SD de l'Arduino (dans des fichiers) on peut alors les transférer sur le téléphone (qui va également stocker dans des fichiers) en appuyant sur "Transfert". Les noms sont les mêmes que ceux sur l'Arduino soit les dates d'enregistrements. Durant le transfert les données sont traitées et lorsque l'on reçoit un nom de fichier on crée un nouveau fichier pour enregistrer les données.
- Réflexion sur le Mode Alarme
- Application SleepWatcher :
Semaine 12 (du 20/04/15 au 26/04/15)
- Programmation ARDUINO
- Envoi des données via bluetooth sans saturation de données dans la liaison (pipe) entre le dreamer et l'application android : Done
- Commentaire des différents fonctions des librairies
- Programmation ANDROID
- Application SleepWatcher :
- Le calendrier est remplacé par une ListView dans l'activité ListFilesActivity. Les fichiers contenus dans le dossier apparaissent dans la liste avec un numéro d'acquisition et la date d'acquisition. Lorsque l'on clique sur l'un des éléments, un AlertDialog s'affiche. Cet AlertDialog va demander à l’utilisateur de choisir entre :
- Afficher la courbe
- Supprimer les données pour cette date
- Ne rien faire donc retourner à la liste
- Programmation du mode Alarme. Ce mode est similaire au mode Actif à la différence qu'elle va comparer chaque donnée reçue par Bluetooth (le principe est le même que pour l'affichage des courbes de mouvements). Lorsqu'il n'y a plus de mouvement pendant une certaine durée, une alarme se déclenche.
- La courbe de sommeil s'affiche à présent au sein de l'activité FileActivity et non plus dans une autre activité. La courbe a été stylisé pour avoir un meilleur rendu. En complément s'affiche également le début et la fin de l'acquisition ainsi que la durée totale.
- Le calendrier est remplacé par une ListView dans l'activité ListFilesActivity. Les fichiers contenus dans le dossier apparaissent dans la liste avec un numéro d'acquisition et la date d'acquisition. Lorsque l'on clique sur l'un des éléments, un AlertDialog s'affiche. Cet AlertDialog va demander à l’utilisateur de choisir entre :
- Le schéma ci-dessous résume les 4 activités du programme:
- Application SleepWatcher :
Bilan final
- ARDUINO :
- 100% du programme réalisé
- Module SD : OK
- Module Accéléromètre : OK
- Module Horloge temps réel : OK
- Module Bluetooth : Ok
- Remarque :
- Bon fonctionnement de l'ensemble du programme
- Le RTC utilisé n'est pas très performant (les valeurs de temps changent de manière non formelles)
- Les boutons ne sont pas très pratique à utiliser (saute un appui ou un appui entraine un autre)
- Solution à apporter :
- Envoie de la date et de l'heure directement de l'application Android, puis comptage du RTC pour déterminer le temps ou utiliser un autre module RTC
- Changer de boutons
- Amélioration à apporter :
- Possibilité de utiliser un MDP pour la connexion bluetooth du Dreamer à partir de l'application
- 100% du programme réalisé
- ANDROID :
- 90% du programme réalisé
- Interface de contrôle pour communiquer via BLE avec le capteur. Possibilité de choisir entre différents modes : Actif, Silencieux, Alarme.
- Liste des acquisitions avec leur dates correspondantes
- Courbe du sommeil précisant la quantité de mouvements par minute tout au long de l'acquisiton
- 10 % non réalisé
- Description des différentes étapes du sommeil dans la courbe
- Amélioration à apporter :
- Statistique sur les jours passés
- 90% du programme réalisé
Fichiers Rendus
Accéléromètre
- 01/02/2015 Montage pour calibrer l'accéléromètre ADXL 335
L'ADXL335 est calibré afin de convertir les valeurs de tensions brutes en unité de force gravitationnelle (en "g"). Lorsque un axe (X,Y,Z) de l'accéléromètre est précisément aligné avec l'attraction terrestre (attraction gravitationnelle) on appuie sur le bouton afin d'obtenir la valeur minimale ou maximale d'un axe. Concrètement sur la photo ci-dessous lorsqu'on appuie sur le bouton on enregistre la valeur minimale de Z. Si on retourne la breadboard on obtiendra la valeur maximale sur Z.
Résultats de tests du Lilypad
- 11/02/2015 Résultats de test du Lilypad affiché sous Gnuplot avec le scénario suivant:
- 0s -> va se coucher sur le lit
- 0s-1m -> couché sur le dos
- 1m-2m -> couché sur le coté droit
- 2m-3m -> couché sur le coté gauche
- 3m-4m -> couché sur le ventre
- 4m-5m -> couché sur le dos et et effectue de façon irrégulière des petits sauts
- 5m-6m -> se roule à droite et à gauche
- 6m-7m -> assis sur le lit
- 7m-7m30s -> sort du lit à 7m, et on laisse tourner le programme à vide
Application Android
- 11/03/2015 Application SleepWatcher qui teste la communication BLE :
- Dans l'activité Device Scan le téléphone active le bluetooth, scanne les environs et repère les appareils compatible avec le BLE (dont le nRF8001). En appuyant sur le nom et l'adresse qui figure on se connecte à l'appareil.
- L'activité Device Control permet l'envoie et la réception de données à l'appareil connecté.
- 22/03/2015 Application Test Graph pour créer des graphes avec AChartEngine :
- 25/03/2015 Amélioration apportée à l'application SleepWatcher: ajout de l'activité GraphActivity et des courbes de données:
- 09/04/2015 Implémentation d'un algorithme dans l'application TestGraph qui calcule le nombre de mouvements par minute tout au long de l'acquisition:
- 06/05/2015 Prototype final de l'application SleepWatcher
Prototype final Dreamer
Rapport
Rapport de projet : Fichier:Rapport SPS SM&BJ.pdf
Codes
Fichiers sources du projet :
- Code Partie Arduino Fichier:Dreamer.zip
- Code Partie Android Fichier:SleepWatcher.zip
Références
- Lien d'un projet Arduino réveil : http://thisisego.com/arduino-reveil/
- Accéléromètre LilyPad ADXL335 : https://www.sparkfun.com/products/9267
- Shield Wireless SD : http://www.instructables.com/id/Arduino-Wireless-SD-Shield-Tutorial/ http://arduino.cc/en/Main/ArduinoWirelessShield
- Lien d'un tutoriel pour calibrer l'accéléromètre ADXL335 http://mchobby.be/wiki/index.php?title=ADX335-326-Calibrer-Programmer
- équation Pitch et Roll http://diy.powet.eu/tag/adxl335/
- Lien du shield horloge temps réel : https://www.olimex.com/Products/Modules/Time/MOD-RTC/open-source-hardware
- Tutoriel développement Android BLE : http://developer.android.com/guide/topics/connectivity/bluetooth-le.html
- Lien vers les codes sources pour l'utilisation du BLE : https://developer.android.com/samples/BluetoothLeGatt/index.html
- Getting started with the nRF8001 Bluefruit LE Breakout https://learn.adafruit.com/downloads/pdf/getting-started-with-the-nrf8001-bluefruit-le-breakout.pdf
- Tutoriel pour écrire et lire des fichiers sur Android : http://webauditeur.cnam-paysdelaloire.fr/nfa25/nfa24/seance10/lecture-ecriture-FICHIERS.pdf
- Tutoriel pour utiliser les ListView : http://www.ltm.fr/creez-une-vue-en-liste-listview-avec-texte-image/
- Tutoriel AChartEngine : https://www.youtube.com/playlist?list=PL2603F3CABBF5EEB0
- Body Movement During Sleep http://blog.sachleen.com/posts/1353217318/body-movement-during-sleep/