Talar Arduino pulsmätare (4 / 5 steg)

Steg 4: kodning

Detta är verkligen mitt i detta projekt (heh). För steg 3, du har fysiska pulsmätaren, men nu du bestämmer vad du ska göra med enheten. RGB LCD-Shield levereras med 5 programmerbara knappar. För vårt projekt beslutat vi om följande:

  • UPP: Tar en läsning av din puls.
  • NER: Visar medelvärdet av sista 4 puls avläsningar.
  • VÄNSTER: Visar de 4 sista avläsningarna.
  • HÖGER: Ger lite motivation.
  • Välj: Förklarar varje knapp.

Det finns tre delar till kodning:

  1. Puls sensordata
  2. Wave sköld ljudutgång
  3. RGB LCD sköld display & knapp pressar

Nu släpper över själva koden. Vi maskor i princip fritt tillgängliga kod tillsammans från RGB LCD sköld, Wave sköld och puls Sensor webbplatser. Vi kommer också bifoga filerna behöver du i TXT-format. Observera att du behöver en fil som tillhandahållits av puls Sensor hemsida kallas Interrupt.ino (ändrar inte denna fil på något sätt). Denna fil körs i bakgrunden och gör det hårda arbete som går in i beräkningen av din BPM från puls sensormätningar. Observera att filen måste vara i samma katalog som den som visar vi nedan för koden för att arbeta. Det är också viktigt att komma ihåg ljud filnamnen för att kalla de specifika filerna. Du kommer att märka playcomplete ("file_name.wav") innehåller ett specifikt filnamn. När du laddar upp följande fil (med avbrott filen i samma katalog) är du bra att gå!

