Puls Sensor kontrollerade svans (3 / 4 steg)
Steg 3: Puls Sensor och kod
Puls sensorn kan köpas från SparkFun för $24.95, sparkfun ger också koden måste du arbeta med gratis!
Så ta din Arduino, Arduino USB-kontakt, puls sensor, Motor sköld och få till en dator!
(även om det är mer än sannolikt du redan på en dator om du läser detta lol)
Varsågod och skjut din Motor sköld ovanpå din Arduino och koppla in den i datorn, när Arduino programmet är öppet kan du ansluta din puls sensor (lila tråd till A0, röd 5V eller 3V och svart till GRD) och jag utvecklat denna kod kombinera puls sensor koden och grundläggande sopa koden
Vad som ska hända är på som vissa puls är lägre än 66 bpm kommer den att flytta ett schablonbelopp om pulsen är högre än 66 bpm då det kommer att gå snabbare:
#include < Servo.h > Servo myservo; skapa objekt för att styra en servo servo maximalt åtta servo objekt kan skapas int pinNineInput = 9; int pulsePin = 0; Puls Sensor lila tråd ansluten till analoga stift 0 int blinkPin = 13. PIN blinka ledde på varje taktslag int fadePin = 5; stift till fancy classy blekning blink på varje taktslag int fadeRate = 0; används för att blekna LED på med PWM på fadePin dessa variabler är flyktiga eftersom de används under avbrottstjänstens rutin! flyktiga int BPM; används för att hålla pulsen flyktiga int Signal; innehar inkommande rådata flyktiga int IBI = 600; håller tiden mellan beats, mellan Beat intervallet flyktiga booleska puls = false; sant när pulse wave är hög, falskt när det är lågt flyktiga booleska QS = false; blir sant när Arduoino finner ett beat. int pos = BPM; void setup() { myservo.attach(9); tillmäter objektet servo servo på pin 9 pinMode(blinkPin,OUTPUT); PIN-kod som kommer att blinka till ditt hjärta! pinMode(fadePin,OUTPUT); PIN-kod som kommer att blekna till ditt hjärta! Serial.BEGIN(115200); Vi är överens om att prata snabbt! interruptSetup(); ställer in för att läsa puls Sensor signal varje 2mS O-kommentera nästa rad om du driver puls Sensor vid låg spänning, OCH TILLÄMPA DEN SPÄNNINGEN TILL A-REF STIFT analogReference(EXTERNAL); } void loop() { om (pinNineInput < 66) { för (pos = 0; pos < 360; pos += 2) / / går från 0 grader till 360 grader {/ / i steg om 1 grad myservo.write(POS); berätta servo gå för att placera i variabel "pos" Delay(5); Waits 5ms för servo att nå ställning } för (pos = 360; pos > = 1; pos-= 2) / / går från 360 grader till 0 grader { myservo.write(POS); berätta servo gå för att placera i variabel "pos" Delay(5); Waits 5ms för servo att nå ställning } för (pos = 0; pos < 360; pos + = 1) / / går från 0 grader till 360 grader {/ / i steg om 1 grad myservo.write(POS); berätta servo gå för att placera i variabel "pos" Delay(15); Waits 15 MS för servo att nå ställning } för (pos = 360; pos > = 1; pos-= 1) / / går från 360 grader till 0 grader { myservo.write(POS); berätta servo gå för att placera i variabel "pos" Delay(15); Waits 15 MS för servo att nå ställning } för (pos = 0; pos < 180; pos + = 1) / / går från 0 grader till 180 grader {/ / i steg om 1 grad myservo.write(POS); berätta servo gå för att placera i variabel "pos" Delay(3); Waits 3ms för servo att nå ställning } för (pos = 180, pos > = 1; pos-= 1) / / går från 180 grader till 0 grader { myservo.write(POS); berätta servo gå för att placera i variabel "pos" Delay(3); Waits 3ms för servo att nå ställning } för (pos = 0; pos < 180; pos + = 1) / / går från 0 grader till 180 grader {/ / i steg om 1 grad myservo.write(POS); berätta servo gå för att placera i variabel "pos" Delay(3); Waits 3ms för servo att nå ställning } för (pos = 180, pos > = 1; pos-= 1) / / går från 180 grader till 0 grader { myservo.write(POS); berätta servo gå för att placera i variabel "pos" Delay(3); Waits 3ms för servo att nå ställning } för (pos = 0; pos < 180; pos + = 1) / / går från 0 grader till 180 grader {/ / i steg om 1 grad myservo.write(POS); berätta servo gå för att placera i variabel "pos" Delay(3); Waits 3ms för servo att nå ställning } för (pos = 180, pos > = 1; pos-= 1) / / går från 180 grader till 0 grader { myservo.write(POS); berätta servo gå för att placera i variabel "pos" Delay(3); Waits 3ms för servo att nå ställning } } annars om (pinNineInput > = 66) { { för (pos = 0; pos < 360; pos += 2) / / går från 0 grader till 360 grader {/ / i steg om 1 grad myservo.write(POS); berätta servo gå för att placera i variabel "pos" Delay(5); Waits 5ms för servo att nå ställning } för (pos = 360; pos > = 1; pos-= 2) / / går från 360 grader till 0 grader { myservo.write(POS); berätta servo gå för att placera i variabel "pos" Delay(5); Waits 5ms för servo att nå ställning } för (pos = 0; pos < 360; pos + = 1) / / går från 0 grader till 360 grader
{/ / i steg om 1 grad
myservo.write(POS); berätta servo gå för att placera i variabel "pos"
Delay(4); Waits 4ms för servo att nå ställning
}
för (pos = 360; pos > = 1; pos-= 1) / / går från 360 grader till 0 grader
{
myservo.write(POS); berätta servo gå för att placera i variabel "pos"
Delay(4); Waits 4ms för servo att nå ställning
}
för (pos = 0; pos < 180; pos + = 1) / / går från 0 grader till 180 grader
{/ / i steg om 1 grad
myservo.write(POS); berätta servo gå för att placera i variabel "pos"
Delay(3); Waits 3ms för servo att nå ställning
}
för (pos = 180, pos > = 1; pos-= 1) / / går från 180 grader till 0 grader
{
myservo.write(POS); berätta servo gå för att placera i variabel "pos"
Delay(3); Waits 3ms för servo att nå ställning
}
för (pos = 0; pos < 180; pos + = 1) / / går från 0 grader till 180 grader
{/ / i steg om 1 grad
myservo.write(POS); berätta servo gå för att placera i variabel "pos"
Delay(3); Waits 3ms för servo att nå ställning
}
för (pos = 180, pos > = 1; pos-= 1) / / går från 180 grader till 0 grader
{
myservo.write(POS); berätta servo gå för att placera i variabel "pos"
Delay(3); Waits 3ms för servo att nå ställning
}
för (pos = 0; pos < 180; pos + = 1) / / går från 0 grader till 180 grader
{/ / i steg om 1 grad
myservo.write(POS); berätta servo gå för att placera i variabel "pos"
Delay(3); Waits 3ms för servo att nå ställning
}
för (pos = 180, pos > = 1; pos-= 1) / / går från 180 grader till 0 grader
{
myservo.write(POS); berätta servo gå för att placera i variabel "pos"
Delay(3); Waits 3ms för servo att nå ställning
}
}
}
annat
{
för (pos = 0; pos < 360; pos += 2) / / går från 0 grader till 360 grader
{/ / i steg om 1 grad
myservo.write(POS); berätta servo gå för att placera i variabel "pos"
Delay(10); Waits 10ms för servo att nå ställning
}
för (pos = 360; pos > = 1; pos-= 2) / / går från 360 grader till 0 grader
{
myservo.write(POS); berätta servo gå för att placera i variabel "pos"
Delay(10); Waits 10ms för servo att nå ställning
}
för (pos = 0; pos < 360; pos + = 1) / / går från 0 grader till 360 grader
{/ / i steg om 1 grad
myservo.write(POS); berätta servo gå för att placera i variabel "pos"
Delay(15); Waits 15 MS för servo att nå ställning
}
för (pos = 360; pos > = 1; pos-= 1) / / går från 360 grader till 0 grader
{
myservo.write(POS); berätta servo gå för att placera i variabel "pos"
Delay(15); Waits 15 MS för servo att nå ställning
}
för (pos = 0; pos < 180; pos + = 1) / / går från 0 grader till 180 grader
{/ / i steg om 1 grad
myservo.write(POS); berätta servo gå för att placera i variabel "pos"
Delay(7); Waits 7ms för servo att nå ställning
}
för (pos = 180, pos > = 1; pos-= 1) / / går från 180 grader till 0 grader
{
myservo.write(POS); berätta servo gå för att placera i variabel "pos"
Delay(7); Waits 7ms för servo att nå ställning
}
för (pos = 0; pos < 180; pos + = 1) / / går från 0 grader till 180 grader
{/ / i steg om 1 grad
myservo.write(POS); berätta servo gå för att placera i variabel "pos"
Delay(7); Waits 7ms för servo att nå ställning
}
för (pos = 180, pos > = 1; pos-= 1) / / går från 180 grader till 0 grader
{
myservo.write(POS); berätta servo gå för att placera i variabel "pos"
Delay(7); Waits 7ms för servo att nå ställning
}
för (pos = 0; pos < 180; pos + = 1) / / går från 0 grader till 180 grader
{/ / i steg om 1 grad
myservo.write(POS); berätta servo gå för att placera i variabel "pos"
Delay(7); Waits 7ms för servo att nå ställning
}
för (pos = 180, pos > = 1; pos-= 1) / / går från 180 grader till 0 grader
{
myservo.write(POS); berätta servo gå för att placera i variabel "pos"
Delay(7); Waits 7ms för servo att nå ställning
}
}
Serial.Print(BPM);
Serial.Print("\t");
sendDataToProcessing ('S ', Signal); Skicka bearbetning raw puls Sensor-data
om (QS == true) {/ / kvantifierade Self flagga är sant när arduino finner ett hjärtslag
fadeRate = 255; Ange "fadeRate" variabel till 255 blekna LED med puls
sendDataToProcessing('B',BPM); Skicka puls med prefixet "B"
sendDataToProcessing('Q',IBI); Skicka tid mellan beats med prefixet "Q"
QS = false; återställa flaggan kvantifierade Self till nästa gång
// }
ledFadeToBeat();
myservo.attach(9); tillmäter objektet servo servo på pin 9
myservo.write(POS);
Delay(3000); ta en paus
}
void ledFadeToBeat() {
fadeRate-= 15. värdet för LED-fade
fadeRate = constrain(fadeRate,0,255); hålla LED fade värde från att gå in i negativa tal!
analogWrite(fadePin,fadeRate); Fade LED
}
void sendDataToProcessing (char symbol, int data) {
Serial.Print(symbol); valutasymbolen skrivs som prefix berättar behandling vilken typ av data kommer
Serial.println(data); data som ska skickas avslutas med en radmatning
// }
När koden är uppladdad prova att ansluta din svans till del av den motoriska sköld som säger Servo2.
Obs:
Denna kod utvecklades endast för en servomotor, för dem som vill styra två servomotorer måste du justera denna kod. Jag kommer också att arbeta på den för att redogöra för två servomotorer men om någon slår mig till det och utvecklar en kod av sina egna vänligen Glöm inte att dela! : D
Den ursprungliga puls Sensor koden kan hittas här:
SparkFun