Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Manufacturing Technology >> Processus de fabrication

Assistant Alzheimer

Composants et fournitures

Arduino MKR1000
× 1
Infineon Sensor Hub Nano
× 1
LCD Nokia 5110
× 1
Module Bluetooth HC-05
× 1
Planche à pain (générique)
× 1
Câbles de raccordement (générique)
× 1
Interrupteur à bouton-poussoir SparkFun 12mm
× 1
Sonnerie
× 1
Émetteur FT1235 5W
× 1
Récepteur FT1236 5W
× 1

Outils et machines nécessaires

Fer à souder (générique)

Applications et services en ligne

Arduino IDE
Blynk
Service IFTTT Maker

À propos de ce projet

Ces faits tirés directement du site Web de l'Association Alzheimer (prises en septembre 2017) suffisent à donner à quiconque une idée des problèmes qu'une personne doit traverser si elle ou ses proches souffrent de la maladie d'Alzheimer.

En tant que fabricant, j'y ai réfléchi et j'ai décidé de créer un appareil portable, un système qui peut aider à la fois les patients et leurs soignants.

Ce système doit être capable d'effectuer au moins les tâches suivantes :

  • Rappeler au patient d'effectuer les tâches qu'il doit effectuer quotidiennement (comme les médicaments, l'exercice, etc.)
  • Surveiller où se trouve le patient dans la maison
  • Avertissez les gardiens en cas d'urgence de quelque nature que ce soit
  • Afficher l'heure (c'est une montre, après tout !)
  • Il doit être portable et facile à utiliser, même pour un patient âgé
  • Le coût doit être réduit au minimum

Lorsque j'ai vu le Sensor Hub Nano d'Infineon, il m'a semblé être un bon candidat dans un tel projet, en raison de sa très petite taille et de ses capacités BLE. Grâce à la détection précise de la pression, il peut être utilisé pour détecter si le patient est tombé et également dire où se trouve exactement le patient dans la maison.

J'utiliserai les pièces suivantes pour le projet bare-bones pour fonctionner :

  • Capteur Nano d'Infineon
  • Arduino MKR1000
  • Module Bluetooth HC-05
  • Écran Nokia 5110

Vous saurez ce que j'entends par « projet simple » lorsque vous lirez la section « Personnaliser l'Assistant Alzheimer ».

Comment ça marche

Dans cette section, je vais décrire brièvement le fonctionnement de la montre et décrire les étapes que nous devons suivre pour la faire fonctionner.

La carte d'évaluation Sensor Hub Nano d'Infineon est dotée d'un capteur de pression barométrique DPS310, qui envoie ses données via la carte d'évaluation via Bluetooth. Les valeurs de pression, d'altitude et de température peuvent être consultées dans l'application Android d'Infineon (télécharger ici) ainsi que dans le logiciel d'évaluation SES2G. Les utilisateurs peuvent également créer des applications pour Android avec la bibliothèque fournie par Infineon, en fonction de leurs propres besoins.

Vous pouvez trouver plus d'informations sur le Sensor Hub Nano ici.

Mais, je veux que l'assistant d'Alzheimer fonctionne sans téléphone Android entre les deux. Il devrait s'agir d'un appareil portable qui peut fonctionner tout seul, ainsi que d'avoir la possibilité de se connecter à un smartphone pour afficher les données du capteur. J'ai donc décidé d'utiliser une carte Arduino MKR1000 en raison de son petit facteur de forme et de sa capacité WiFi, et de la connecter par une méthode au Sensor Hub Nano.

Voici le brochage de l'Arduino MKR1000 que vous trouverez pratique :

J'avais un module Bluetooth HC-05, et j'ai donc dû l'utiliser pour la connexion entre l'Arduino MKR1000 et le Sensor Hub Nano. Mais d'abord, nous devons connecter correctement le HC-05 aux broches matérielles Tx et Rx de l'Arduino, en tenant compte des niveaux logiques. Mon module Bluetooth fonctionne à 3,3 V, ce qui est le même que le MKR1000, il n'y avait donc pas besoin de décaleur de niveau de tension. Mais si votre module Bluetooth fonctionne au niveau 5v, vous devrez peut-être utiliser un levier de niveau similaire à celui illustré.

Après avoir fait correspondre les niveaux de tension, nous devons coupler le HC-05 avec le Sensor Hub Nano pour démarrer la communication de données entre eux, et trouver un moyen simple de les coupler automatiquement chaque fois que le Sensor Hub Nano entre dans la plage Bluetooth du HC -05.

Pour ce faire, j'ai pensé à configurer le HC-05 pour qu'il agisse comme un périphérique Bluetooth « maître » et à le coupler uniquement avec une adresse MAC spécifique ; celui du Sensor Hub Nano. Donc, après l'avoir configuré comme ça, une fois que vous allumez le HC-05, il recherche un appareil avec une adresse MAC spécifique (celle du Sensor Hub Nano), et s'associe automatiquement avec lui, laissant à l'utilisateur le soin d'envoyer et recevoir des données.

Cela se fait à l'aide des commandes du mode AT pour le HC-05 et est couvert dans la section "Configuration du module Bluetooth".

Remarque :J'ai joint un document que j'ai trouvé en ligne, qui répertorie toutes les commandes AT prises en charge par le HC-05, alors utilisez-les au besoin.

Une fois qu'il est apparié et connecté correctement, l'envoi de commandes au Sensor Hub Nano s'apparente à un terminal Bluetooth. Vous pouvez utiliser les commandes que j'ai spécifiées ci-dessus en les imprimant simplement sous forme de chaîne, via le port série matériel auquel le HC-05 est connecté. Par exemple, voici la commande que vous enverrez pour démarrer le flux de données du capteur :

$start_sensor id=1 //Pour démarrer le flux de données du capteur 

Voici une liste des commandes que je connais :

$hello id=//Bonjour
$info id=//Info
$sinfo id=1 //Info capteur
$set_mode sid=1;md=mode;val=bg //Basse énergie
$set_mode sid=1;md=prs_osr;val=16 //Mode standard
$set_mode sid=1;md=prs_mr;val=32 //Haute précision
$start_sensor id=1 //Démarrer
$stop id=//Arrêter

