Étape 4: Arduino Software
Pour y aller que vous devez les bibliothèques GFX et ST7735 Arduino de Adafruit. Vous pouvez les trouver ici (Merci Serge).
Bibliothèque GFX
https://github.com/Adafruit/Adafruit-gfx-Library
ST7735 bibliothèque
https://github.com/Adafruit/Adafruit-ST7735-Library
Ne sais pas comment faire pour installer une bibliothèque Arduino ? Ensuite, allez ici pour les instructions complètes ;
https://www.Arduino.cc/en/Guide/Libraries
Comment ça marche
Au démarrage, le logiciel le IR Led s’allume et indique à l’utilisateur allant de l’appareil est nécessaire et va commencer dans 10 secondes. Cela donne le temps de l’utilisateur de placer leur doigt dans le capteur.
Pendant allant du logiciel indique la sortie de l’ADC pour 10000 fois, faisant de brèves pauses pour 1 ms par lu. Ceci est utilisé pour enregistrer les limites minimales et maximales du signal échantillonné brut.
Ces valeurs maximales et minimales sont utilisés pour déterminer les points de déclenchement dynamique pour détecter un front montant brusquement dans le battement du cœur pour activer la synchronisation de la période entre deux impulsions et donc de calculer le BPM.
Le déclencheur de bas niveau introduit hystérésis et est nécessaire pour empêcher la ré-déclenchement en raison de la haute fréquence d’échantillonnage, comme indiqué ci-dessus.
Le déclencheur de niveau élevé point iPulseTriggerLevelHigh est 90 % du PIC (étoiles vertes dans les diagrammes ci-dessus) et le point de déclenchement de niveau bas est iPulseTiggerLevelLow est de 70 % du PIC (étoiles bleues dans les diagrammes ci-dessus).
Le logiciel puis entre dans une boucle infinie, prélèvement d’échantillons de signal après un temps écoulé dicté par ulElapsedTime, environ 1 ms ou 1000Hz. Cela peut être réglé en faisant varier le #define SAMPLE_PERIOD_uS.
Le délai écoulé n’est pas un appel bloquant ainsi les autres tâches de fond peuvent être effectuées si nécessaire.
Une fois qu’un échantillon du cœur battre est lues dans l’ADC que la valeur est ajustée pour s’adapter à la fenêtre de forme d’onde. Cette échelle est juste un direct 0-5v = > 0-1023 = > 0-100.
J’ai volontairement omis d’auto mise à l’échelle de la fenêtre de forme d’onde, que j’ai trouvé quand il est inclus, la forme d’onde assez beaucoup monté la fenêtre chaque fois que, comme vous vous en doutez. Dans la pratique si vous avez perdu un grand nombre d’informations importantes, telles que quand mes doigts étaient froids ou mal positionné dans le capteur et en conséquence le niveau de sortie de l’impulsion était faible. Je l’ai senti plus utile de garder cette information présente. Cependant j’ai prévoyaient une variable fAmplificationFactor (ligne 171, affectez 2.1) qui permet de mesurer votre signal si vos compétences en électronique et de la construction donnent un signal moins sensible que j’ai pu réaliser.
Le code détermine ensuite s’il s’agit d’un front montant (voir schémas ci-dessus pour la logique). S’il est, et on n’a décelé aucun front descendant qu'il stocke l’heure dans ulPulseCurrentTime. Toutefois, si c’est un front descendant a été détectée, que cela signifie le temps écoulé est la période entre deux impulsions.
Ensuite, le logiciel calcule le BPM (comme dans les schémas ci-dessus) et ajuste pour un enveloppement à l’appel de fonction millis() si besoin.
Cette nouvelle fréquence du pouls est stockée dans l’ordre en la roulant fenêtre tampon tableau lBPMArray [] et la moyenne calculée sur tous les échantillons. Le nouveau BPM calculé est comparé avec le vieux BPM. S’il y a une différence l’affichage est mis à jour avec la nouvelle valeur. Réduisant ainsi les frais généraux de mise à jour TFT.
Au cours de l’élaboration du code, j’ai remarqué que ce n’était pas possible d’optimiser une vitesse de balayage unique du TFT pour BPMs s’étendant de 50... 200. Ainsi, iSampleCountMax est changé dynamiquement lorsque le rythme cardiaque dépasse 100BPM tel que l’écran ne devienne pas trop de monde et la forme de l’impulsion est toujours claire.
Le logiciel puis clips la forme d’onde si pour une raison quelconque, il est pris en gros pour l’affichage et met à jour l’écran avec le dernier échantillon d’ADC et parcelles dans la fenêtre de forme d’onde.
Plus tôt les valeurs pointées sont supprimés tout d’abord en écrivant une ligne noire verticale devant la position de la parcelle « à la volée ».
Boucle se répète.
Moyenne mobile
La fréquence cardiaque est calculée en prenant une constamment mise à jour moyenne des périodes mobile entre deux impulsions. La longueur de la moyenne mobile peut être ajustée en modifiant la valeur de #define MAX_BPM_ARRAY_SIZE. Plus vous faire lentes les mises à jour, mais le mieux l’approximation (en supposant que le doigt est maintenu constant dans le capteur).
Afin d’amorcer la moyenne avec une valeur initiale le tableau lBPMArray [] est préchargé avec une fréquence cardiaque de 60 BPM au démarrage.
.
Une copie du code a été incluse ci-dessous.