< p > / / project: interaktiv pulsmätare med ljud < /p >< p > / / LCD sköld bibliotek
#include < Wire.h >< wire.h >
#include < < /wire.h > MCP23017.h Adafruit_ >< /p >< p >< wire.h >< adafruit_mcp23017.h > #include << adafruit_rgblcdshield.h >< /adafruit_rgblcdshield.h >< /adafruit_mcp23017.h >< /wire.h > Adafruit_RGBLCDShield.h >< /p >< p > #include < Average.h >< average.h >< /average.h >< /p >< p > / / waveshield bibliotek
#include < FatReader.h >< /p >< p >< fatreader.h > #include < SdReader.h >< sdreader.h >
#include < avr/pgmspace.h >< avr pgmspace.h= "" >
#include "WaveUtil.h"
#include "WaveHC.h" < / avr >< /sdreader.h >< /fatreader.h >< /p >< p > / / föremål för ljud
SdReader kort; Detta objekt innehåller information för kortet
FatVolume vol; Detta innehåller information för partitionen på kortet
FatReader rot. Detta innehåller information för filsystemet på kortet
FatReader f; Detta innehåller information för filen vi är spelar
WaveHC våg; Detta är enda våg (ljud)-objektet, eftersom vi bara kommer att spela en i taget < /p >< p > #define DÄMPNINGSTID 100 / / knappen debouncer, kanske inte behövs < /p >< p > / / ===
Anpassad från Adafruit Waveshield hemsida
metoder för felsökning
void sdErrorCheck(void) / / kontrollerar SD-kortet
{
om (! card.errorCode()) återvända;
putstring ("\n\rSD I/O fel:");
Serial.Print(Card.ErrorCode(), HEX);
putstring (",");
Serial.println(Card.errorData(), HEX);
While(1);
} < /p >< p > / / Anpassad från Adafruit rgb lcd sköld hemsida
Rgb LCD-skärmen använder I2C SCL och SDA stiften. På klassiska Arduinos
Detta är Analog 4 och 5 så du inte kan använda de för analogRead() längre
Men kan du ansluta andra I2C sensorer till I2C bussen och andel
I2C bussen.
Adafruit_RGBLCDShield lcd = Adafruit_RGBLCDShield(); < /p >< p > / / dessa #defines gör det enkelt att ställa in bakgrundsljus färg
#define röd 0x1
#define gul 0x3
#define grön 0x2
#define kricka 0x6
#define blå 0x4
#define VIOLET 0x5
#define vit 0x7 < /p >< p > / / ===
PULS SENSOR kod: anpassad från puls Sensor hemsida för detta projekt
/ * < /P >< p >>> puls Sensor Amped 1,2 <<
Denna kod är för puls Sensor Amped av Joel Murphy och Yury Gitman
< en href = "http://www.pulsesensor.com" > www.pulsesensor.com < /a >
>>> Puls Sensor lila tråd går till analoga stift 0 <<<
Puls Sensor provtagning och behandling sker i bakgrunden via Timer 2 avbrott. 2mS samplingsfrekvens.
PWM på stift 3 och 11 fungerar inte när du använder denna kod, eftersom vi använder Timer 2!
Följande variabler uppdateras automatiskt:
Signal: int som håller den analoga signalen datan direkt från sensorn. uppdateras varje 2mS.
IBI: int som håller tidsintervallet mellan slår. 2mS resolution.
BPM: int som håller pulsen, kommer varje beat, från tidigare 10 IBI värden i genomsnitt.
QS: boolean som görs true puls är försumbart och BPM är uppdaterad. Användaren måste återställa.
Puls: booleskt värde som är sant när ett hjärtslag är kände sedan false i tid med pin13 LED går ut.
* / < /p >< p > / / variabler
int pulsePin = 2; Puls Sensor lila tråd ansluten till analoga stift 2 (rgb LCD-sköld)
int blinkPin = 6; PIN blinka ledde på varje slå < /p >< p > int fadeRate = 0; < /p >< p > int heartvals [4].
int h = 0; < /p >< p > / / 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; har tiden mellan slår, måste vara seedad!
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 en beat. < /p >< p > / / === < /p >< p > void setup() {< /p >< p > pinMode (blinkPin, produktionen); / / PIN-kod som kommer att blinka till ditt hjärta! < /p >< p > / / Set utgångsstift för DAC kontroll. Detta stift definieras i biblioteket
pinMode (2, utgång);
pinMode (3, OUTPUT);
pinMode (4, OUTPUT);
pinMode (5, OUTPUT); < /p >< p > / / Aktivera pull-up motstånd på switch stift (analoga ingångar)
digitalWrite (14, hög).
digitalWrite (15, hög).
digitalWrite (16, hög).
digitalWrite (17, hög),
digitalWrite (18, hög).
digitalWrite (19, hög); < /p >< p > Serial.begin (9600); < /p >< p > / / felsökning metoder från waveshield hemsida
om (! card.init(true)) {//play med 4 MHz spi om 8MHz inte fungerar för dig
om (! card.init()) {//play med 8 MHz spi (standard snabbare!)
putstring_nl ("kort init. misslyckades!"); Något gick fel, kan skriva ut varför
sdErrorCheck();
While(1); sedan 'stoppa' - gör ingenting!
} < /p >< p > / / Aktivera optimera Läs - vissa kort kan timeout. Inaktivera om du har problem
card.partialBlockRead(true); < /p >< p > / / nu kommer vi söker en FAT-partition!
uint8_t del;
för (del = 0; del < 5; del ++) {/ / vi har upp till 5 platser att titta i
om (vol.init (kort, del))
bryta; Vi hittade en, låter borgen
} < /p >< p > om (del == 5) {/ / om vi slutade inte att hitta en :(
putstring_nl ("ingen giltig FAT-partition!");
sdErrorCheck(); Något gick fel, kan skriva ut varför
While(1); sedan 'stoppa' - gör ingenting!
} < /P >< p > / / kan tala om för användaren om vad vi hittade
putstring ("använda partition");
Serial.Print (del, DEC);
putstring (", typ är FAT");
Serial.println(Vol.fatType(),dec); FAT16 eller FAT32? < /p >< p > / / försöka öppna rotkatalogen
om (! root.openRoot(vol)) {
putstring_nl kan inte ("öppna rotfästa dir!"); Något gick fel,
While(1); sedan 'stoppa' - gör ingenting!
} < /p >< p > / / sekundär fil med kod för puls Sensor
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); < /p >< p > / / in för LCD
LCD.BEGIN (16, 2);
lcd.setBacklight (röd); < /p >< p > lcd.setCursor (0, 0);
LCD.Print ("Välkommen till din");
lcd.setCursor (0, 1);
LCD.Print ("Arduino HRM!");
playcomplete("Intro.wav"); < /p >< p > / / lcd.clear(); < /p >< p >} / / END void SETUP < /p >< p > uint8_t jag = 0; < /p >< p > / / === < /p >< p > void loop() {
uint8_t knappar = lcd.readButtons();
om (knappar) {
LCD.Clear();
lcd.setCursor (0, 0); < /p >< p > om (knappar & BUTTON_UP) {
heartRate();
}
om (knappar & BUTTON_LEFT) {
playcomplete ("readings.wav");
lcd.setCursor (0, 0);
LCD.Print ("senaste 4 avläsningar:");
lcd.setCursor (0, 1);
int i;
för (jag = 0; jag < 4; i ++) {
LCD.println (heartvals [i]);
}
}
om (knappar & BUTTON_RIGHT) {
int randNumber = 0;
randNumber = random (1, 10);
om (randNumber == 1) {
playcomplete("1.wav");
}
om (randNumber == 2) {
playcomplete("2.wav");
}
om (randNumber == 3) {
playcomplete("3.wav");
}
om (randNumber == 4) {
playcomplete("4.wav");
}
om (randNumber == 5) {
playcomplete("5.wav");
}
om (randNumber == 6) {
playcomplete("6.wav");
}
om (randNumber == 7) {
playcomplete("7.wav");
}
om (randNumber == 8) {
playcomplete("8.wav");
}
om (randNumber == 9) {
playcomplete("9.wav");
}
om (randNumber == 10) {
playcomplete("10.wav");
}
}
om (knappar & BUTTON_DOWN) {
averageH();
}
om (knappar & BUTTON_SELECT) {
LCD.Print ("Markera");
playcomplete ("select.wav");
}
}
} / / END void LOOP < /p >< p > / / === < /p >< p > / / metoder behövs för att spela WAV-filer
Anpassad från waveshield webbplats < /p >< p > / / spelar en full fil från början till slut med ingen paus.
void playcomplete(char *name) {
Ring vår hjälpare för att hitta och spela detta namn
playfile(Name);
samtidigt (wave.isplaying) {
göra ingenting samtidigt dess spelar
}
dess gjort spelar nu
} < /p >< p > void playfile(char *name) {
se om objektet våg för närvarande gör något
om (wave.isplaying) {/ / redan spelar något, så sluta det!
Wave.stop(); Sluta
}
titta i rotkatalogen och öppna filen
om (! f.open (rot, namn)) {
putstring kunde inte ("öppna filen");
Serial.Print(Name);
hemkomst.
}
OK läsa filen och förvandla det till en våg objekt
om (! wave.create(f)) {
putstring_nl ("inte en giltig WAV");
hemkomst.
} < /p >< p > / / ok tid att spela! starta uppspelningen
Wave.Play();
}
=== < /p >< p > / / en metod kallad att läsa och visa BPM på lcd på upp tryck på knapp
void heartRate() {
int x = 10. < /p >< p > medan (x! = 0) {
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
lcd.setCursor (0, 0);
LCD.Print ("puls:");
lcd.setCursor (12, 0);
LCD.println (BPM);
lcd.setCursor (0, 1);
LCD.Print ("du är vid liv!");
fördröjning (500).
QS = false; återställa flaggan kvantifierade Self till nästa gång
x--;
}
}
heartvals [h] = BPM;
om (h < 4) {
h ++;
}
annars om (h == 4) {
h = 0;
heartvals [h] = BPM;
} < /p >< p > int i;
för (jag = 0; jag < 4; i ++) {
Serial.println (heartvals[i]);
}
playcomplete ("finished.wav");
} < /p >< p > / / metod för att beräkna medelvärdet av de 4 värdena i heartvals
void averageH() {
int medelvärde = 0;
om (heartvals [3] == 0) {
lcd.setCursor (4, 0);
LCD.Print ("fel...");
lcd.setCursor (0, 1);
LCD.Print ("4 värden behövs");
}
annat {
playcomplete ("average.wav");
genomsnittliga = medelvärdet (heartvals, 4);
lcd.setCursor (0, 0);
LCD.Print ("genomsnittliga:");
lcd.setCursor (9, 0);
LCD.Print (genomsnitt);
}</p><p>}</p><p>//===============================================================================</p>