Les données du capteur provenant du Sensor Hub Nano sont au format suivant :

$1,t,36.9299,1154206 //Température
$1,p,997.6813,1154206 //Pression
$1,a,130.4305,1154206 //Altitude

Remarque :Je voudrais faire une référence à Peter Smith article de blog, qui m'a aidé à démarrer la communication avec le Sensor Hub Nano en utilisant Bluetooth.

Une fois que nous sommes en mesure de démarrer le flux de données à partir du module, nous avons besoin d'un moyen d'analyser les données à partir de celui-ci. C'était, je dois l'admettre, la partie la plus difficile du projet; une fois que vous avez envoyé la commande pour démarrer le flux de données, le Sensor Hub Nano envoie simplement un flux de données, laissant à l'appareil recevant les données le soin d'analyser tout ce qui est sensible. Ainsi, après avoir essayé de nombreuses méthodes de complexité variable (que je n'aborderai pas ici), c'était la méthode la plus simple et la plus efficace que j'ai trouvée pour analyser les données du Sensor Hub Nano.

void getSensorValues() { 
// Récupère les valeurs du capteur du Sensor Hub Nano via le port Serial1
String junkVal;
if (Serial1.available()) {
junkVal =Serial1.readStringUntil('\n');
junkVal =Serial1.readStringUntil('t');
t =Serial1.parseFloat();
junkVal =Serial1.readStringUntil('p');
p =Serial1.parseFloat();
junkVal =Serial1.readStringUntil('a');
a =Serial1.parseFloat();
junkVal =Serial1.readStringUntil('\n');
}
}

Un écran sera également connecté à l'Arduino pour interagir avec l'utilisateur et afficher tous les messages, ou pour afficher l'heure ou les données du capteur (Plus d'informations à ce sujet au fur et à mesure de votre lecture).

Une fois que vous avez obtenu les données dans l'Arduino MKR1000, grâce à sa connectivité sans fil, vous pouvez envoyer les données à un certain nombre de plates-formes IoT différentes, telles que Cayenne ou Blynk.

J'avais décidé d'utiliser Cayenne pour cela, car j'étais impressionné par sa belle interface et sa configuration facile. Mais, malheureusement, il y avait quelques bugs avec la connexion WiFi MKR1000 qui nous empêchaient de sélectionner les broches. Je dois mentionner que les gars de Cayenne ont été très utiles, mais le problème n'a toujours pas été résolu. Par conséquent, j'ai finalement décidé d'utiliser Blynk, mais leur utilisation est très similaire, donc en changeant simplement quelques lignes de code Arduino, vous pouvez passer de Blynk à Cayenne si vous voulez le tester ou une fois que le problème est résolu. Les deux ont plus ou moins les mêmes caractéristiques, donc c'est juste votre propre préférence. Mais le seul avantage de Cayenne est que vous pouvez également y accéder sur un PC, tandis que Blynk ne fonctionne que sur les smartphones.

Maintenant, nous avons reçu des données du Sensor Hub Nano, nous les avons intégrées à l'Arduino et nous les avons transférées sur une plate-forme IoT (je dirai Blynk à partir de maintenant), et vous n'aurez donc plus qu'à personnaliser l'assistant d'Alzheimer en fonction de à vos propres besoins, et cela est traité dans une autre section (la détection de chute et de localisation y est abordée).

Remarque :j'ai essayé de documenter chaque étape en détail, mais si vous ne savez pas quelque chose (comme télécharger du code sur votre Arduino), ce serait une meilleure idée d'aller sur l'Arduino page d'accueil , familiarisez-vous avec cela pendant un certain temps et revenez ensuite pour cela, une fois que vous connaissez au moins les bases.

Configuration du module Bluetooth

La première chose à faire est d'obtenir l'adresse MAC de votre kit d'évaluation Sensor Hub Nano. Il y aura de nombreuses façons de le faire, mais je vais dire comment je l'ai fait.

Associez le Sensor Hub Nano à votre smartphone :

Téléchargez l'application Sensor Hub Nano Evaluation d'Infineon (pour Android) à partir d'ici et allumez votre Sensor Hub Nano. Ouvrez l'application et elle affichera le Sensor Hub Nano comme "IFX_NANOHUB", avec l'adresse MAC en dessous.

Notez-le car vous en aurez besoin plus tard.

Remarque :Vous feriez mieux de dissocier le Sensor Hub Nano de votre smartphone si vous ne l'utilisez pas maintenant, car si votre téléphone est à proximité avec le Bluetooth activé et que le Sensor Hub Nano est couplé, le téléphone se connecte automatiquement avec lui. . Et lorsque vous configurez le HC-05 et essayez de le coupler avec le Nano Hub, il ne se connecte tout simplement pas.

Passer le HC-05 en mode AT :

Le mode AT nous permet de configurer les paramètres du module Bluetooth HC-05 ; définissez le débit en bauds ou définissez s'il faut se connecter en tant qu'appareil esclave ou maître et plus encore. Nous devrons modifier certains paramètres du module pour lui permettre de récupérer avec succès les données du Sensor Hub Nano d'Infineon.

Tout d'abord, téléchargez le croquis "AT Commands" sur l'Arduino MKR1000. Cela nous permettra de donner des commandes au module Bluetooth en mode AT, via l'Arduino MKR1000.

// Croquis original du blog de Martyn Currey ici :
// http://www.martyncurrey.com/arduino-with-hc-05-bluetooth-module-at-mode/
//
// Sketch modifié par mes soins pour fonctionner avec Arduino MKR1000 !
//
// Croquis Bluetooth de base
// Connectez le module HC-05 et communiquez à l'aide du moniteur série
//
// Les valeurs par défaut du HC-05 en mode communication lors de la première mise sous tension.
// Doit être placé en mode AT
// Après une réinitialisation d'usine, le débit en bauds par défaut pour le mode de communication est de 38400
char c =' ';
void setup() {
// démarre la communication série avec l'ordinateur hôte
Serial.begin(9600);
Serial.println("Arduino avec HC-05 est prêt");
// démarrer la communication avec le HC-05 en utilisant 38400
Serial1.begin(38400);
Serial.println("Serial1 a commencé à 38400");
}
boucle vide() {
// Continuez à lire depuis HC-05 et envoyez à Arduino Serial Monitor
if (Serial1.available())
{
c =Serial1.read();
Serial.write(c);
}
// Continuez à lire depuis Arduino Serial Monitor et envoyez à HC-05
if (Serial.available())
{
c =Serial.read( );
// renvoie les commandes au moniteur série
// facilite le suivi des commandes
Serial.write(c);
Serial1.write(c);
}
}

