Table des matières:

Moniteur de fréquence cardiaque IOT (ESP8266 et application Android) : 5 étapes
Moniteur de fréquence cardiaque IOT (ESP8266 et application Android) : 5 étapes

Vidéo: Moniteur de fréquence cardiaque IOT (ESP8266 et application Android) : 5 étapes

Vidéo: Moniteur de fréquence cardiaque IOT (ESP8266 et application Android) : 5 étapes
Vidéo: capteur cardiaque ESP32 Bluetooth microptyhon + miniprojet IT STI2D + MIT App inventor 2024, Juillet
Anonim
Image
Image

Dans le cadre de mon projet de dernière année, je voulais concevoir un appareil qui surveillerait votre fréquence cardiaque, stockerait vos données sur un serveur et vous avertirait par notification lorsque votre fréquence cardiaque était anormale. L'idée derrière ce projet est venue lorsque j'ai essayé de créer une application fit-bit qui avertit un utilisateur lorsqu'il a un problème cardiaque, mais je n'arrivais pas à trouver un moyen d'utiliser les informations en temps réel. Le projet comporte quatre parties principales. comprenant le circuit physique pour mesurer le rythme cardiaque, un module Wi-Fi ESP8266 avec code de traitement du signal, le serveur pour stocker le code et une application Android pour afficher la fréquence cardiaque.

Une vidéo détaillant le circuit physique peut être vue ci-dessus. Tout le code du projet se trouve sur mon Github.

Étape 1: Le circuit

Le circuit
Le circuit

Il existe deux méthodes principales pour mesurer un rythme cardiaque, mais pour ce projet, j'ai décidé d'utiliser la photopléthysmographie (PPG) qui utilise une source de lumière infrarouge ou rouge qui est réfractée à travers les premières couches de la peau. Un photocapteur est utilisé pour mesurer le changement d'intensité lumineuse (lorsque le sang circule dans un vaisseau). Les signaux PPG sont incroyablement bruyants, j'ai donc utilisé un filtre passe-bande pour filtrer les fréquences spécifiques requises. Un cœur humain bat entre 1 et 1,6 Hz de fréquence. L'ampli-op que j'ai utilisé était le lm324 qui avait le meilleur décalage de tension de tous les amplis-op disponibles. Si vous recréez ce projet, un ampli-op de précision serait un bien meilleur choix.

Un gain de seulement deux a été utilisé car la tolérance de tension maximale sur l'ESP8266 est de 3,3v et je ne voulais pas endommager ma carte !

Suivez le circuit ci-dessus et essayez de le faire fonctionner sur une planche à pain. Si vous n'avez pas d'oscilloscope à la maison, vous pouvez brancher la sortie sur un Arduino et la tracer, mais assurez-vous que la tension n'est pas supérieure à la tolérance de l'arduino ou du microcontrôleur.

Le circuit a été testé sur une planche à pain et un changement dans la sortie a été observé lorsqu'un doigt a été placé sur la LED et le phototransistor. J'ai alors décidé de souder la carte ensemble, ce qui n'était pas montré dans la vidéo.

Étape 2: Le code de traitement du signal et les communications du serveur

Image
Image
Le code de traitement du signal et les communications du serveur
Le code de traitement du signal et les communications du serveur

J'ai décidé d'utiliser l'IDE Arduino sur l'ESP8266 car il est si facile à utiliser. Lorsque le signal a été tracé, il était encore très bruyant, j'ai donc décidé de le nettoyer avec un filtre à moyenne mobile FIR avec un nombre d'échantillons de dix. J'ai modifié un exemple de programme Arduino appelé "lissage" pour ce faire. J'ai un peu expérimenté afin de trouver un moyen de mesurer la fréquence du signal. Les impulsions étaient de longueur et d'amplitude variables en raison du fait que le cœur avait quatre types d'impulsions différents et les caractéristiques des signaux PPG. J'ai choisi une valeur médiane connue que le signal croisait toujours comme point de référence pour chaque impulsion. J'ai utilisé un tampon en anneau pour déterminer quand la pente du signal était positive ou négative. La combinaison de ces deux m'a permis de calculer la période entre les impulsions lorsque le signal était positif et était égal à une valeur spécifique.

