Etape 5: programmation
Si vous pouvez fournir des critiques et des solutions de rechange au sujet de mon code, faites-le ! Programmation est un peu plus compréhensible que générales électronique pour moi, mais je ressens toujours perdu plus souvent qu’autrement.
Les commentaires sont dans le code - j’ai ajouté il dans une zone de texte et sous forme de fichier joint .ino, la bibliothèque peut être consultée ici. Si vous avez mise en Difficulté place le code de détection Capacitive & connexions, vérifiez cette vidéo, il m’a sauvé. Bibliothèque de fader de LED peut être trouvée ici. Croquis de traitement du MAKE magazine a été utilisée pour la visualisation, il peut être trouvé ici.
Avant d’écrire le code, je devais comprendre quelques choses de base impliqués dans le fonctionnement du cœur et le circuit que j’ai fait pour la mesure du pouls que j’expliquerai brièvement ici.
Le capteur que j’ai fait utilise une LDR dans un capteur. Une LDR a une gamme de résistances dans lequel la résistance dépend de la quantité de lumière qui l’atteint. Plus la lumière il est - le plus petit est la résistance et vice versa. Dans ce cas ce que nous ressentons comme une impulsion, c’est ce qui se passe après la valve aortique s’ouvre et le sang circule dans notre système circulatoire. Donc pour le moment de l’impulsion de la quantité de sang dans votre doigt est différent en vous donnant le changement dans la lecture. Si le sang a été poussé par le biais de votre corps par le cœur, cela signifie que le coeur se vide au moment de la beat - c’est pourquoi j’ai écrit un code qui assombrit le cœur à 0 lorsqu’il bat et peu de temps après les départs de gradation il à une valeur plus élevée, ce qui représente le cœur remplit de sang. Comme vous pouvez le voir dans le diagramme de Wiggers - le volume principal du coeur ne se pas progressivement remplit de sang jusqu'à ce que le prochain battement, mais il y a un afflux rapid où la plupart du cœur se remplit et ensuite encore plus au cours de la diastase, jusqu'à ce que commence la phase de la systole auriculaire. Chacun de ces trois phases semblent prendre environ un tiers du temps entre les battements, mais un autre diagramme d’un cycle cardiaque fourni ici il a divisé dont un axe du temps. Donc j’ai écrit le code selon elle : une pause d’environ 100 ms après l’apparition battre, puis rapidement à 90 % au cours de la prochaine 150ms et un reste plus lente s’estomper avec le prochain 200ms. Cela nous laisse plus d’une demi-seconde jusqu'à ce que le prochain beat pour un taux normal de 60 BPM, un fondu complet en jusqu'à ce que le prochain battre 130BPM et même la majeure partie du fondu dans jusqu'à 230BPM qui est à peine physiquement possible chez un être humain, peut-être pourrait être un problème si vous avez décidé de mesurer une impulsion d’un petit animal , mais je ne pense pas que votre Yorkshire Terrier se serait trop bien avec une impulsion comme ça non plus. Ce qui est important, c’est que cette action a résolu le problème d’avoir à moyenne et à prévoir le temps entre deux battements dans le code permettant de modifier les périodes de fondu.
Code v1.1 pour lampe à facettes cœur par Raitis. Visitez http://snipegift.com pour mes autres projets. flt int = 5 ; lumière de doigt void setup() {} void loop() {}
Tutorial complet pour la lampe sur instructables :
#include
#include
#define LED_PIN 3
#define DIR_UP 1
#define DIR_DOWN -1
LEDFader mené ;
direction de l’int = DIR_UP ;
Lampon CapacitiveSensor = CapacitiveSensor(4,2) ; interrupteur principal
CapacitiveSensor hrson = CapacitiveSensor(4,6) ; commutateur de hrs
int h = 0 ; capteur de fréquence cardiaque
pinMode (flt, sortie) ;
LED = LEDFader(LED_PIN) ;
LED.fade(0,1) ;
}
digitalWrite(flt,LOW) ;
LED.Update() ;
total1 long = lampon.capacitiveSensor(30) ;
long total2 = hrson.capacitiveSensor(30) ;
Si (total1 > 1600 & & led.get_value() > 0 & & led.is_fading() == false) {//turns voyant éteint, la valeur capsense est différente tout en USB et éteindre il, donc tester vôtre
LED.fade(0,1000) ;
direction = DIR_DOWN ;
}
Si (total1 > 1600 & & led.get_value() == 0 & & led.is_fading() == false) {//turns la lampe, la décoloration == false condition évite éteindre à nouveau d’une seule touche
LED.fade(179,1000) ;
direction = DIR_UP ;
}
tandis que (total2 > 700) {//a boucle active lorsque le doigt est placé sur la plaque d’acier dans la fosse de doigt
LED.Update() ;
total1 long = lampon.capacitiveSensor(30) ;
long total2 = hrson.capacitiveSensor(30) ;
h = analogRead(0) ; commence à lire le capteur
digitalWrite (flt, HIGH) ; allume la lumière de doigt
Delay(1) ; pour éviter le trac
Si (h > 150) {//when la lecture des heures est supérieur à 150 c’est très probablement d’impulsion, pas de bruit dans mon cas. Repose sur le transistor utilisé je suppose.
LED.fade(0,10) ; décoloration selon le fonctionne du coeur
direction = DIR_DOWN ;
LED.fade(0,100) ;
direction = DIR_DOWN ;
LED.fade (225, 150) ;
direction = DIR_UP ;
LED.fade (255, 200) ;
direction = DIR_UP ;
Delay(260) ; pour éviter le trac jusqu’en fondu à 225
}
Si (total2 < 150) {//why faire j’ai besoin de cela si tout doit sortir au-dessous de 700 en tout cas ?
LED.fade (179, 1000) ; s’estompe vers standards éclat de 70 % lorsque la plaque d’acier n’est pas plus touchée
direction = DIR_DOWN ;
rupture ;
}
}
}
Comme vous pouvez le voir, je n’a pas utilisé tout lissage pour l’entrée analogique. J’ai fait tester une version avec lui cependant et découvert que, lors de l’utilisation d’une moyenne mobile pour un faible nombre de lectures, comme 10, il n’y a aucun avantage réel de l’avoir. En moyenne un plus grand nombre de lectures adoucit les choses plutôt bien, mais ensuite, il y a un problème énorme retard. J’ai une idée d’une solution de contournement pour ce retard qui éliminerait probablement le trac lorsque vous placez le doigt (voir gif) et va le tester et ajouter alternative code ici si ça marche, mais comme maintenant, ce code que j’utilise fonctionne et je n’aurais aucun problème à laisser tel quel.
Mise à jour : J’ai essayé une alternative code avec lissage qui réagit à un changement de tendance de moyennes lectures d’identifier le rythme, mais alors que le concept fonctionne très bien seul, il ne fonctionne tout simplement comme on le suppose tout en essayant de s’estomper. Il réagit au rythme, mais la trouille tout le temps quand il ne le devrait pas. Si quelqu'un est vraiment faire cela et veut lui donner un essai, je peux vous envoyer un croquis de la code de substitution. Ne télécharger ici pour éviter toute confusion.