Connectez ensuite uniquement le module Bluetooth à l'Arduino MKR1000 en suivant le schéma.

Remarque :Ce serait une bonne idée de tout câbler d'abord sur une maquette, et de procéder au câblage approprié une fois que vous l'avez correctement configuré.

Si vous essayez d'allumer le Sensor Hub Nano et le HC-05, vous verrez qu'ils ne se connectent pas automatiquement à ce moment. Voici ce que vous verriez :

Pour modifier les paramètres du HC-05, vous devrez mettre votre module Bluetooth en mode AT. La méthode pour le faire dépend de la carte de dérivation dont vous disposez et vous devrez donc peut-être procéder différemment. Si vous avez un module différent de celui que j'ai, rendez-vous sur le blog de Martyn Currey ici où vous pouvez trouver des informations détaillées sur la façon d'obtenir les modules Bluetooth HC-05 en mode AT. Si vous êtes bloqué, recherchez votre problème ou votre commentaire sur Google et j'essaierai de vous aider.

Mon module Bluetooth a le bouton interrupteur, je dois donc suivre les étapes suivantes pour l'obtenir en mode de commande AT (n'oubliez pas de télécharger le code de commande AT sur l'Arduino) :

  • Déconnectez l'alimentation du module. (Les lignes TX et RX sont toujours connectées !)
  • Appuyez et maintenez enfoncé le bouton du module fermé
  • Appliquez l'alimentation tout en maintenant le bouton enfoncé
  • Lorsque la LED s'allume, relâchez l'interrupteur

Une vidéo montrant comment obtenir le HC-05 en mode AT :

Une fois en mode AT, vous remarquerez une différence considérable dans la configuration des clignotements des LED sur le HC-05. En mode de communication, la LED clignote rapidement, environ 5 fois par seconde tandis qu'en mode AT, la LED clignote une fois toutes les deux secondes.

Configuration du module HC-05 :

Ouvrez le moniteur série, réglez le débit en bauds sur 9600 et sélectionnez « Both NL &CR ».

Remarque :Vous devrez le définir sur une nouvelle ligne et un retour chariot, sinon les commandes AT ne fonctionneront pas.

Tapez "AT" dans le moniteur série et vous devriez recevoir un "OK". Si vous le faites, vous pouvez continuer et donner les commandes comme je l'ai fait.

Fondamentalement, nous devons modifier ces paramètres en mode AT :

  • Supprimer tous les appareils actuellement couplés
  • Obtenez-le pour qu'il se connecte uniquement à une adresse MAC Bluetooth spécifiée
  • Définir le mode de connexion Bluetooth sur « Maître »
  • Spécifiez l'adresse MAC à laquelle nous avons besoin de nous connecter
  • Réglez le débit en bauds sur 115 200, le bit d'arrêt sur 2 bits et la parité paire

Les instructions ci-dessus ont été données pour que vous puissiez les utiliser même si vous disposez d'un autre module Bluetooth, en vous référant aux commandes et à ce qu'elles font. Mais maintenant, je vais lister les commandes que j'ai données pour que le HC-05 soit associé au Sensor Hub Nano.

  • AT+RMAAD
  • AT+CMODE=0
  • AT+ROLE=1
  • AT+BIND=1234,56,abcdef (remplacer par l'adresse MAC du Sensor Hub Nano)
  • AT+UART=115200,0,0

Voici un journal de mes commandes AT pour votre référence :

Vous devez maintenant débrancher l'Arduino pour désactiver le module Bluetooth. Cela le remettra en mode de communication.

Remarque :Si vous vous trompez dans les paramètres du HC-05, ce serait une bonne idée de réinitialiser le module aux paramètres par défaut et de recommencer à zéro avec la commande :AT+ORGL

Test de la connexion :

Maintenant, vous devrez tester si la dernière étape a réussi ; vous pouvez le faire en allumant le Sensor Hub Nano. La LED bleue clignotera très lentement, une fois toutes les deux secondes. Ensuite, branchez votre Arduino sur votre PC et notez le changement dans le clignotement de la LED sur le HC-05 et le Sesnor Hub Nano.

Regardez le clignotement maintenant et comparez-le avec le clignotement d'avant :

Il y a une différence notable et vous devez savoir que les deux modules sont connectés. Vous pouvez maintenant passer à la partie suivante, pour câbler le projet et le tester.

Remarque :Si vous avez déjà couplé votre smartphone avec le Sensor Hub Nano, vous devrez peut-être le dissocier, sinon cela entraînerait des problèmes de connexion. Il ne peut se connecter qu'à un seul appareil à la fois.

Test du projet barebones

Une fois que vous avez confirmé une connexion correcte entre le HC-05 et le Sensor Hub Nano par les motifs de clignotement des LED, procédez à la configuration de l'application Blynk sur le smartphone.

Configuration de l'application Blynk :

Téléchargez l'application Blynk (si vous ne l'avez pas déjà fait) pour votre appareil iOS ou Android à partir d'ici, et scannez le code QR via l'application Blynk. Il répliquera automatiquement les widgets de base nécessaires à ce moment.

Vous verrez un écran similaire :

N'apportez aucune modification ici à ce stade, et lisez simplement la suite.

Installation des bibliothèques requises :

Vous aurez besoin d'avoir deux bibliothèques différentes pour l'IDE Arduino installée pour que le code soit compilé sans erreur. Ce sont :

  • Blynk , pour le connecter à votre smartphone
  • u8g2lib , pour l'affichage

