Surveillance passive du sommeil : Différence entre versions

De Wiki d'activités IMA
(Application Android)
(Application Android)
Ligne 342 : Ligne 342 :
  
 
[[Fichier:Screenshot_2015-03-22-20-19-20.png|left|thumb|Main Activity]]
 
[[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-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]]
 
[[Fichier:Screenshot_2015-03-22-20-19-03.png|center|thumb|XGraph]]
  

Version du 23 mars 2015 à 20:48


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


En complément, nous souhaitons aussi intégré un système de réveil progressif afin de respecter au mieux nos cycles de sommeil et se lever de bonne humeur sans ressentir de fatigue !

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.

Cycles-du-sommeil.jpg
  • 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).

Grez10.jpg

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.


Dans un premier temps, nous mesurons et analyseront

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]
  • É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]
  • Un shield Wireless SD pour stocker et transmettre les données [fourni le 28/01/2015] [un shield SD fourni le 29/01/2015]
  • Une carte micro-SD 2Go [fourni le 28/01/2015]
  • Un adaptateur pour carte micro-SD [fourni le 29/01/2015]
  • Un bouton pour commander le début et la fin de la surveillance de sommeil
  • Un bouton pour commander le changement de mode
  • Une alimentation avec prise secteur pour alimenter la base (carte Arduino Uno) [fournie le 05/02/2015]
  • Un shield horloge temps réel : MOD-RTC [fourni le 05/02/2015]
  • BLE nRF8001 [1] [1 fourni le 11/2/2015]

Application mobile

Pour développer l'application mobile :

  • Une tablette Android

Réveil progressif (en complément)

En complément, pour la fonction de réveil progressif nous pourrons intégrer au système:

  • Un haut parleur pour une alarme sonore
  • Une LED pour une alarme visuel
  • Des boutons poussoirs pour les réglages (Heure, Jour, Mois, Année)
  • Un afficheur LCD pour l'affichage de la date et de l'heure courante
  • [ Cette partie peut aussi être intégrée sur smartphone ... mais faire une jolie lampe avec tout ça, ça aurait plus de gueule, c'est sur ]

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

  • Analyse des données récupérées
  • Analyse de l'influence de la position du capteur dans le lit
  • Conclusion sur l'efficacité d'un accéléromètre pour le suivi des différentes phases du sommeil

Si nécessaire, évolution et changement des composants du capteur de sommeil

Étape 4

  • Programmation du mode de fonctionnement : alarme et actif
  • Développement d'une application Android pour le suivi du sommeil
    • Synchronisation des données avec graphes détaillant 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 5

  • Création de la carte PCB finale

Étape 6

  • Développement du réveil progressif

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
  • 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.
  • 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
  • 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

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
  • 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

  • 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 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

  • 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).

Semaine 8

Semaine 9

Semaine 10

Semaine 11

Semaine 12

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.

Calibration accelerometre.jpg

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


Résultat pitch
Résultat pitch zoom


Résultat roll
Résultat roll zoom


Résultat x
Résultat x zoom


Résultat y
Résultat y zoom


Résultat z
Résultat z zoom


Application Android

  • 11/03/2015 Application test pour le 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é.
Device Scan activity
Device Control activity


  • 22/03/2015 Application Test Graph pour créer des graphes avec AChartEngine :
Main Activity
Données contenues dans le fichier pour XGraph
XGraph


BarGraph
PieGraph

Références