Stap 3: Pulse Sensor en code
De Pulse-sensor kan worden gekocht van SparkFun voor $24.95, sparkfun biedt ook de code die u werken moeten zult met gratis!
Dus pak uw Arduino Arduino,, Arduino USB plug, Pulse sensor, Motorschild en krijgen op een computer!
(ook al meer dan waarschijnlijk je al op een computer als je dit lol leest)
Ga je gang en schuif uw Motor Shield bovenop je Arduino en daarin op de computer aansluit, zodra de Arduino-programma geopend is kunt u de stekker in uw hartslag sensor (paarse draad A0, rode tot 5V of 3V en zwart naar GRD) en ik ontwikkelde deze code combineren de hartslag sensor code en de code van de fundamentele sweep
Wat er moet gebeuren is op als bepaalde hartslag lager dan 66 bpm zal gaan met een standaard snelheid is als uw hartslag is hoger dan 66 bpm dan het zullen zich sneller bewegen:
#include < Servo.h > Servo myservo; maken van servo-object om te bepalen van een servo maximaal acht servo-objecten kan worden gemaakt int pinNineInput = 9; int pulsePin = 0; Hartslag Sensor paarse draad aangesloten op analoge pin 0 int blinkPin = 13; PIN te knipperen leidde bij elke hartslag int fadePin = 5; PIN te verbeelden stijlvolle fading knipperen bij elke hartslag int fadeRate = 0; gebruikt voor LED fade op met PWM op fadePin deze variabelen zijn volatiel, omdat ze worden gebruikt tijdens de interrupt service routine! vluchtige int BPM; gebruikt om te houden van de polsslag vluchtige int signaal; houdt de binnenkomende onbewerkte gegevens vluchtige int IBI = 600; houdt de tijd tussen de beats, het Interval tussen Beat vluchtige Booleaanse Pulse = false; waar wanneer pulse wave hoog, false is als het lage vluchtige Booleaanse QS = false; waar wordt als Arduoino een beat vindt. int pos = BPM; VOID Setup { myservo.attach(9); de servo op pin 9 hecht aan de servo-object pinMode(blinkPin,OUTPUT); PIN die naar uw hartslag zal knipperen! pinMode(fadePin,OUTPUT); PIN dat tot je hartslag vervagen zal! Serial.begin(115200); We willen snel praten! interruptSetup(); stelt te lezen Pulse Sensor signaal elke 2mS UN-COMMENT de volgende regel als u zijn het VOEDEN van de Pulse-Sensor op laagspanning, EN DIE SPANNING VAN TOEPASSING OP DE PIN A-REF analogReference(EXTERNAL); } void loop { Als (pinNineInput < 66) { voor (pos = 0; pos < 360; pos += 2) / / gaat van 0 graden tot 360 graden {/ / in stappen van 1 graad myservo.write(POS); servo naar positie in de variabele 'pos' vertellen delay(5); wacht 5ms voor de servo te bereiken de positie } voor (pos = 360; pos > = 1; pos-= 2) / / gaat van 360 graden naar 0 graden { myservo.write(POS); servo naar positie in de variabele 'pos' vertellen delay(5); wacht 5ms voor de servo te bereiken de positie } voor (pos = 0; pos < 360; pos += 1) / / gaat van 0 graden tot 360 graden {/ / in stappen van 1 graad myservo.write(POS); servo naar positie in de variabele 'pos' vertellen delay(15); wacht 15ms voor de servo te bereiken de positie } voor (pos = 360; pos > = 1; pos-= 1) / / gaat van 360 graden naar 0 graden { myservo.write(POS); servo naar positie in de variabele 'pos' vertellen
delay(15); wacht 15ms voor de servo te bereiken de positie
}
voor (pos = 0; pos < 180; pos += 1) / / gaat van 0 graden tot 180 graden
{/ / in stappen van 1 graad
myservo.write(POS); servo naar positie in de variabele 'pos' vertellen
delay(3); wacht 3ms voor de servo te bereiken de positie
}
voor (pos = 180; pos > = 1; pos-= 1) / / gaat van 180 graden tot 0 graden
{
myservo.write(POS); servo naar positie in de variabele 'pos' vertellen
delay(3); wacht 3ms voor de servo te bereiken de positie
}
voor (pos = 0; pos < 180; pos += 1) / / gaat van 0 graden tot 180 graden
{/ / in stappen van 1 graad
myservo.write(POS); servo naar positie in de variabele 'pos' vertellen
delay(3); wacht 3ms voor de servo te bereiken de positie
}
voor (pos = 180; pos > = 1; pos-= 1) / / gaat van 180 graden tot 0 graden
{
myservo.write(POS); servo naar positie in de variabele 'pos' vertellen
delay(3); wacht 3ms voor de servo te bereiken de positie
}
voor (pos = 0; pos < 180; pos += 1) / / gaat van 0 graden tot 180 graden
{/ / in stappen van 1 graad
myservo.write(POS); servo naar positie in de variabele 'pos' vertellen
delay(3); wacht 3ms voor de servo te bereiken de positie
}
voor (pos = 180; pos > = 1; pos-= 1) / / gaat van 180 graden tot 0 graden
{
myservo.write(POS); servo naar positie in de variabele 'pos' vertellen
delay(3); wacht 3ms voor de servo te bereiken de positie
}
}
anders als (pinNineInput > = 66)
{
{
voor (pos = 0; pos < 360; pos += 2) / / gaat van 0 graden tot 360 graden
{/ / in stappen van 1 graad
myservo.write(POS); servo naar positie in de variabele 'pos' vertellen
delay(5); wacht 5ms voor de servo te bereiken de positie
}
voor (pos = 360; pos > = 1; pos-= 2) / / gaat van 360 graden naar 0 graden
{
myservo.write(POS); servo naar positie in de variabele 'pos' vertellen
delay(5); wacht 5ms voor de servo te bereiken de positie
}
voor (pos = 0; pos < 360; pos += 1) / / gaat van 0 graden tot 360 graden
{/ / in stappen van 1 graad
myservo.write(POS); servo naar positie in de variabele 'pos' vertellen
delay(4); wacht 4ms voor de servo te bereiken de positie
}
voor (pos = 360; pos > = 1; pos-= 1) / / gaat van 360 graden naar 0 graden
{
myservo.write(POS); servo naar positie in de variabele 'pos' vertellen
delay(4); wacht 4ms voor de servo te bereiken de positie
}
voor (pos = 0; pos < 180; pos += 1) / / gaat van 0 graden tot 180 graden
{/ / in stappen van 1 graad
myservo.write(POS); servo naar positie in de variabele 'pos' vertellen
delay(3); wacht 3ms voor de servo te bereiken de positie
}
voor (pos = 180; pos > = 1; pos-= 1) / / gaat van 180 graden tot 0 graden
{
myservo.write(POS); servo naar positie in de variabele 'pos' vertellen
delay(3); wacht 3ms voor de servo te bereiken de positie
}
voor (pos = 0; pos < 180; pos += 1) / / gaat van 0 graden tot 180 graden
{/ / in stappen van 1 graad
myservo.write(POS); servo naar positie in de variabele 'pos' vertellen
delay(3); wacht 3ms voor de servo te bereiken de positie
}
voor (pos = 180; pos > = 1; pos-= 1) / / gaat van 180 graden tot 0 graden
{
myservo.write(POS); servo naar positie in de variabele 'pos' vertellen
delay(3); wacht 3ms voor de servo te bereiken de positie
}
voor (pos = 0; pos < 180; pos += 1) / / gaat van 0 graden tot 180 graden
{/ / in stappen van 1 graad
myservo.write(POS); servo naar positie in de variabele 'pos' vertellen
delay(3); wacht 3ms voor de servo te bereiken de positie
}
voor (pos = 180; pos > = 1; pos-= 1) / / gaat van 180 graden tot 0 graden
{
myservo.write(POS); servo naar positie in de variabele 'pos' vertellen
delay(3); wacht 3ms voor de servo te bereiken de positie
}
}
}
anders
{
voor (pos = 0; pos < 360; pos += 2) / / gaat van 0 graden tot 360 graden
{/ / in stappen van 1 graad
myservo.write(POS); servo naar positie in de variabele 'pos' vertellen
delay(10); wacht 10ms voor de servo te bereiken de positie
}
voor (pos = 360; pos > = 1; pos-= 2) / / gaat van 360 graden naar 0 graden
{
myservo.write(POS); servo naar positie in de variabele 'pos' vertellen
delay(10); wacht 10ms voor de servo te bereiken de positie
}
voor (pos = 0; pos < 360; pos += 1) / / gaat van 0 graden tot 360 graden
{/ / in stappen van 1 graad
myservo.write(POS); servo naar positie in de variabele 'pos' vertellen
delay(15); wacht 15ms voor de servo te bereiken de positie
}
voor (pos = 360; pos > = 1; pos-= 1) / / gaat van 360 graden naar 0 graden
{
myservo.write(POS); servo naar positie in de variabele 'pos' vertellen
delay(15); wacht 15ms voor de servo te bereiken de positie
}
voor (pos = 0; pos < 180; pos += 1) / / gaat van 0 graden tot 180 graden
{/ / in stappen van 1 graad
myservo.write(POS); servo naar positie in de variabele 'pos' vertellen
delay(7); wacht 7ms voor de servo te bereiken de positie
}
voor (pos = 180; pos > = 1; pos-= 1) / / gaat van 180 graden tot 0 graden
{
myservo.write(POS); servo naar positie in de variabele 'pos' vertellen
delay(7); wacht 7ms voor de servo te bereiken de positie
}
voor (pos = 0; pos < 180; pos += 1) / / gaat van 0 graden tot 180 graden
{/ / in stappen van 1 graad
myservo.write(POS); servo naar positie in de variabele 'pos' vertellen
delay(7); wacht 7ms voor de servo te bereiken de positie
}
voor (pos = 180; pos > = 1; pos-= 1) / / gaat van 180 graden tot 0 graden
{
myservo.write(POS); servo naar positie in de variabele 'pos' vertellen
delay(7); wacht 7ms voor de servo te bereiken de positie
}
voor (pos = 0; pos < 180; pos += 1) / / gaat van 0 graden tot 180 graden
{/ / in stappen van 1 graad
myservo.write(POS); servo naar positie in de variabele 'pos' vertellen
delay(7); wacht 7ms voor de servo te bereiken de positie
}
voor (pos = 180; pos > = 1; pos-= 1) / / gaat van 180 graden tot 0 graden
{
myservo.write(POS); servo naar positie in de variabele 'pos' vertellen
delay(7); wacht 7ms voor de servo te bereiken de positie
}
}
Serial.Print(BPM);
Serial.Print("\t");
sendDataToProcessing (de ', signaal); Stuur verwerking van de ruwe gegevens van de Pulse Sensor
Als (QS == true) {/ / gekwantificeerd zelf vlag geldt wanneer arduino een hartslag vindt
fadeRate = 255; 'FadeRate' variabele ingesteld op 255 te vervagen LED met pulse
sendDataToProcessing('B',BPM); Stuur hartslag met een 'B'-prefix
sendDataToProcessing('Q',IBI); tijd tussen beats met een voorvoegsel 'Q' verzenden
QS = false; Reset de vlag gekwantificeerd zelf voor de volgende keer
// }
ledFadeToBeat();
myservo.attach(9); de servo op pin 9 hecht aan de servo-object
myservo.write(POS);
delay(3000); Neem een pauze
}
ongeldig ledFadeToBeat() {}
fadeRate-= 15; LED vervagen waarde instellen
fadeRate = constrain(fadeRate,0,255); LED vervagen waarde in negatieve getallen gaan houden!
analogWrite(fadePin,fadeRate); vervagen van LED
}
VOID sendDataToProcessing (char symbool, int data) {}
Serial.Print(Symbol); symbool voorvoegsel vertelt verwerken wat voor soort gegevens komt
Serial.println(Data); de gegevens moeten worden verzonden die wordt afgesloten met een regeleinde
// }
Nadat de code is geüpload testen door het aansluiten van uw staart naar het deel van de motor schild dat Servo2 zegt.
Opmerking:
Deze code is alleen ontwikkeld voor een servomotor, voor degenen die willen controleren van twee servomotoren zul je deze code aanpassen. Ik zal ook werken op het voor twee servomotoren, maar als iemand slaat me aan en een code van hun eigen gelieve ontwikkelt Vergeet niet om te delen! : D
De originele code van de Pulse Sensor kan hier worden gevonden:
SparkFun