Il existe deux manières d'installer les bibliothèques requises. La première se fait via le « Library Manager » qui est disponible dans les versions les plus récentes de l'IDE Arduino, et la seconde est l'installation manuelle. Les deux méthodes sont décrites en détail ici, alors vérifiez le lien car je ne passerai pas par cela.

Téléchargement du code et test :

Une fois que vous avez installé les bibliothèques, téléchargez le code joint et apportez-y quelques modifications. Vous devrez ajouter votre code d'authentification de Blynk (qui vous est envoyé par e-mail lorsqu'un nouveau projet est réalisé dans Blynk), ainsi que votre SSID WiFi et votre mot de passe. Une fois cela fait, téléchargez le code sur le MKR1000.

Après avoir téléchargé le code, câblez le circuit selon le schéma.

Ensuite, ouvrez l'application Blynk sur votre smartphone, ouvrez le projet Assistant Alzheimer et appuyez sur le bouton de lecture. Branchez le MKR1000 (avec le HC-05 et l'écran câblés), et vous devriez voir le logo Alzheimer's Assistant sur l'écran. Il restera un instant, puis vous pourrez voir le message « En attente de Sensor Hub Nano ”. Allumez le petit interrupteur du Sensor Hub Nano, en vous assurant que vous êtes à portée Bluetooth du module HC-05. Il devrait dire "Connecté au Sensor Hub Nano d'Infineon ", et après quelques secondes, vous devriez voir les valeurs de pression, température et altitude sur votre smartphone.

Et après quelques secondes, vous verrez également l'heure au format 24 heures, ainsi que la date, et cela se synchronise avec Internet.

Voici une vidéo de test :

Si c'est le cas, félicitations, vous avez terminé la partie difficile de la configuration et vous venez maintenant de la personnaliser pour chaque patient, en fonction de ses préférences.

Personnaliser l'Assistant Alzheimer

Jusqu'à présent, ce que nous avons configuré récupère les données du capteur du DPS310 d'Infineon dans une configuration soignée et élégante, mais pour en faire quelque chose d'utile, nous devons configurer la configuration en fonction des exigences et des préférences individuelles. Par conséquent, dans cette section, je vais parler du code et de la façon de modifier l'Assistant Alzheimer pour qu'il fonctionne selon les préférences de chaque utilisateur. Je vais donner l'extrait de code pour chaque « fonctionnalité » et vous pouvez simplement l'ajouter dans le code principal avec quelques modifications.

Remarque :lorsque vous regardez le code que j'ai joint pour le « projet bare-bones », vous verrez qu'il utilise des fonctions enveloppées dans le BlynkTimer. Ce serait une bonne idée de les utiliser si vous souhaitez effectuer une personnalisation car il peut effectuer des tâches à un intervalle spécifié, et également, empêcher l'erreur d'inondation Blynk qui se produit lorsque votre matériel envoie beaucoup de demandes à Blynk. De plus, le code est « bare-bones » dans le sens où toutes les fonctions sont présentes mais ne sont pas incluses dans le code principal ; l'utilisateur doit modifier le code principal en fonction des besoins et peut avoir à ajuster l'intervalle de temps auquel chaque fonction s'exécute.

Le DPS310 :-

Le DPS310 d'Infineon est un capteur de pression barométrique numérique à faible coût qui offre une très grande précision, dans un très petit facteur de forme. Pour cette raison, il est parfait à utiliser dans un tel projet, et les valeurs peuvent être utilisées pour détecter les chutes chez un patient âgé, ou dans quelle pièce se trouve exactement le patient.

Remarque :je n'ai pas encore fabriqué le boîtier de la montre intelligente, j'utilise donc le Sensor Hub Nano sur ma main, connecté à l'Arduino via Bluetooth, comme sur cette image :

Détection de chute : Pour détecter les chutes, nous devrons donner une valeur de chute (la différence de pression atmosphérique, entre deux lectures sur un temps spécifié) et définir un dégagement. Par exemple, si le changement d'altitude entre deux valeurs successives (sur un temps disons une seconde) est compris entre la valeur de chute ± la valeur de dégagement, une chute sera détectée.

J'ai fait quelques tests et j'ai trouvé que la valeur de chute devrait être de 0,7 et la valeur de dégagement devrait être de ± 0,2, mais ils peuvent ne pas fonctionner dans toutes les situations. Cela est dû à une raison simple et compréhensible que lorsqu'une personne tombe, cela peut se produire de différentes manières. Par conséquent, l'utilisation d'un capteur secondaire (probablement un accéléromètre) sera nécessaire pour gagner en précision dans le système de détection de chute, et cela sera ajouté aux travaux futurs. Mais il est toujours possible qu'il existe d'autres algorithmes plus précis pour détecter les chutes, et je suis ouvert à les entendre; n'hésitez pas à commenter si vous avez des idées à ce sujet.

Une vidéo illustrant la détection des chutes :

Détecter où se trouve le patient : Cela fonctionne de manière similaire à l'algorithme de détection de chute. Par exemple, si vous avez besoin de savoir à quel étage se trouve le patient, vous pouvez obtenir la valeur d'altitude actuelle et la soustraire de la précédente. Et puis comparez la différence à une valeur prédéfinie. Cela indiquera à quel étage se trouve le patient.

Il s'agirait simplement d'utiliser une simple logique if and else pour déterminer à quel étage se trouve le patient (les valeurs d'altitude sont déjà présentes dans le code principal). Cela pourrait être indiqué à l'aide des widgets LED dans Blynk.

Remarque :Je n'ai pas inclus la détection de localisation dans le code principal, mais les utilisateurs peuvent l'ajouter au besoin, n'oubliez pas de l'utiliser comme fonction de minuterie Blynk.

La même technique pourrait également être utilisée pour détecter dans quelle pièce se trouve une personne. Dans ce cas, un capteur secondaire tel qu'un capteur de mouvement serait nécessaire sinon il pourrait y avoir beaucoup de faux déclencheurs.

Température : Le DPS310 affiche également la valeur de température que nous pouvons utiliser pour nous alerter de tout incident qui pourrait arriver au patient, par exemple un incendie. Si la température augmente jusqu'à une valeur spécifique, disons 45℃, cela alerte le gardien.

Mais comme le capteur DPS310 n'est pas fixé directement sur la peau (du moins dans ce cas d'utilisation), ce que nous obtenons n'est pas la température corporelle, mais il serait plus exact de dire que c'est la température du Sensor Hub Nano.

