FallDetectionSystem Rapport
FallDetectionSystem Rapport
Module : IoT
Rapport de Mini-Projet :
Système de Détection de Chute basé sur l'IoT
2
Résumé de notre projet
3
Résumé de notre projet
4
Introduction
5
Introduction
1. Problématique
La chute est un enjeu majeur de santé publique, particulièrement pour les personnes
âgées, les individus à mobilité réduite et les patients fragiles. Elle entraîne souvent des
blessures graves, une perte d'autonomie et des complications médicales. Avec le
vieillissement de la population et l'augmentation des besoins en soins à domicile, il est
urgent de développer des systèmes automatisés de détection de chute pour assurer
une intervention rapide et prévenir les risques.
2. Objectifs
Le projet vise à concevoir un système de détection de chute en temps réel, basé sur
des capteurs et une plateforme IoT, pour :
• Détecter les chutes avec précision et rapidité.
• Envoyer des alertes immédiates en cas de détection.
• Garantir un dispositif portable, peu coûteux et facile à intégrer dans le
quotidien des utilisateurs.
3. Défis
• Précision : Éviter les faux positifs (fausses alertes) et les faux négatifs (chutes
non détectées).
• Portabilité et coût : Concevoir un système compact, léger et économique pour
une adoption large.
• Intégration IoT : Assurer une transmission fiable des données et une interface
utilisateur intuitive.
• Discretion : Rendre le système discret et non intrusif pour l'utilisateur.
4. Impact
• Sécurité accrue : Réduction des risques de blessures et des complications
médicales pour les populations vulnérables.
• Autonomie : Amélioration de la qualité de vie et de l'indépendance des
personnes âgées ou à mobilité réduite.
• Innovation : Démonstration du potentiel des technologies IoT dans le domaine
de la santé, avec des perspectives d'évolution vers des systèmes intelligents
(IA, géolocalisation, etc.).
6
Cahier de charge
7
Cahier de charge
1.1 Contexte :
Dans les secteurs industriels tels que la construction, l’exploitation minière,
l’agriculture et les travaux en hauteur, les chutes représentent l’un des principaux
risques pour les travailleurs. Un accident peut entraîner des blessures graves, voire
mortelles, et les secours tardifs aggravent souvent la situation.
Ce projet vise à concevoir un système IoT de détection de chute destiné aux
travailleurs opérant dans des environnements à risque. Ce dispositif permettra
d'envoyer une alerte immédiate aux responsables de la sécurité et aux équipes de
secours en cas d’accident.
1.2 Objectifs :
• Détecter automatiquement une chute à l’aide de capteurs de mouvement
(accéléromètre et gyroscope).
• Envoyer une alerte en temps réel via Wi-Fi à une plateforme dédiée.
• Afficher les alertes sur une interface web ou une application mobile pour
permettre une réaction rapide.
• Émettre une alerte sonore locale pour avertir les personnes à proximité
1.3 Enjeux :
• Sécurité au travail : Réduire le taux d’accidents mortels en accélérant la prise en
charge.
• Conformité réglementaire : Respect des normes de prévention des risques
professionnels.
• Fiabilité du système : Minimiser les alertes inutiles tout en garantissant la rapidité
des interventions.
• Adaptabilité : Un dispositif compatible avec différents environnements (haute
chaleur, humidité, poussière, vibrations).
2. Présentation du projet
2.1 Description du système :
Le système repose sur un dispositif IoT (bracelet, ceinture intelligente ou capteur fixé
sur un vêtement) équipé d’un accéléromètre et d’un gyroscope pour détecter les
chutes. En cas de détection d’une chute, le dispositif envoie une alerte via Wi-Fi à
une plateforme cloud. Une application web ou mobile permet aux responsables de la
sécurité de visualiser l’alerte en temps réel et de prendre les mesures nécessaires.
Une alerte sonore locale peut également être déclenchée pour alerter les personnes
à proximité.
8
2.2 Parties prenantes :
• Utilisateurs finaux : Personnes âgées, patients à risque.
• Aidants : Famille, soignants, services d’urgence.
3. Spécifications fonctionnelles
3.1 Cas d’usage :
• Un travailleur équipé du dispositif tombe.
• Le capteur accéléromètre et gyroscope détecte un changement brusque des
valeurs de (x, y, z) dépassant un seuil prédéfini.
• Le dispositif reconnaît la chute et envoie une alerte via Wi-Fi au serveur.
• L’alerte est affichée en temps réel sur une interface web ou une application mobile
pour prévenir les responsables de sécurité.
• Un buzzer intégré au dispositif peut également être activé pour avertir les
collègues proches.
• L’historique des alertes est enregistré dans une base de données pour analyse et
suivi des incidents.
4. Spécifications techniques
4.1 Matériel :
• Microcontrôleur : NodeMCU ESP8266
• Capteur : Accéléromètre MPU6050
• Connectivité : Wi-Fi
• Alimentation : Batterie rechargeable, optimisée pour une autonomie prolongée
• Sortie audio : Buzzer intégré pour alertes locales
4.2 Logiciel :
• Firmware : Développé en C++ (Arduino IDE) pour gérer les capteurs et la
communication.
9
• Communication : Envoi des alertes via HTTP vers Firebase pour stockage et
gestion en temps réel.
• Backend : Firebase pour centraliser les données et assurer leur disponibilité.
• Application mobile : Développée avec Flutter sous Android Studio pour afficher
les alertes et l’historique.
• Visualisation des données : Intégration avec Power BI pour analyser et suivre
les alertes enregistrées dans Firebase.
5. Contraintes et exigences
5.1 Contraintes techniques :
Connectivité : Utilisation exclusive du Wi-Fi pour la transmission des alertes.
Fiabilité : Détection des chutes en analysant les variations des axes (x, y, z) avec
un seuil d’accélération optimisé.
Temps de réponse : Envoi des alertes en moins de 3 secondes après détection
d’une chute.
Compatibilité : Intégration avec Firebase et Power BI pour stockage et analyse
des données.
5.2 Exigences :
Sécurité des données : Respect du RGPD (Règlement Général sur la Protection
des Données) pour la protection des informations stockées.
Facilité d'utilisation : Interface web et mobile intuitive pour les utilisateurs.
Robustesse : Matériel conçu pour résister aux conditions d’usage.
6. Planning du projet
Phase Durée
Développement du prototype 1 semaine
Montage et intégration 3 jours
Tests et ajustements 5 jours
10
• Vérification des alertes sur Firebase et l’application.
• Analyse des données via Power BI.
11
Matériels et Méthodes
12
Matériels et Méthodes
1. Matériels :
ESP8266
L'ESP8266 est un microcontrôleur intégrant une puce Wi-Fi, largement utilisé dans les
projets d'Internet des Objets (IoT) en raison de sa polyvalence, de son faible coût et
de sa facilité d'utilisation. Ce composant permet de connecter des dispositifs
électroniques à Internet ou à un réseau local sans fil, ouvrant la voie à une multitude
d'applications innovantes.
1. Caractéristiques techniques
L'ESP8266 fonctionne sur la bande de fréquence 2,4 GHz et supporte les standards
Wi-Fi 802.11b/g/n. Il dispose de plusieurs broches GPIO (General Purpose
Input/Output), notamment D0 à D8, RX, TX, GND (masse), et 3V3 (alimentation 3,3
V). Ces broches permettent de connecter divers capteurs et actionneurs, rendant le
composant extrêmement flexible pour différents projets.
2. Utilisations courantes
L'ESP8266 est souvent utilisé pour des applications IoT, telles que la surveillance à
distance de capteurs (température, humidité, mouvement, etc.) et le contrôle
d'appareils domestiques via Wi-Fi. Il est également populaire pour le prototypage
rapide, grâce à sa compatibilité avec l'IDE Arduino et d'autres plateformes de
développement.
13
3. Avantages
• Faible coût : L'un des microcontrôleurs Wi-Fi les plus économiques.
• Compact : Petite taille, idéale pour les projets embarqués.
• Communauté active : De nombreuses ressources et tutoriels sont disponibles.
• Compatibilité : Fonctionne avec l'IDE Arduino, simplifiant la programmation
pour les débutants.
4. Limites et précautions
• Tension d'alimentation : Nécessite une alimentation en 3,3 V. Une tension
supérieure peut endommager le composant.
• Consommation électrique : Plus élevée que celle des microcontrôleurs sans
Wi-Fi, ce qui peut être un problème pour les projets sur batterie.
• Limites de GPIO : Le nombre de broches GPIO est limité, ce qui peut
nécessiter l'utilisation de multiplexeurs pour les projets complexes.
5. Application dans le projet de détection de chute
Dans le cadre du projet de détection de chute, l'ESP8266 est utilisé pour lire les
données du capteur MPU6050 (accéléromètre/gyroscope) et transmettre ces données
via Wi-Fi à une plateforme IoT pour une surveillance en temps réel. Il permet
également d'envoyer des alertes en cas de détection de chute, assurant une
intervention rapide.
14
MPU6050
1. Broches principales
• VCC :
o Alimentation électrique du module. La tension dépend du module
spécifique, mais elle est généralement de 3,3 V ou 5 V.
o Attention : Il est crucial de vérifier la tension d'alimentation
recommandée pour éviter d'endommager le composant.
• GND :
o Masse (ground). Cette broche doit être connectée au point de référence
0 V du circuit.
• SCL (Serial Clock) :
o Broche pour le signal d'horloge dans la communication I2C. Elle est
utilisée pour synchroniser l'échange de données entre le microcontrôleur
et le périphérique.
• SDA (Serial Data) :
o Broche pour le signal de données dans la communication I2C. Elle
transporte les données entre le microcontrôleur et le périphérique.
2. Broches supplémentaires
15
• XDA et XCL :
o Ces broches sont souvent utilisées pour connecter des capteurs
externes ou des périphériques supplémentaires via I2C.
o Elles permettent d'étendre les fonctionnalités du module en ajoutant
d'autres composants.
• ADO :
o Cette broche est généralement utilisée pour configurer l'adresse I2C du
périphérique.
o En la reliant à VCC ou GND, on peut changer l'adresse I2C, ce qui
permet d'utiliser plusieurs périphériques sur le même bus I2C.
• INT (Interrupt) :
o Broche d'interruption. Elle peut être utilisée pour signaler un événement
spécifique (comme une détection de mouvement ou une erreur) au
microcontrôleur.
o Utile pour éviter de devoir surveiller en permanence l'état du
périphérique.
3. Utilisations courantes
Ce type de module est souvent utilisé dans des applications telles que :
• Capteurs de mouvement : Accéléromètres, gyroscopes (comme le
MPU6050).
• Capteurs environnementaux : Température, humidité, pression.
• Affichages : Écrans OLED ou LCD utilisant I2C.
• Modules de communication : Modules GPS, Bluetooth, etc.
4. Avantages
• Simplicité : Le protocole I2C ne nécessite que deux broches (SCL et SDA) pour
la communication, ce qui simplifie le câblage.
• Flexibilité : Permet de connecter plusieurs périphériques sur le même bus I2C
en utilisant des adresses uniques.
• Compatibilité : Facile à interfacer avec des microcontrôleurs populaires
comme l'Arduino, l'ESP8266 ou le Raspberry Pi.
5. Limites et précautions
• Distance de communication : I2C est conçu pour des communications sur de
courtes distances (généralement moins de 1 mètre).
• Adressage : Le nombre d'adresses I2C disponibles est limité, ce qui peut poser
problème dans les systèmes complexes.
16
• Bruit électrique : Sensible aux interférences dans les environnements
bruyants.
6. Application dans un projet
Dans un projet typique, ce module pourrait être utilisé pour :
• Lire des données : Par exemple, mesurer l'accélération avec un capteur
MPU6050.
• Envoyer des commandes : Par exemple, contrôler un écran OLED.
• Gérer des interruptions : Par exemple, détecter un événement spécifique et
déclencher une action.
17
Breadboard
La breadboard (ou plaque d'essai) est un outil essentiel pour le prototypage et le test
de circuits électroniques. Elle permet de connecter rapidement et temporairement des
composants électroniques sans avoir à souder. Son rôle principal est de faciliter la
création et la modification de circuits électroniques de manière flexible et réutilisable.
Grâce à ses rangées de trous interconnectés, elle permet d'établir des connexions
électriques entre les composants, tels que les résistances, les condensateurs, les
microcontrôleurs et les capteurs. La breadboard est particulièrement utile pour les
débutants en électronique, les tests de concepts et les prototypes, car elle permet de
visualiser et d'ajuster facilement les circuits avant de passer à une version finale
soudée.
18
Buzzer
19
2. Environnement Logiciel :
Arduino IDE
20
Firebase
Firebase a été implémenté comme solution cloud pour la gestion et le stockage des
données :
• Base de données temps réel : Stockage et synchronisation des données
entre utilisateurs et appareils de manière instantanée
• Structure NoSQL : Organisation des données en format JSON permettant
une flexibilité optimale pour notre cas d'usage
• Authentification sécurisée : Gestion des accès aux données via différentes
méthodes d'authentification
• API REST : Interface permettant l'envoi des données depuis le NodeMCU via
des requêtes HTTP
• Règles de sécurité : Configuration granulaire des permissions d'accès aux
différentes branches de données
Notre implémentation utilise Firebase pour recevoir et stocker les mesures
d'accélération et d'orientation provenant du MPU6050, permettant ainsi leur
persistance et leur accessibilité depuis différentes interfaces.
21
PowerBI
22
Flutter
23
3. Analyse technique du montage NodeMCU avec MPU6050 et buzzer :
Description du système
Le montage réalisé constitue un système de détection de mouvement avec alerte
sonore, basé sur une architecture microcontrôleur ESP8266. Cette configuration
permet l'acquisition de données inertielles via un accéléromètre/gyroscope MPU6050
et leur traitement en temps réel avec possibilité de signalisation acoustique par buzzer.
Composants et architecture matérielle
• Unité de contrôle : NodeMCU ESP8266 - plateforme de développement
intégrant un microcontrôleur 32 bits avec module Wi-Fi
• Capteur inertiel : MPU6050 - circuit intégré combinant un accéléromètre
MEMS 3 axes et un gyroscope MEMS 3 axes
• Dispositif de signalisation : Buzzer piézoélectrique
• Interface de prototypage : Breadboard - plaque d'expérimentation permettant
l'interconnexion sans soudure
24
Spécifications de connexion
Interface I2C pour le MPU6050
25
• Polarité positive : Anode (+) du buzzer reliée au pin D5 du NodeMCU via une
résistance de limitation de courant de 330Ω
• Polarité négative : Cathode (-) du buzzer connectée directement à la masse
(GND)
Fonctionnalités du système
Ce montage permet d'implémenter diverses applications pratiques :
1. Détection d'orientation : Utilisation des données de l'accéléromètre pour
déterminer la position dans l'espace
2. Mesure de vibrations : Analyse des oscillations et secousses via le gyroscope
3. Alerte sonore conditionnelle : Activation du buzzer lorsque certains seuils ou
conditions sont détectés
4. Traitement local : Analyse des données de mouvement directement sur le
NodeMCU
5. Connectivité potentielle : Possibilité d'étendre le système avec des
fonctionnalités réseau grâce au Wi-Fi intégré
L'utilisation du breadboard offre flexibilité et reconfigurabilité, permettant d'ajuster
facilement les connexions ou d'ajouter des composants supplémentaires pendant la
phase de développement et de test.
26
Implémentation Technique : Codes, Intégration et
Résultats
27
Implémentation Technique : Codes, Intégration et Résultats
1. Test Initial du Matériel de Détection de Chute :
28
Explication du Code de Test
Ce code représente la première étape cruciale du projet : tester les composants
matériels fondamentaux du système de détection de chute. L'objectif principal est de
vérifier le bon fonctionnement du capteur MPU6050 (accéléromètre et gyroscope) et
du buzzer d'alerte.
Principe de fonctionnement
Le système de détection de chute repose sur une analyse simple mais efficace des
données d'accélération. Voici comment fonctionne ce code de test :
1. Initialisation : Au démarrage, le microcontrôleur ESP8266 établit la
communication série (pour le monitoring), initialise la communication I2C avec
le capteur MPU6050, et configure la broche du buzzer en mode sortie.
2. Acquisition des données : En continu, le système récupère les valeurs
d'accélération sur les trois axes (X, Y, Z) ainsi que les données du gyroscope.
3. Calcul de l'accélération totale : Le programme calcule la magnitude
vectorielle de l'accélération en utilisant la formule √ (ax² + ay² + az²), ce qui
donne une valeur numérique représentant l'accélération globale du dispositif.
4. Détection de chute : Le système compare l'accélération totale à un seuil
prédéfini (SEUIL_CHUTE = 10000). Une chute est caractérisée par une
diminution brutale de l'accélération. Si l'accélération totale passe sous ce seuil,
le système considère qu'une chute est en cours.
5. Alerte : Lorsqu'une chute est détectée, le système active le buzzer pendant 2
secondes pour signaler l'événement.
Aspects techniques notables
• Utilisation des bibliothèques Wire et MPU6050 : Ces bibliothèques facilitent
la communication avec l'accéléromètre via le protocole I2C.
• Définition de constantes : BUZZER_PIN (D5) et SEUIL_CHUTE (10000) sont
définis comme constantes pour faciliter la modification et l'adaptation du code.
• Test de connexion : Le code vérifie explicitement la connexion avec le
MPU6050 et informe l'utilisateur du résultat via le moniteur série.
• Affichage de diagnostic : Les valeurs d'accélération sont affichées en temps
réel, permettant d'observer les variations et d'ajuster le seuil de détection si
nécessaire.
29
Utilisation du Moniteur Série pour la Visualisation des Données
30
2. Intégration de Firebase avec Arduino :
Configuration Initiale et Connexion à Firebase
Explication :
Cette partie du code représente la configuration initiale du projet et la connexion à
Firebase pour l'envoi des données en temps réel. Voici les éléments clés :
1. Bibliothèques incluses :
o Wire.h : Pour la communication I2C avec le capteur MPU6050.
o MPU6050.h : Pour interagir avec le capteur MPU6050 (accéléromètre et
gyroscope).
o ESP8266WiFi.h : Pour la connexion Wi-Fi de l'ESP8266.
o NTPClient.h et WiFiUdp.h : Pour obtenir l'heure via le protocole NTP
(Network Time Protocol).
o TimeLib.h : Pour gérer les fonctions liées au temps.
o FirebaseESP8266.h : Pour l'intégration avec Firebase et l'envoi des
données en temps réel.
31
Étapes pour Ajouter les Bibliothèques de l'ESP8266
Ajouter les URLs des cartes :
• Dans l'IDE Arduino, allez dans Fichier > Préférences.
• Dans le champ "Additional Boards Manager URLs", ajoutez les liens suivants :
https://raw.githubusercontent.com/espressif/arduino-esp32/gh-
pages/package_esp32_index.json,http://arduino.esp8266.com/stable/package_esp8
266com_index.json
32
Ouvrir le Gestionnaire de Cartes :
o Allez dans Outils > Cartes > Gestionnaire de Cartes.
33
Inclusion des Bibliothèques Supplémentaires
2. Configuration Wi-Fi :
34
Rôle de cette partie
• Initialisation : Configure les bibliothèques, les connexions Wi-Fi et Firebase, et
les paramètres du projet.
• Connexion à Firebase : Prépare la liaison avec Firebase pour l'envoi des
données de détection en temps réel.
• Préparation des composants : Assure que tous les éléments (capteur, buzzer,
Wi-Fi, Firebase) sont prêts à fonctionner ensemble.
35
Déclaration des Variables et Initialisation des Objets
Explication :
Cette partie du code déclare les variables et initialise les objets nécessaires pour le
bon fonctionnement du projet. Voici les éléments clés :
1. Variables de contrôle :
o buzzerEnabled : Une variable booléenne pour activer ou désactiver le
buzzer.
2. Objets Firebase :
o FirebaseData firebaseData : Utilisé pour gérer les données envoyées
et reçues de Firebase.
o FirebaseJson json : Permet de structurer les données en format JSON
avant envoi.
3. Identifiant unique du dispositif :
o String deviceID : Une chaîne pour stocker l'identifiant unique du
dispositif.
4. Capteur MPU6050 :
o MPU6050 mpu : Un objet pour interagir avec le capteur MPU6050.
5. Configuration NTP :
36
o WiFiUDP ntpUDP : Objet pour la communication UDP avec le serveur
NTP.
o NTPClient timeClient(ntpUDP, "pool.ntp.org") : Objet pour obtenir
l'heure actuelle via le protocole NTP.
6. Variables pour la date et l'heure :
o String currentDate et String currentTime : Pour stocker la date et
l'heure actuelles.
7. Fonction sendToFirebase :
o Cette fonction est conçue pour envoyer les données du capteur
(accélération et état de chute) à Firebase.
o Elle vérifie d'abord si l'ESP8266 est connecté au Wi-Fi, puis met à jour
la date et l'heure avant d'envoyer les données.
Rôle de cette partie :
• Déclaration des variables : Prépare les variables nécessaires pour le contrôle
du buzzer, la gestion des données et la communication avec Firebase.
• Initialisation des objets : Configure les objets pour interagir avec le capteur
MPU6050, le serveur NTP et Firebase.
• Préparation des données : Structure les données pour l'envoi à Firebase et
assure la gestion du temps.
37
Envoi des Données à Firebase
Explication :
Cette partie du code est responsable de la préparation et de l'envoi des données à
Firebase. Voici les étapes clés :
1. Préparation des données au format JSON :
o Les données du capteur (accélération sur les axes X, Y, Z et
l'accélération totale) sont structurées dans un objet JSON.
o Des informations supplémentaires, comme l'état de chute (isFall),
l'horodatage (timestamp), la date (currentDate) et l'heure (currentTime),
sont également ajoutées.
2. Envoi des données à Firebase :
o La fonction Firebase.setJSON() est utilisée pour envoyer les données
JSON à Firebase.
o Si l'envoi réussit, un message de confirmation est affiché dans le
moniteur série.
o En cas d'échec, un message d'erreur est affiché avec la raison de
l'échec.
38
3. Gestion des chutes :
o Si une chute est détectée (isFall == true), les données sont également
enregistrées dans un nœud spécifique de Firebase pour les chutes.
o Le chemin du nœud est construit dynamiquement en utilisant l'identifiant
du dispositif (deviceID) et l'horodatage.
4. Vérification de la connexion Wi-Fi :
o Si l'ESP8266 n'est pas connecté au Wi-Fi, un message d'erreur est
affiché, indiquant que les données ne peuvent pas être envoyées.
Rôle de cette partie :
• Structuration des données : Prépare les données du capteur et les
informations supplémentaires au format JSON.
• Envoi des données : Envoie les données à Firebase pour une surveillance en
temps réel.
• Gestion des chutes : Enregistre les données de chute dans un nœud
spécifique pour un suivi détaillé.
• Gestion des erreurs : Affiche des messages d'erreur en cas de problème de
connexion Wi-Fi ou d'envoi des données.
39
Lecture des Données du Capteur et Détection de Chute
Explication :
Cette partie du code est responsable de la lecture des données du capteur MPU6050
et de la détection de chute. Voici les étapes clés :
1. Lecture des données du capteur :
o La fonction mpu.getMotion6() est utilisée pour récupérer les valeurs
d'accélération (ax, ay, az) et de gyroscope (gx, gy, gz).
o Ces valeurs représentent les mouvements du dispositif sur les trois axes.
2. Calcul de l'accélération totale :
o L'accélération totale est calculée à l'aide de la formule :
totalAcceleration=ax2+ay2+az2totalAcceleration=ax2+ay2+az2
o Cette valeur permet de déterminer l'intensité du mouvement.
3. Affichage des données :
o Les valeurs d'accélération et l'accélération totale sont affichées dans le
moniteur série pour un suivi en temps réel.
4. Détection de chute :
40
o Si l'accélération totale est inférieure au seuil défini (SEUIL_CHUTE), une
chute est détectée.
o Un message d'alerte est affiché dans le moniteur série : "∆ Chute
détectée !".
o La variable isFall est définie sur true pour indiquer qu'une chute a été
détectée.
41
Gestion des Alertes et Mise à Jour de la Date/Heure
Explication :
Cette partie du code gère l'activation du buzzer en cas de détection de chute et met à
jour la date et l'heure pour l'horodatage des événements. Voici les éléments clés :
1. Activation du buzzer :
o Si une chute est détectée et que le buzzer est activé (buzzerEnabled ==
true), le buzzer est activé pendant 2 secondes pour émettre une alerte
sonore.
o Un message est affiché dans le moniteur série pour confirmer l'activation
du buzzer.
o Si le buzzer est désactivé, un message indique qu'aucune alerte sonore
n'est émise.
2. Envoi des données à Firebase :
42
o Après la détection de chute et l'activation du buzzer, les données du
capteur sont envoyées à Firebase via la fonction sendToFirebase().
o Cela permet d'enregistrer toutes les données, y compris l'état de chute,
dans la base de données en temps réel.
3. Mise à jour de la date et de l'heure :
o La fonction updateDateTime() met à jour l'heure actuelle en utilisant le
protocole NTP (Network Time Protocol).
o L'horodatage en temps Unix est converti en une structure de temps
(struct tm) pour extraire la date et l'heure.
o La date est formatée en YYYY-MM-DD et stockée dans la
variable currentDate.
Rôle de cette partie :
• Gestion des alertes : Active le buzzer en cas de chute détectée et informe
l'utilisateur via le moniteur série.
• Envoi des données : Envoie les données du capteur et l'état de chute à
Firebase pour un suivi en temps réel.
• Mise à jour de la date et de l'heure : Garantit que les événements sont
horodatés avec précision pour une analyse ultérieure.
43
Initialisation des Composants et Configuration du Système
Explication :
Cette partie du code concerne l'initialisation des composants et la configuration du
système au démarrage. Voici les éléments clés :
1. Formatage de l'heure :
o L'heure est formatée en HH:MM:SS à partir des valeurs fournies par le
client NTP
(timeClient.getHours(), timeClient.getMinutes(), timeClient.getSeconds(
)).
o L'heure formatée est stockée dans la variable currentTime.
o La date et l'heure mises à jour sont affichées dans le moniteur série pour
vérification.
2. Gestion des erreurs :
o Si la conversion de l'horodatage échoue, un message d'erreur est affiché
dans le moniteur série.
3. Fonction setup() :
o Initialisation de la communication série : Le moniteur série est
configuré à une vitesse de 115200 bauds pour le débogage.
44
o Initialisation de la communication I2C : La communication I2C est
démarrée pour interagir avec le capteur MPU6050.
o Initialisation du MPU6050 : Le capteur MPU6050 est initialisé, et sa
connexion est vérifiée. Un message est affiché pour confirmer ou
signaler une erreur de connexion.
o Configuration du buzzer : La broche du buzzer est configurée en mode
sortie, et le buzzer est éteint au démarrage.
Rôle de cette partie :
• Formatage de l'heure : Assure que l'heure est correctement formatée et
affichée pour l'horodatage des événements.
• Initialisation des composants : Configure et vérifie que tous les composants
(MPU6050, buzzer, communication série et I2C) sont prêts à fonctionner.
• Débogage : Affiche des messages dans le moniteur série pour confirmer le bon
fonctionnement ou signaler des erreurs.
45
Connexion au Wi-Fi, Génération de l'ID du Dispositif et Initialisation de
Firebase
Explication :
Cette partie du code gère la connexion au Wi-Fi, la génération d'un ID unique pour le
dispositif, et l'initialisation de Firebase. Voici les éléments clés :
1. Connexion au Wi-Fi :
o L'ESP8266 tente de se connecter au réseau Wi-Fi en utilisant les
identifiants (ssid et password).
o Une boucle while attend que la connexion soit établie (WiFi.status() ==
WL_CONNECTED), affichant des points (".") dans le moniteur série
pendant la tentative de connexion.
o Une fois connecté, un message "Connecté!" est affiché.
2. Génération de l'ID unique du dispositif :
o Un ID unique est généré à partir de l'adresse MAC de l'ESP8266.
o L'adresse MAC est récupérée avec WiFi.macAddress(), puis formatée
pour créer un ID court et lisible (par exemple, ESP-4907AE).
o Cet ID est utilisé pour identifier le dispositif dans Firebase.
46
3. Initialisation de Firebase :
o Firebase est initialisé avec l'URL de l'hôte (FIREBASE_HOST) et la clé
d'authentification (FIREBASE_AUTH).
o La reconnexion automatique au Wi-Fi est activée
(Firebase.reconnectWiFi(true)).
o Le temps d'attente pour la lecture des données est configuré à 60
secondes (Firebase.setReadTimeout(firebaseData, 1000 * 60)).
o La limite de taille pour l'écriture des données est définie
sur "tiny" (Firebase.setwriteSizeLimit(firebaseData, "tiny")).
o Un message "Firebase initialisé" est affiché pour confirmer.
4. Initialisation du client NTP :
o Le client NTP est initialisé pour obtenir l'heure actuelle via Internet.
o Le décalage horaire est configuré à 3600 secondes (UTC+1), ce qui
correspond au fuseau horaire de Paris.
o Cela permet d'obtenir l'heure locale précise pour l'horodatage des
événements.
Rôle de cette partie :
• Connexion au Wi-Fi : Assure que l'ESP8266 est connecté à Internet pour
communiquer avec Firebase.
• Génération de l'ID unique : Identifie de manière unique le dispositif dans la
base de données Firebase.
• Initialisation de Firebase : Configure Firebase pour l'envoi et la réception des
données en temps réel.
• Configuration du client NTP : Permet d'obtenir l'heure précise pour
l'horodatage des événements.
47
Enregistrement du Démarrage et Boucle Principale
Explication :
Cette partie du code gère l'enregistrement du démarrage du système dans Firebase
et la boucle principale qui contrôle les tâches périodiques. Voici les éléments clés :
1. Enregistrement du démarrage dans Firebase :
o Un événement de démarrage est enregistré dans Firebase pour suivre
l'état du dispositif.
o Les données suivantes sont envoyées :
▪ event : Type d'événement ("startup").
▪ timestamp : Horodatage en temps Unix.
▪ version : Version du système ("1.0").
▪ date et time : Date et heure actuelles.
o L'événement est enregistré dans un nœud spécifique de Firebase
(/devices/[deviceID]/logs/[timestamp]).
o Un message "Système prêt et connecté à Firebase!" est affiché pour
confirmer.
2. Boucle principale (loop) :
o La boucle principale gère deux tâches périodiques :
▪ Envoi des données du capteur : Les données du capteur sont
envoyées toutes les 1 seconde (1000 ms).
48
▪ Mise à jour de la date et de l'heure : La date et l'heure sont
mises à jour toutes les 1 minute (60000 ms).
o Ces tâches sont contrôlées à l'aide de variables de temps
(lastSensorTime et lastDateTimeUpdate) et de la fonction millis() pour
éviter d'utiliser delay().
Rôle de cette partie :
• Enregistrement du démarrage : Permet de suivre l'état du dispositif dans
Firebase en enregistrant un événement de démarrage.
• Boucle principale : Gère les tâches périodiques (envoi des données du
capteur et mise à jour de la date/heure) de manière non bloquante.
• Suivi en temps réel : Assure que les données du capteur et les informations
temporelles sont régulièrement mises à jour.
49
Affichage des Données sur Firebase
50
3. Développement de l'Application Mobile avec Flutter :
51
Point d'Entrée et Initialisation de l'Application
Explication :
Cette partie du code représente le point d'entrée de l'application. Voici son
fonctionnement détaillé :
1. WidgetsFlutterBinding.ensureInitialized() :
o Assure que Flutter est correctement initialisé avant de lancer
l'application.
o Cette étape est cruciale pour garantir que tous les services de Flutter
sont prêts à être utilisés.
2. Firebase.initializeApp() :
o Initialise Firebase avec une configuration spécifique à la plateforme
(Android, iOS, etc.), définie dans le fichier firebase_options.dart.
o Cette étape est nécessaire pour utiliser les services Firebase (comme la
base de données en temps réel) dans l'application.
3. runApp(const MyApp()) :
o Démarre l'application en appelant la méthode runApp(), qui prend en
paramètre le widget racine de l'application (MyApp).
o Cela lance l'interface utilisateur et rend l'application opérationnelle.
Rôle de cette partie :
• Initialisation : Assure que Flutter et Firebase sont correctement configurés
avant le démarrage de l'application.
• Lancement : Démarre l'application en appelant le widget principal (MyApp), qui
contient l'interface utilisateur et la logique de l'application.
52
Connexion à la Base de Données Firebase
Explication :
Cette partie du code établit une connexion à la base de données en temps réel
Firebase. Voici son fonctionnement détaillé :
1. FirebaseDatabase.instanceFor() :
o Crée une instance de la base de données Firebase en utilisant
l'application Firebase déjà initialisée (Firebase.app()).
o Spécifie l'URL de la base de données (databaseURL), qui est unique à
chaque projet Firebase.
2. .ref() :
o Crée une référence (_database) à la racine de la base de données.
o Cette référence permet d'interagir avec la base de données, notamment
pour lire, écrire ou écouter les modifications de données.
Rôle de cette partie :
• Connexion à Firebase : Établit une liaison entre l'application et la base de
données en temps réel Firebase.
• Référence à la base de données : La référence (_database) est utilisée pour
accéder aux données et réagir aux mises à jour en temps réel.
53
Écoute des Données de Chute et Mise à Jour de l'Interface Utilisateur
Explication :
Cette fonction, _listenToFallData(), est chargée d'écouter les modifications dans la
base de données Firebase en temps réel et de réagir en fonction des données reçues.
Voici son fonctionnement détaillé :
1. Écoute des données :
o La fonction utilise _database.child('devices/ESP-
4907AE/data').onValue.listen() pour écouter les changements dans le
nœud spécifique de la base de données Firebase.
o Lorsqu'un événement est déclenché (par exemple, une mise à jour des
données), la fonction récupère les données via event.snapshot.value.
2. Vérification de la chute :
o Les données reçues sont converties en une carte (Map<dynamic,
dynamic>).
o La fonction vérifie si une chute est détectée en examinant la valeur
de data['isfail'].
o Si une chute est détectée (isFallDetected == true), elle récupère des
données supplémentaires et met à jour l'interface utilisateur.
3. Mise à jour de l'interface utilisateur :
o Si une chute est détectée :
▪ Le timestamp de la détection est enregistré (_timestamp =
DateTime.now().toString()).
54
▪ Un message d'alerte est affiché (_fallMessage = "Fall Detected!
Please check immediately!").
▪ L'état de l'application est mis à jour via setState() pour refléter ces
changements dans l'interface utilisateur.
o Si aucune chute n'est détectée :
▪ Le message d'alerte est effacé et l'état est mis à jour pour indiquer
qu'aucune chute n'a été détectée.
Rôle de cette fonction :
• Surveillance en temps réel : Permet de réagir immédiatement aux
changements dans la base de données Firebase.
• Gestion des alertes : Affiche une alerte en cas de détection de chute et met à
jour l'interface utilisateur en conséquence.
• Mise à jour dynamique : Utilise setState() pour garantir que l'interface
utilisateur reflète les dernières données.
55
Appel des Services d'Urgence
Explication :
Cette fonction, _callEmergencyServices(), permet à l'application de lancer un appel
vers un numéro d'urgence (par défaut, le 112) en utilisant le package url_launcher.
Voici son fonctionnement détaillé :
1. Numéro d'urgence :
o Le numéro d'urgence est défini dans la constante phoneNumber sous la
forme tel:112.
o Ce format est reconnu par les appareils mobiles pour lancer directement
l'application d'appel.
2. Vérification de la capacité à lancer l'appel :
o La fonction utilise canLaunch(phoneNumber) pour vérifier si l'appareil
est capable de lancer l'application d'appel.
o Si c'est le cas, l'appel est lancé avec launch(phoneNumber).
3. Gestion des erreurs :
o Si l'appareil ne peut pas lancer l'appel (par exemple, en raison de
restrictions ou d'un manque de prise en charge), un message d'erreur
est affiché à l'utilisateur via un SnackBar.
o Le message indique : "Could not launch phone app.".
Rôle de cette fonction :
• Appel d'urgence : Permet à l'utilisateur de contacter rapidement les services
d'urgence en cas de détection de chute.
• Gestion des erreurs : Assure une expérience utilisateur fluide en affichant un
message d'erreur si l'appel ne peut pas être lancé.
• Intégration avec url_launcher : Utilise le package url_launcher pour interagir
avec les fonctionnalités natives de l'appareil (comme l'application d'appel).
56
Résultats de l'Application : Interface Utilisateur et Fonctionnalités
57
58
Explication :
Ces captures d'écran illustrent les deux états possibles de l'interface utilisateur de
l'application en fonction de la détection ou non d'une chute :
1. Aucune chute détectée :
o L'interface affiche un message indiquant qu'aucune chute n'a été
détectée.
o La date et l'heure de la dernière vérification sont affichées (Last Check:
2025-03-20 13:45:40.295292).
o Cet état montre que le système fonctionne normalement et surveille
activement les données.
2. Chute détectée :
o L'interface affiche une alerte claire : "Fall Detected! Please check
immediately!".
o Un bouton "Call Emergency" est disponible pour permettre à
l'utilisateur de contacter rapidement les services d'urgence.
o Un bouton "OK" est également présent pour confirmer la réception de
l'alerte.
o Cet état montre que le système a détecté une chute et réagit en
conséquence pour alerter l'utilisateur.
Rôle de cette interface :
• Surveillance en temps réel : Affiche l'état actuel du système (chute détectée
ou non).
• Alerte utilisateur : Informe immédiatement l'utilisateur en cas de détection
d'une chute.
• Appel d'urgence : Fournit une option pour contacter les services d'urgence
directement depuis l'application.
• Confirmation : Permet à l'utilisateur de confirmer qu'il a pris connaissance de
l'alerte.
59
4. Visualisation et Analyse des Données de Détection de Chute via Power BI
Traitement des Données JSON avec Python
Dans le cadre de notre système IoT de détection de chute, nous avons développé un
processus de conversion des données brutes pour permettre une analyse approfondie.
Le système génère initialement des données au format JSON stockées dans Firebase.
Pour faciliter l'analyse, nous avons implémenté un script Python qui :
• Extrait les données JSON depuis Firebase
• Transforme ces données en structure tabulaire
• Calcule les métriques additionnelles comme l'accélération totale
• Exporte les résultats dans un fichier Excel structuré
60
Importation et Modélisation des Données
Nous avons importé les données Excel dans Power BI en utilisant le connecteur
standard. La transformation des données dans Power BI a inclus:
• La création de relations entre les différentes mesures
• La définition de mesures calculées supplémentaires
• L'établissement d'une hiérarchie temporelle pour faciliter l'analyse
chronologique
61
Tableau de Bord Analytique
62
Résultats et Insights
L'analyse des données via notre tableau de bord Power BI a révélé plusieurs
informations importantes:
1. Les événements de chute se distinguent clairement par des pics d'accélération
totale dépassant un certain seuil
2. La distribution temporelle des incidents montre que certaines périodes
présentent une concentration plus élevée d'événements
3. Le système présente un taux de détection efficace avec une classification claire
des événements
Cette approche d'analyse des données complète notre système IoT en fournissant non
seulement une détection en temps réel via Flutter, mais aussi une capacité d'analyse
rétrospective permettant d'améliorer continuellement les algorithmes de détection et
d'affiner les seuils d'alerte.
63
Conclusion
64
Conclusion
Ce projet de système de détection de chute basé sur l'IoT a démontré avec succès
comment les technologies modernes peuvent être intégrées pour améliorer la sécurité
et la qualité de vie des populations vulnérables, notamment les personnes âgées et
les travailleurs dans des environnements à risque. En combinant des capteurs de
mouvement (MPU6050), un microcontrôleur (NodeMCU ESP8266), une plateforme
cloud (Firebase), une application mobile (Flutter) et des outils d'analyse de données
(Power BI), nous avons développé un système fiable et réactif capable de détecter les
chutes en temps réel et d'envoyer des alertes immédiates.
Les résultats obtenus montrent une détection précise des chutes avec un temps de
réponse rapide, tout en minimisant les faux positifs. L'application mobile offre une
interface utilisateur intuitive pour visualiser les alertes et les données historiques,
tandis que les tableaux de bord Power BI permettent une analyse approfondie des
incidents pour améliorer continuellement le système.
Ce projet illustre le potentiel de l'IoT dans le domaine de la santé et de la sécurité,
ouvrant la voie à des applications futures plus sophistiquées, telles que l'intégration de
l'intelligence artificielle pour une détection encore plus précise ou l'ajout de
fonctionnalités de géolocalisation pour une intervention plus rapide.
En conclusion, ce système de détection de chute est une solution innovante et efficace
qui peut être déployée dans divers contextes, allant des soins à domicile aux
environnements industriels, pour améliorer la sécurité et l'autonomie des utilisateurs.
65
Bibliographie
66
Bibliographie
67