Étape 3: Capteur d’impulsions et code
Le capteur d’impulsions peut être acheté chez SparkFun 24,95 $, sparkfun fournit également le code que vous devrez travailler avec gratuitement !
Alors prenez votre Arduino, prise USB Arduino, capteur d’impulsions, bouclier moteur et arriver à un ordinateur !
(même si c’est plus que probablement vous avez déjà atteint un ordinateur si vous lisez ce lol)
Allez-y et faites glisser votre flasque arrière sur le dessus de votre Arduino et branchez dedans à votre ordinateur, une fois le programme Arduino est ouvert vous pouvez brancher votre capteur d’impulsions (fil violet à A0, rouge à 5V ou 3V et noir à GRD) et j’ai développé ce code combinant le code capteur de pouls et le code de base de balayage
Ce qui devrait arriver est à comme certaine fréquence cardiaque est inférieure à 66 bpm elle empruntera à un taux normal si votre fréquence cardiaque est supérieure à 66 bpm puis il se déplace plus vite :
#include < Servo.h > Servo myservo ; Créez l’objet servo pour contrôler un servo vous pouvez créer un maximum de huit objets de servo int pinNineInput = 9 ; int pulsePin = 0 ; Impulsion capteur violet fil connecté à broche analogique 0 int blinkPin = 13 ; broche à clignoter conduit à chaque battement int fadePin = 5 ; broche pour fantaisie chic décoloration blink à chaque battement int fadeRate = 0 ; utilisé pour se faner LED sur avec PWM sur fadePin ces variables sont instables car ils sont utilisés au cours de la routine d’interruption du service ! volatile int puls/min ; utilisée pour stocker la valeur du pouls volatile int Signal ; contient les données brutes entrantes volatile int IBI = 600 ; détient le temps entre deux battements, l’intervalle inter-Beat volatil Pulse booléen = false ; true lorsque l’onde de pouls est élevé, false lorsqu’elle est faible volatils QS booléens = false ; prend la valeur true lorsque Arduoino trouve un battement. int pos = puls/min ; void setup() { myservo.Attach(9) ; attache le servo sur la broche 9 à l’objet de servo pinMode(blinkPin,OUTPUT) ; goupille qui se mettra à clignoter à votre rythme cardiaque ! pinMode(fadePin,OUTPUT) ; goupille qui se dissipera à votre rythme cardiaque ! Serial.Begin(115200) ; Nous sommes d’accord parler vite ! interruptSetup() ; met en place à lu signal capteur d’impulsions chaque 2mS UN commentaire la ligne suivante si vous êtes mise sous tension du capteur d’impulsions à basse tension, ET DEMANDER QUE LA TENSION SUR LA BROCHE A-REF analogReference(EXTERNAL) ; } void loop() { Si (pinNineInput < 66) { pour (pos = 0; pos < 360; pos += 2) / / va de 0 degrés à 360 degrés {/ / par incréments de 1 degré myservo.Write(POS) ; dire de servo pour aller à positionner dans la variable « pos » Delay(5) ; attend 5 ms pour le servo atteindre la position } pour (pos = 360; pos > = 1; pos-= 2) / / va de 360 degrés à 0 degrés { myservo.Write(POS) ; dire de servo pour aller à positionner dans la variable « pos » Delay(5) ; attend 5 ms pour le servo atteindre la position } pour (pos = 0; pos < 360; pos += 1) / / va de 0 degrés à 360 degrés {/ / par incréments de 1 degré myservo.Write(POS) ; dire de servo pour aller à positionner dans la variable « pos » Delay(15) ; attend 15 ms pour le servo atteindre la position } pour (pos = 360; pos > = 1; pos-= 1) / / va de 360 degrés à 0 degrés { myservo.Write(POS) ; dire de servo pour aller à positionner dans la variable « pos »
Delay(15) ; attend 15 ms pour le servo atteindre la position
}
pour (pos = 0; pos < 180; pos += 1) / / va de 0 degrés à 180 degrés
{/ / par incréments de 1 degré
myservo.Write(POS) ; dire de servo pour aller à positionner dans la variable « pos »
Delay(3) ; attend 3ms du servo atteindre la position
}
pour (pos = 180; pos > = 1; pos-= 1) / / va de 180 degrés à 0 degrés
{
myservo.Write(POS) ; dire de servo pour aller à positionner dans la variable « pos »
Delay(3) ; attend 3ms du servo atteindre la position
}
pour (pos = 0; pos < 180; pos += 1) / / va de 0 degrés à 180 degrés
{/ / par incréments de 1 degré
myservo.Write(POS) ; dire de servo pour aller à positionner dans la variable « pos »
Delay(3) ; attend 3ms du servo atteindre la position
}
pour (pos = 180; pos > = 1; pos-= 1) / / va de 180 degrés à 0 degrés
{
myservo.Write(POS) ; dire de servo pour aller à positionner dans la variable « pos »
Delay(3) ; attend 3ms du servo atteindre la position
}
pour (pos = 0; pos < 180; pos += 1) / / va de 0 degrés à 180 degrés
{/ / par incréments de 1 degré
myservo.Write(POS) ; dire de servo pour aller à positionner dans la variable « pos »
Delay(3) ; attend 3ms du servo atteindre la position
}
pour (pos = 180; pos > = 1; pos-= 1) / / va de 180 degrés à 0 degrés
{
myservo.Write(POS) ; dire de servo pour aller à positionner dans la variable « pos »
Delay(3) ; attend 3ms du servo atteindre la position
}
}
ElseIf (pinNineInput > = 66)
{
{
pour (pos = 0; pos < 360; pos += 2) / / va de 0 degrés à 360 degrés
{/ / par incréments de 1 degré
myservo.Write(POS) ; dire de servo pour aller à positionner dans la variable « pos »
Delay(5) ; attend 5 ms pour le servo atteindre la position
}
pour (pos = 360; pos > = 1; pos-= 2) / / va de 360 degrés à 0 degrés
{
myservo.Write(POS) ; dire de servo pour aller à positionner dans la variable « pos »
Delay(5) ; attend 5 ms pour le servo atteindre la position
}
pour (pos = 0; pos < 360; pos += 1) / / va de 0 degrés à 360 degrés
{/ / par incréments de 1 degré
myservo.Write(POS) ; dire de servo pour aller à positionner dans la variable « pos »
Delay(4) ; attend 4ms du servo atteindre la position
}
pour (pos = 360; pos > = 1; pos-= 1) / / va de 360 degrés à 0 degrés
{
myservo.Write(POS) ; dire de servo pour aller à positionner dans la variable « pos »
Delay(4) ; attend 4ms du servo atteindre la position
}
pour (pos = 0; pos < 180; pos += 1) / / va de 0 degrés à 180 degrés
{/ / par incréments de 1 degré
myservo.Write(POS) ; dire de servo pour aller à positionner dans la variable « pos »
Delay(3) ; attend 3ms du servo atteindre la position
}
pour (pos = 180; pos > = 1; pos-= 1) / / va de 180 degrés à 0 degrés
{
myservo.Write(POS) ; dire de servo pour aller à positionner dans la variable « pos »
Delay(3) ; attend 3ms du servo atteindre la position
}
pour (pos = 0; pos < 180; pos += 1) / / va de 0 degrés à 180 degrés
{/ / par incréments de 1 degré
myservo.Write(POS) ; dire de servo pour aller à positionner dans la variable « pos »
Delay(3) ; attend 3ms du servo atteindre la position
}
pour (pos = 180; pos > = 1; pos-= 1) / / va de 180 degrés à 0 degrés
{
myservo.Write(POS) ; dire de servo pour aller à positionner dans la variable « pos »
Delay(3) ; attend 3ms du servo atteindre la position
}
pour (pos = 0; pos < 180; pos += 1) / / va de 0 degrés à 180 degrés
{/ / par incréments de 1 degré
myservo.Write(POS) ; dire de servo pour aller à positionner dans la variable « pos »
Delay(3) ; attend 3ms du servo atteindre la position
}
pour (pos = 180; pos > = 1; pos-= 1) / / va de 180 degrés à 0 degrés
{
myservo.Write(POS) ; dire de servo pour aller à positionner dans la variable « pos »
Delay(3) ; attend 3ms du servo atteindre la position
}
}
}
d’autre
{
pour (pos = 0; pos < 360; pos += 2) / / va de 0 degrés à 360 degrés
{/ / par incréments de 1 degré
myservo.Write(POS) ; dire de servo pour aller à positionner dans la variable « pos »
Delay(10) ; attente de 10 ms pour le servo atteindre la position
}
pour (pos = 360; pos > = 1; pos-= 2) / / va de 360 degrés à 0 degrés
{
myservo.Write(POS) ; dire de servo pour aller à positionner dans la variable « pos »
Delay(10) ; attente de 10 ms pour le servo atteindre la position
}
pour (pos = 0; pos < 360; pos += 1) / / va de 0 degrés à 360 degrés
{/ / par incréments de 1 degré
myservo.Write(POS) ; dire de servo pour aller à positionner dans la variable « pos »
Delay(15) ; attend 15 ms pour le servo atteindre la position
}
pour (pos = 360; pos > = 1; pos-= 1) / / va de 360 degrés à 0 degrés
{
myservo.Write(POS) ; dire de servo pour aller à positionner dans la variable « pos »
Delay(15) ; attend 15 ms pour le servo atteindre la position
}
pour (pos = 0; pos < 180; pos += 1) / / va de 0 degrés à 180 degrés
{/ / par incréments de 1 degré
myservo.Write(POS) ; dire de servo pour aller à positionner dans la variable « pos »
Delay(7) ; attend 7ms pour le servo atteindre la position
}
pour (pos = 180; pos > = 1; pos-= 1) / / va de 180 degrés à 0 degrés
{
myservo.Write(POS) ; dire de servo pour aller à positionner dans la variable « pos »
Delay(7) ; attend 7ms pour le servo atteindre la position
}
pour (pos = 0; pos < 180; pos += 1) / / va de 0 degrés à 180 degrés
{/ / par incréments de 1 degré
myservo.Write(POS) ; dire de servo pour aller à positionner dans la variable « pos »
Delay(7) ; attend 7ms pour le servo atteindre la position
}
pour (pos = 180; pos > = 1; pos-= 1) / / va de 180 degrés à 0 degrés
{
myservo.Write(POS) ; dire de servo pour aller à positionner dans la variable « pos »
Delay(7) ; attend 7ms pour le servo atteindre la position
}
pour (pos = 0; pos < 180; pos += 1) / / va de 0 degrés à 180 degrés
{/ / par incréments de 1 degré
myservo.Write(POS) ; dire de servo pour aller à positionner dans la variable « pos »
Delay(7) ; attend 7ms pour le servo atteindre la position
}
pour (pos = 180; pos > = 1; pos-= 1) / / va de 180 degrés à 0 degrés
{
myservo.Write(POS) ; dire de servo pour aller à positionner dans la variable « pos »
Delay(7) ; attend 7ms pour le servo atteindre la position
}
}
Serial.Print(BPM) ;
Serial.Print("\t") ;
sendDataToProcessing (les de ', de Signal) ; Envoyer les données brutes du capteur d’impulsions de traitement
Si (QS == true) {/ / drapeau Self quantifié est vrai quand arduino trouve un battement de coeur
fadeRate = 255 ; La valeur « fadeRate » Variable 255 se faner LED avec impulsion
sendDataToProcessing('B',BPM) ; Envoyer la fréquence cardiaque avec un préfixe « B »
sendDataToProcessing('Q',IBI) ; Envoyer le temps entre deux battements avec le préfixe « Q »
QS = false ; réinitialiser l’indicateur auto quantifiés pour la prochaine fois
// }
ledFadeToBeat() ;
myservo.Attach(9) ; attache le servo sur la broche 9 à l’objet de servo
myservo.Write(POS) ;
Delay(3000) ; Faites une pause
}
void ledFadeToBeat() {}
fadeRate-= 15 ; valeur de fondu de LED
fadeRate = constrain(fadeRate,0,255) ; valeur fondu LED empêcher d’entrer dans les nombres négatifs !
analogWrite(fadePin,fadeRate) ; fondu de LED
}
void sendDataToProcessing (symbole de char, int data) {}
Serial.Print(Symbol) ; préfixe de symbole indique quel type de données provient de la transformation
Serial.println(Data) ; les données à envoyer qui a abouti à un retour chariot
// }
Une fois que le code est téléchargé le tester en branchant votre queue à la partie de la flasque arrière qui dit Servo2.
Remarque :
Ce code est uniquement développé pour un servo-moteur, pour ceux qui veulent contrôler deux servomoteurs que vous devrez ajuster ce code. Je vais également travailler là-dessus pour tenir compte de deux servomoteurs, mais si quelqu'un me bat pour elle et qu’elle élabore un code de leur propre s’il vous plaît n’oublient pas de partager ! : D
Le code original de capteur d’impulsions peut être trouvé ici :
SparkFun