Le code pour cela est très simple (utilisez-le n'importe où dans la boucle principale) et pourrait ressembler à ceci :

if (t> maxTemp) { 
//Faites ce que vous voulez si la température est supérieure au maximum
}
else {
//Faites ce que vous voulez si la température est inférieure au maximum
}

Remarque :Tous les graphiques ci-dessus sont créés à l'aide du logiciel d'évaluation SESG2 fourni par Infineon.

Un buzzer et un interrupteur :-

Je n'ai pas mentionné cela auparavant, mais un buzzer et un interrupteur devraient également être présents dans le système et ils seront également très utiles. Par exemple, un buzzer pourrait être utilisé pour attirer l'attention du patient, quand il serait temps de prendre des médicaments par exemple, et l'interrupteur pourrait être utilisé comme dispositif de sécurité.

Et parce que nous utiliserons Blynk, l'interrupteur à bouton pourrait être configuré de manière à ce que, lorsqu'il est enfoncé, une notification apparaisse sur le téléphone du gardien ou appelle ou envoie un SMS (cela peut être fait à l'aide d'IFTTT et est donné plus tard ). Cela pourrait être l'extrait de code pour le faire :

void emailOnButtonPress() 
{
// *** ATTENTION :Vous êtes limité à envoyer UN SEUL E-MAIL PAR 15 SECONDES ! ***
// Envoyons un e-mail lorsque vous appuyez sur le bouton
// connecté à la broche numérique 2 de votre Arduino
int isButtonPressed =!digitalRead(2); // Inverser l'état, puisque le bouton est "Active LOW"
if (isButtonPressed) // Vous pouvez écrire n'importe quelle condition pour déclencher l'envoi d'e-mails
{
Serial.println ("Le bouton est enfoncé ."); // Cela peut être vu dans Serial Monitor
Blynk.email("[email protected]", "Subject:Button Logger", "You just press the button...");
// Ou, si vous souhaitez utiliser l'e-mail spécifié dans l'application (comme pour l'exportation d'applications) :
//Blynk.email("Subject :Button Logger", "Vous venez d'appuyer sur le bouton. ..");
}
}

Il est extrait de l'exemple de code Blynk et utilise une interruption pour vérifier le bouton. Cela pourrait être utilisé par le patient pour alerter le soignant en cas d'urgence, comme une chute qui n'a pas été détectée par l'algorithme de détection de chute. Vous pouvez obtenir l'exemple de code complet ici, qui envoie un e-mail une fois qu'un bouton est enfoncé.

Le buzzer peut être utilisé pour produire des tonalités (à l'aide de la commande Arduino tone() - plus d'informations ici), pour rappeler au patient une tâche telle qu'un médicament ou un exercice.

L'affichage :-

Une partie importante du projet, que l'utilisateur regarde réellement, est l'affichage. Les écrans Nokia 5110 sont couramment disponibles, faciles à installer et bon marché, mais ils ne sont pas si voyants, surtout lorsqu'ils sont utilisés dans un tel système. Les écrans OLED avec une résolution plus élevée seront une très bonne alternative, et vous pouvez facilement modifier le code pour travailler avec un car j'ai utilisé la bibliothèque u8g2 (github ici). Choisissez l'un des modèles d'écran ici et ajoutez-le au début du croquis (en supprimant la gamme Nokia 5110, bien sûr !). You will need to wire it up according to what it is in the code and you’re ready to go. You can also use bitmap images with a higher resolution display. You can also change the font for the text on the display, select fonts from the huge list here and edit the name of the font in the code.

Note:You may have to change the pixel positions for the text in the code if you use a display with a higher resolution.

That was just a brief description of the library used to get the display working. But, now I will tell you how to edit the code to get Alzheimer's Assistant to show the time or the Sensor Hub Nano data (temperature, Altitude and pressure).

Displaying time: To display the time, you could simply use an RTC (or time keeping module) but as we're connected to the Internet, it would be much more easier to use the Internet to sync the time. And as we're using Blynk that would make it even more simpler. You just need the RTC widget in your project. Now with a few lines of code, you can automatically retrieve the time from the Blynk server (Make sure to set your timezone from the Blynk widget). The main code is set to display the time by default (not the sensor values, discussed next)

Note:The time displayed on the screen could go up or down a minute, as it is synced from the internet, but despite that, I have tested it for a long time and have found it to be very accurate (just a difference of a few seconds).

Displaying the Sensor Hub Nano data: We could just as well display data from the Sensor Hub Nano in the display. Not that it would benefit the patient, but its good for debugging purposes, should you need it. That can be done with the following code snippet:

void showSensorValues() { 
//Shows the sensor values on the display
char bufT[10];
char bufP[10];
char bufA[10];
String(t).toCharArray(bufT, 10);
String(p).toCharArray(bufP, 10);
String(a).toCharArray(bufA, 10);
u8g2.clearBuffer();
u8g2.setFont(u8g2_font_6x10_tf );
//Display the temperature
u8g2.drawStr(0, 10, "T:");
u8g2.drawStr(12, 10, bufT);
u8g2.drawStr(73, 10, "C");
u8g2.drawCircle(70, 4, 1, U8G2_DRAW_ALL);
u8g2.drawHLine(0, 12, 85);
//Display the pressure
u8g2.drawStr(0, 26, "P:");
u8g2.drawStr(12, 26, bufP);
u8g2.drawStr(60, 26, "mBar");
u8g2.drawHLine(0, 28, 85);
//Display the altitude
u8g2.drawStr(0, 42, "A:");
u8g2.drawStr(12, 42, bufA);
u8g2.drawStr(72, 42, "m");
u8g2.drawHLine(0, 44, 85);
//Send the values to the display
u8g2.sendBuffer();
}

Don't forget to run this command to get the sensor data below:

getSensorValues(); 

But that's not all for the display. As I said in the start, Alzheimer's Assistant should be able to remind the patient of the tasks which need to be done daily, such as when to take medications or to remind the patient to exercise.

Using Eventor widget to remind:-

For that, we will be using the Eventor widget (check here for details) in Blynk.

Add the Eventor widget into your project (It's already there if you scanned the QR code above), and just follow the screenshots to see how to set it up:

In the above example, the Eventor widget is used to set up a fall detection notification.

Using the Eventor widget to remind is done by this code:

BLYNK_WRITE(vEVENTOR_PIN) { 
//Use the Eventor widget to check if it's time to do a task (take medication in this case)
int currentValue =param.asInt(); // 0 to 1
if (currentValue ==1) {
//Do here what you want to when its time for medication
showPillReminder();
playBuzzerReminder();
//This is just a tone, I haven't made it in the main code, but you can if you want!
}
else {
//If it's not the time for medication, do nothing
}
}

And the result on the display when it's the time for medication:

The same for exercise:

This is done by typing:

showExerciseReminder(); 

Instead of:

showPillReminder(); 

The eventor widget could, as said above, be used for a number of things. For example, you could set that an increase in temperature could result in sending an e-mail, and with no code modification!

Using different modes of the Sensor Hub Nano:-

You can test out the use of different modes for the Sensor Hub Nano. Using the following commands:

sendCommand(LOW_ENERGY);
sendCommand(STANDARD_MODE);
sendCommand(HIGH_PRECISION);

Using Blynk to switch modes could be more efficient. For that, set up your Blynk app like this:

As this had no use for me, I did not add it it in the main code, but you could always do so as needed (The commands are present, you just need to add them with a bit of logic in the main sketch).

Using Blynk and IFTTT:-

Blynk can allow any Arduino project to easily harness the power of IFTTT.

This is because you can use Blynk to send a webhook request to the IFTTT Webhooks channel (previously called Maker channel), and you could create an IFTTT applet which waits for the webhook to be triggered (from the Blynk and Arduino side) and you could get it to trigger anything else in response to that.

A simple example on how to use IFTTT and Blynk with webhooks :

The Blynk webhook widget could be used to send a webhook request like this:

This is the IFTTT webhook channel:

And using webhooks to trigger IFTTT is not the only method. IFTTT can also be triggered by using Blynk to send emails and tweets.

You have now made an applet. Time to test it.

Open "Services" in IFTTT and then select "Webhooks". Go to "Settings" and there you will see a URL. Copy that and open it in a new tab. There, instead of {event}, type the event name (which you set earlier). That was "button_pressed" for me, and so when I click on "Test it", this is the result after a few seconds:

Now that you have confirmed the Webhook works, you can just write the URL in the Blynk webhook settings and get a GET or POST request (through the Blynk webhook widget)

And, instead of SMS, you could just as well use phone calls, or even Twitter and Facebook, if you want, and it's just as simple That is the power of IFTTT.

It's the same thing as my smart home controller project here, and I also discussed it in detail there, but it is a great thing which I couldn't go by without mentioning.

Final Touches

By now, almost all of the electronics part of the project is complete, but a few things still remain. Read on for them, and in the end, I will list the future work which should be done to improve this project.

Battery and charging:

The MKR1000 has a port for a LiPo battery, which means you could attach one. But I don't have one at the moment so I will not be going into that but you should check out the website for the Arduino MKR1000 if you need information on that.

For charging, you have two options, using the MKR1000 USB port directly, and the other one is to use wireless charging, if you have it. I will be using the wireless charging for it. This is because I already have a wireless charging receiver and transmitter made by Futara Elettronica.

To use the receiver and transmitter, it's just a simple matter of providing the specified voltage to the transmitter. That will be the 'dock', where you can place Alzheimer's Assistant to charge. At the receiver side, you will just have to cut and attach a spare USB micro B cable (which goes to the MKR1000 USB port) and connect the other side to VCC and ground by looking at the pinout.

Just look at the images below to see how to wire it up:

And the end result:

The Enclosure:

As with every project, an enclosure is required for this too, and this how I intend Alzheimer's Assistant to look like:

Note:I do not yet have the privilege of a laser cutter or 3D printer, so the STL file is just intended for showing how the final project looks like and it's not to scale.

This concludes the documentation for Alzheimer's Assistant, but I would still like to include the future work section to describe the things which I very much wanted to do for the project, but couldn't, due to some reason or the other.

Future work:

As I said before, these are the things which I wanted to include in the project, which I will add in future, should I get the time:

  • Making a proper enclosure for it. Now I am just testing it on a breadboard but if I get access to a laser cutter or 3D printer I will update the documentation with that.
  • Using a Bluetooth 4.0 module instead of this one.
  • Or even better, using just the DPS310 Sensor instead of the Sensor Hub Nano. This would decrease the cost for the project overall, as it will eliminate the use of the Sensor Hub Nano and the bluetooth module; the DPS310 itself is a available for cheap. It's a matter of editing the main code to get temperature, pressure and altitude values from the DPS310 only, the rest of the part is done.
  • Using a secondary sensor to work along with the DPS310 for fall detection and the location detection. This would decrease the occurrence of both, false positive and false negative alerts. Most probably an accelerometer and a motion detector will be needed for both.
  • Adding a pulse sensor. I did not have one, so I couldn't add that. It should be a great addition to the project.
  • Using a higher resolution display, preferably an OLED. With that, graphics can also be included and that would be pretty neat.
  • Working on improving the battery life for the project. This can be done by using a deep sleep mode in the MKR1000, but I haven't used it in the code yet.

Thanks for reading, and hope you liked my project. Feel free to give me your opinions and ideas about the project.

Code

  • AT Commands
  • Alzheimer's Assistant
AT CommandsArduino
This code is used to configure the HC-05 in AT mode. Details on how to get in AT mode are given in the project description
// Original sketch from Martyn Currey's blog here:// http://www.martyncurrey.com/arduino-with-hc-05-bluetooth-module-at-mode///// Sketch modified by me to work with Arduino MKR1000!//// Basic Bluetooth sketch// Connect the HC-05 module and communicate using the serial monitor//// The HC-05 defaults to commincation mode when first powered on.// Needs to be placed in to AT mode// After a factory reset the default baud rate for communication mode is 38400char c =' ';void setup() { // start the serial communication with the host computer Serial.begin(9600); Serial.println("Arduino with HC-05 is ready"); // start communication with the HC-05 using 38400 Serial1.begin(38400); Serial.println("Serial1 started at 38400");}void loop() { // Keep reading from HC-05 and send to Arduino Serial Monitor if (Serial1.available()) { c =Serial1.read(); Serial.write(c); } // Keep reading from Arduino Serial Monitor and send to HC-05 if (Serial.available()) { c =Serial.read(); // mirror the commands back to the serial monitor // makes it easy to follow the commands Serial.write(c); Serial1.write(c); }}
Alzheimer's AssistantArduino
The main code for the project, used once you've configured and got the HC-05 to work with Sensor Hub Nano
//Including required libraries#include #include #include #include #include #include // You should get Auth Token in the Blynk App.// Go to the Project Settings (nut icon).char auth[] =""; //Enter your Blynk auth token here// Your WiFi credentials.// Set password to "" for open networks.char ssid[] ="";char pass[] ="";//Defining Sensor Hub Nano board commands#define HELLO "$hello id="#define INFO "$info id="#define SENSOR_INFO "$sinfo id=1"#define LOW_ENERGY "$set_mode sid=1;md=mode;val=bg"#define STANDARD_MODE "$set_mode sid=1;md=prs_osr;val=16"#define HIGH_PRECISION "$set_mode sid=1;md=prs_mr;val=32"#define START "$start_sensor id=1"#define STOP "$stop id="//Defining fall and clearance thresholds//You may need to change them, but I found these values to be good#define FALL 0.7#define CLEARANCE 0.2//Defining Blynk virtual pins#define vTEMPERATURE_PIN V0#define vPRESSURE_PIN V1#define vALTITUDE_PIN V2#define vEVENTOR_PIN V3#define vFALL_PIN V4//Declaring required variablesfloat t, p, a, previousA;//Boolean which tells tells if a fall is detected or notboolean fallState;//Variables needed for the fall detection algorithmunsigned long previousMillis =0;const long interv al =1000;//BTconnected is false when not connected and true when connectedboolean BTconnected =false;//Defining BT state and LCD backlight pinsint btStatePin =9;int backlightPin =2;BlynkTimer timer;WidgetRTC rtc;//Nokia 5110 Display wiringU8G2_PCD8544_84X48_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 7, /* data=*/ 8, /* cs=*/ 3, /* dc=*/ 5, /* reset=*/ 4);void setup() { //Initialize both serial ports:Serial.begin(115200); Serial1.begin(115200); //Setup the timed fuctions timer.setInterval(1000L, sendSensorValues); timer.setInterval(3000L, showTimeAndDate); //Setting up required inputs and outputs pinMode(btStatePin, INPUT); pinMode(backlightPin, OUTPUT); digitalWrite(backlightPin, LOW); u8g2.begin(); showStartMessage(); retard (2000); // wait until the bluetooth module has made a connection while (!BTconnected) { if (digitalRead(btStatePin) ==HIGH) { BTconnected =true; } else { showWaitingFor(); } } initSensorHub(); Blynk.begin(auth, ssid, pass); rtc.begin(); setBlynkWidgets(); showTimeAndDate(); sendCommand(START);}void loop() { Blynk.run(); timer.run(); getSensorValues(); checkIfFalling();}void sendCommand (String sensorCommand) { //This function sends commands through the bluetooth module on the hardware serial port to the the Sensor Hub Nano //For example:"sendCommand(START);", starts the flow of data from the sensor //The full list of commands I know are defined at the top of the sketch Serial1.println(sensorCommand);}void initSensorHub() { //Initialise the Sensor Hub Nano, and give an error if there is any problem String junkVal; sendCommand(INFO); while (Serial1.find("IFX_NanoHub") ==false) { sendCommand(INFO); Serial.println("ERROR"); showErrorMessage(); } junkVal =Serial1.readStringUntil('\n'); junkVal =""; showConnectedMessage(); delay(1500);}void getSensorValues() { //Retrieves the sensor values from the Sensor Hub Nano through the Serial1 port String junkVal; if (Serial1.available()) { junkVal =Serial1.readStringUntil('\n'); junkVal =Serial1.readStringUntil('t'); t =Serial1.parseFloat(); junkVal =Serial1.readStringUntil('p'); p =Serial1.parseFloat(); junkVal =Serial1.readStringUntil('a'); a =Serial1.parseFloat(); junkVal =Serial1.readStringUntil('\n'); }}void sendSensorValues() { //Sending the sensor values to the Blynk server Blynk.virtualWrite(vTEMPERATURE_PIN, t); Blynk.virtualWrite(vPRESSURE_PIN, p); Blynk.virtualWrite(vALTITUDE_PIN, a);}void checkIfFalling() { //Algorithm to check if the patient is falling unsigned long currentMillis =millis(); if ((currentMillis - previousMillis)>=interval) { float diff =previousA - a; if ((diff>=(FALL - CLEARANCE)) &&(diff <=(FALL + CLEARANCE))) { fallState =true; //Here insert what you need to do if fall is detected, such as sending a notification or email with Blynk //Or you could also use IFTTT to call or send an sms to alert the caretaker (more info in the project documentation) Serial.println("Falling"); showFallMessage(); //In this example, vFALL_PIN (virtual pin 4) is set to 255 if fall is detected Blynk.virtualWrite(vFALL_PIN, 255); //You can send a notification using only the notification widget too! //Blynk.notify("DPS310 detected a fall!"); } previousA =a; previousMillis =currentMillis; fallState =false; //Set vFALL_PIN to 0 if a fall isn't detected Blynk.virtualWrite(vFALL_PIN, 0); }}void showStartMessage() { //Shows the start-up message u8g2.clearBuffer(); u8g2.drawRFrame(3, 7, 75, 31, 7); u8g2.setFont(u8g2_font_prospero_bold_nbp_tf); u8g2.drawStr(8, 19, "Alzheimer's"); u8g2.drawStr(12, 35, "Assistant"); u8g2.sendBuffer();}void showWaitingFor() { //Shows the waiting for Sensor Hub Nano message u8g2.clearBuffer(); u8g2.setFont(u8g2_font_prospero_bold_nbp_tf); u8g2.drawStr(9, 15, "Waiting for"); u8g2.drawStr(8, 28, "Sensor Hub"); u8g2.drawStr(22, 41, "Nano !!!"); u8g2.sendBuffer();}void showConnectedMessage() { //Shows the connected message u8g2.clearBuffer(); u8g2.setFont(u8g2_font_7x13B_tf); u8g2.drawStr(0, 10, "Connected to"); u8g2.drawStr(8, 22, "Infineon's"); u8g2.drawStr(7, 34, "Sensor Hub"); u8g2.drawStr(29, 46, "Nano"); u8g2.sendBuffer();}void showErrorMessage() { //Shows the error message u8g2.clearBuffer(); // clear the internal memory u8g2.setFont(u8g2_font_fub14_tf); // choose a suitable font u8g2.drawStr(9, 30, "ERROR"); // write something to the internal memory u8g2.sendBuffer(); // transfer internal memory to the display}void showSensorValues() { //Shows the sensor values on the display char bufT[10]; char bufP[10]; char bufA[10]; String(t).toCharArray(bufT, 10); String(p).toCharArray(bufP, 10); String(a).toCharArray(bufA, 10); u8g2.clearBuffer(); u8g2.setFont(u8g2_font_6x10_tf ); //Display the temperature u8g2.drawStr(0, 10, "T:"); u8g2.drawStr(12, 10, bufT); u8g2.drawStr(73, 10, "C"); u8g2.drawCircle(70, 4, 1, U8G2_DRAW_ALL); u8g2.drawHLine(0, 12, 85); //Display the pressure u8g2.drawStr(0, 26, "P:"); u8g2.drawStr(12, 26, bufP); u8g2.drawStr(60, 26, "mBar"); u8g2.drawHLine(0, 28, 85); //Display the altitude u8g2.drawStr(0, 42, "A:"); u8g2.drawStr(12, 42, bufA); u8g2.drawStr(72, 42, "m"); u8g2.drawHLine(0, 44, 85); //Send the values to the display u8g2.sendBuffer();}void showFallMessage() { //Show the fall detected message u8g2.clearBuffer(); u8g2.setFont(u8g2_font_7x13B_tf); u8g2.drawStr(27, 20, "Fall"); u8g2.drawStr(13, 32, "Detected!"); u8g2.sendBuffer(); delay(1000);}void showPillReminder() { //Show the pill reminder message u8g2.clearBuffer(); u8g2.setFont(u8g2_font_7x13B_tf); u8g2.drawStr(0, 20, "Time to take"); u8g2.drawStr(5, 32, "your pills!"); u8g2.sendBuffer();}void showExerciseReminder() { //Show the exercise reminder message u8g2.clearBuffer(); u8g2.setFont(u8g2_font_7x13B_tf); u8g2.drawStr(16, 20, "Time to"); u8g2.drawStr(12, 32, "exercise!"); u8g2.sendBuffer();}void showTimeAndDate() { //Displays the time and date from the RTC widget in Blynk in 24 hours format if (year() ==1970) { //Serial.println("Time not yet synced"); } else if (year() !=1970) { char bufHours[3]; char bufColon[2]; char bufMinutes[3]; char bufDate[11]; String currentHours =String(hour()); String colon =":"; String currentMinutes =String(minute()); String currentDate =String(day()) + "/" + month() + "/" + year(); String(currentHours).toCharArray(bufHours, 3); String(colon).toCharArray(bufColon, 2); String(currentMinutes).toCharArray(bufMinutes, 3); String(currentDate).toCharArray(bufDate, 11); u8g2.clearBuffer(); u8g2.setFont(u8g2_font_inr33_mf); u8g2.drawStr(30, 30, bufColon); u8g2.setFont(u8g2_font_logisoso32_tn); u8g2.drawStr(0, 32, bufHours); u8g2.drawStr(45, 32, bufMinutes); u8g2.setFont(u8g2_font_saikyosansbold8_8n); u8g2.drawHLine(0, 35, 85); u8g2.drawStr(0, 46, bufDate); u8g2.sendBuffer(); }}BLYNK_WRITE(vEVENTOR_PIN) { //Use the Eventor widget to check if it's time to do a task (take medication in this case) int currentValue =param.asInt(); // 0 to 1 if (currentValue ==1) { showPillReminder(); //Serial.println("Time to take your pills"); } else { //Serial.println("Not the time to take pills"); }}void setBlynkWidgets() { //This sets the colour of each widget in the Blynk app //You may remove this from the sketch if you want to set colours manually through the Blynk app //You could also specifiy the hex value of each colour you need //Set temperature widget color to white Blynk.setProperty(vTEMPERATURE_PIN, "color", "#FFFFFF"); //Set pressure widget color to blue Blynk.setProperty(vPRESSURE_PIN, "color", "#00BBFF"); //Set altitude widget color to yellow Blynk.setProperty(vALTITUDE_PIN, "color", "#FFFF00");}BLYNK_CONNECTED() { //Synchronize time on connection, if connection drops rtc.begin();}

Pièces et boîtiers personnalisés

This is just to show how I intend the enclosure to look like. It's not at all to scale!

Schémas

This diagram is used when getting your HC-05 in AT mode and configuring it, using the Arduino MKR1000. Fritzing diagram for the bare-bones project to function Document listing AT commands for the HC-05

Processus de fabrication

  1. Détecteur de langage TinyML basé sur Edge Impulse et Arduino
  2. Jeu de gyroscope Arduino avec MPU-6050
  3. Dés numériques Arduino
  4. Jeu de roulette DIY 37 LED
  5. Mini arcade ATtiny85 :Serpent
  6. Détecteur de portée portable
  7. Lampe de bureau réactive audio Arduino
  8. voiture robot intelligente de suivi du visage
  9. Assistant personnel de santé PHA