Se Steg
Relaterade Ämnen

Soldriven pulsmätare

Hej alla! I detta Instructable, ska jag visa dig hur man gör ditt eget Arduino-baserad pulsmätare! Men detta är inte bara alla andra DIY värme Rate Monitor; Detta är en Solar Powered pulsmätare!Denna pulsmätare är att för landsbygden i Afrika och Asi...

DIY puls pulsmätare

Följande instructable representerar en puls pulsmätare med Linkit ONE. Det kan visa din puls på en seriell övervaka. Projektet är mycket lätt att göra och kräver mycket mindre delar och tid att montera.Detta är min första instructable. Behaga en posi...

Linkit en puls pulsmätare

Detta är en riktigt rolig och cool instructable, i detta instructable jag ska visa dig hur man bygger en puls pulsmätare. Denna enhet övervakar ditt hjärta BPM (slag per minut) och visar den på skärmen. Detta projekt har ett brett utbud av medicinska...

Pulspletysmografi - (IR-pulsmätare)

Detta Instructable dokumenterar hur man skapar en enkel pulsmätare med pulspletysmografi med en IR fototransistor via transmissiv absorption att Arduino att bearbeta de pulserande data och Visa live resultat via en TFT-skärm.För att använda källkoden...

Elektrokardiografiska & pulsmätare

detta instructable visar dig hur man gör en elektrokardiografiska och pulsmätare. Den är avsedd att vara en rolig vetenskap projekt bara. Naturligtvis bör det inte fungera som ett medicinskt syfte.Observera: För att undvika varje risk för elektriska...

LinkIt en avlägsen pulsmätare

Detta instructable visar hur man bygger en Wifi aktiverat pulsmätare med hjälp Mediatek LinkIt ett development kit. Hjärtfrekvensen bestäms med hjälp av photoplethysmograph (PPG) signal från motivets fingertoppen. Puls informationen överförs regelbun...

Hemgjorda pulsmätare

Vi har utformat detta pulsmätare med flera specifikationer i åtanke. Först ville vi ha en mobil pulsmätare som kan spela in och lagra pulsnivå i 24 timmar. För det andra ville vi pulsmätaren för att kunna plocka upp pulsen under normal rörelse och nä...

DIY pulsmätare med TCRT5000L och LM358

göra din egen pulsmätare med enkla komponenter. Scheman finns (se kommentar). Njut!...

Hur man analyserar pulsmätare data

jag har använt en pulsmätare (HRM) i år. Jag gillar det eftersom det ger mig ett objektivt mått på hur hårt jag har arbetat. Jag har läst de häften som medföljer i förpackningen när du köper din HRM. Detta är den "Zon" system som används för att...

Intellekten Edison: pulsmätare

Detta är hur man gör en enkel DIY pulsmätare med Intel Edison.Den huvudsakliga bygget själv är ganska enkel. Du behöver en liten slang. LDR-motstånd och en led.Koden måste å andra sidan en hel del kalibrera.Jag använde min typiska puls på baslinjen w...

Arduino geigermätare

bygga en geigermätare ur en ArduinoSteg 1: Vad du behöver What you'll need:-Arduino (kan vara någon typ men måste ha 5V kapacitet att arbeta med geigermätare och LCD)-Sparkfun geigermätare (andra geigermätare styrelser kan fungera samma men jag vet i...

Webbaktiverade Polar pulsmätare

Använd en Polar pulssensor, en billig hårdvara ombord ansluten via USB och en liten bit av programvara för att sätta din puls på webben. Realtidsdata är serveras direkt från din dator och göras tillgängliga via Yaler reläet (disclosure: Jag är en av...

Arduino temperaturmätare

Detta projekt är lämplig för att upprätthålla en mätare på den omgivande temperaturen i ett rum. Detta är version en av detta projekt. Senare versioner avsikt att ha en LCD-display och temperatur kalibrering vid installationen.Steg 1: Steg 1: du behö...

Talar Arduino Halloween skelett

Välkommen till en annan av min instructables!Så Halloween är över oss igen och jag ville verkligen att använda Arduino jag hade. Jag gick till halloween store och hittade en skalle med en ledad skalle och det var den gnista som började detta projekt....

Arduino schacket tar tid

Det finns olika priser för play i användning. Följande visar de olika alternativen:Blitz har typiska tidsfrister för 5 minuter för varje spelare för alla rörelser.Snabbspel spelas med typiska tidsfrister 30 minuter för varje spelare för alla flyttar....

Talar Arduino klockan

Detta projekt använder Arduino MEGA och en MP3-spelare (Adafruit) att inte bara hålla reda på tiden, men har också regelbundna 15 minuters klockspel och ange tidpunkten när det behövs.För att hålla det enkelt, jag köpte de flesta objekt från en butik...

Hur man gör en styrfäste för en Garmin eller andra pulsmätare

material:EltejpSkrot tunn träbitPlast tape "Bärande"skrot av tunn gummi matta/duk1) först skära plast bandet med hälften, är detta vad kommer att öka diametern på styret så titta del av pulsmätaren passar runt den mindre diameter slangen.2) fäst...

Trådlös pulsmätare

Detta instructable är att ge en tutorial för att integreringen av en puls Sensor Amped, en Arduino Uno och nrf240L01 + transceiver moduler för att bilda en trådlös överföring från komponenter som kan enkelt köpas "från hyllan".Steg 1: Få puls se...

Pulsmätare med ett fotomotstånd

Detta projekt använder en NI myRIO, ett fotomotstånd och naturlig belysning för att avgöra din puls. När en knapp trycks på myRIO, läses spänningen från fotomotstånd i 10 sekunder. Slag per minut är sedan visas på en LCD-display med Pmod adaptern för...