Le logiciel produisait un BPM assez imprécis qui ne pouvait en fait pas être utilisé. Avec des itérations supplémentaires, un meilleur programme pourrait être conçu, mais en raison de contraintes de temps, ce n'était pas une option. Le code peut être trouvé dans le lien ci-dessous.

Logiciel ESP8266

Étape 3: Le serveur et les communications de données

Le serveur et les communications de données
Le serveur et les communications de données

J'ai décidé d'utiliser Firebase pour stocker les données car il s'agit d'un service gratuit et très facile à utiliser avec les applications mobiles. Il n'y a pas d'API officielle pour Firebase avec l'ESP8266 mais j'ai trouvé que la bibliothèque Arduino fonctionnait très bien.

Il existe un exemple de programme que l'on peut trouver sur la bibliothèque ESP8266WiFi.h qui permet de se connecter à un routeur avec le SSID et le mot de passe. Cela a été utilisé pour connecter la carte à Internet afin que les données puissent être envoyées.

Bien que le stockage des données se soit fait facilement, il existe encore un certain nombre de problèmes avec l'envoi des notifications push via une requête HTTP POST. J'ai trouvé un commentaire sur le Github qui utilisait une méthode héritée pour le faire via la messagerie Google cloud et la bibliothèque HTTP pour ESP8266. Cette méthode peut être vue dans le code sur mon Github.

Sur Firebase, j'ai créé un projet et utilisé l'API et les clés d'enregistrement dans le logiciel. La messagerie cloud Firebase a été utilisée avec l'application afin d'envoyer des notifications push à l'utilisateur. Lorsque les communications ont été testées, les données pouvaient être vues dans la base de données pendant que l'ESP8266 était en cours d'exécution.

Étape 4: L'application Android

L'application Android
L'application Android

Une application Android très basique a été conçue avec deux activités. La première activité a connecté l'utilisateur ou l'a enregistré à l'aide de l'API Firebase. J'ai recherché la fiche technique et trouvé divers tutoriels sur l'utilisation de Firebase avec une application mobile. L'activité principale qui affichait à l'utilisateur des données de l'utilisateur un écouteur d'événements en temps réel, de sorte qu'il n'y avait pas de retard notable dans les modifications apportées au BPM de l'utilisateur. Les notifications push ont été effectuées à l'aide de la messagerie cloud Firebase mentionnée précédemment. Il y a beaucoup d'informations utiles sur la fiche technique de Firebase sur la façon de mettre en œuvre cela et l'application peut être testée en envoyant des notifications à partir du tableau de bord sur le site Web de Firebase.

Tout le code des activités et les méthodes de la messagerie cloud se trouvent dans mon référentiel Github.

Étape 5: Conclusion

Il y avait quelques problèmes majeurs avec la mesure du BPM de l'utilisateur. Les valeurs variaient considérablement et n'étaient pas utilisables pour déterminer la santé d'un utilisateur. Cela se résumait au code de traitement du signal qui a été implémenté sur l'ESP8266. Après des recherches supplémentaires, j'ai découvert qu'un cœur avait quatre impulsions différentes avec une période variable, il n'était donc pas étonnant que le logiciel soit inexact. Une façon de lutter contre cela serait de prendre une moyenne des quatre impulsions d'un réseau et de calculer la période du cœur sur ces quatre impulsions.

Le reste du système était fonctionnel mais c'est un dispositif très expérimental que je voulais construire pour voir si l'objet était possible. Le code hérité qui a été utilisé pour envoyer des notifications push sera bientôt inutilisable, donc si vous lisez ceci à la fin de 2018 ou à la fin, une méthode différente serait requise. Ce problème ne se produit qu'avec l'ESP, donc si vous vouliez l'implémenter sur un Arduino compatible WiFi, ce ne serait pas un problème.

Si vous avez des questions ou des problèmes, n'hésitez pas à m'envoyer un message sur Instructables.

Conseillé: