Table of Contents

Pulse Meter

Email: dianacretu2806@gmail.com

Introducere

Monitorizarea pulsului este una din investigatiile fundamentale in descoperirea unei afectiuni cardiace. Cresterea anormala a valorii pulsului peste o anumita valoare poate fi semnul unei fibrilatii atriale, depistarea acesteia fiind vitala, deoarece duce, inevitabil, la aparitia unor probleme ce pun în pericol viata. Astfel, proiectul consta in implementarea unui aparat ce masoara pulsul unei persoane. La depistarea unei valori anormale este programat sa porneasca un sunet de atentionare.

Descriere generală

In implementarea proiectului voi folosi un senzor XD-58C ce masoara pulsul cand intra in contact cu incheietura mainii. Atunci cand valoarea pulsului depaseste 220 minus varsta persoanei, ceea ce reprezinta valoarea maxima a pulsului pentru o persoana, voi folosi un buzzer pentru a produce un sunet de atentionare.

Schema bloc:

Hardware Design

Lista de piese & materiale:

Software Design

1. Mediu de dezvoltare

Pentru realizarea proiectului am folosit mai multe resurse software:

  1. Eagle 9.4.0 → schema electrică
  2. Sublime → editor text pentru scrierea codului
  3. HID Boot Flash → Bootloader 2019

2. Biblioteci

Am folosit urmatoarele biblioteci in cod:

#include <avr/io.h>
#include <util/delay.h>
#include <stdlib.h>
#include <avr/interrupt.h>

#include "usart.h"
#include "lcd.h"

3. Cod Sursa

In main au loc initializarile si o bucla infinita ce printeaza valoarea pulsului in momentul in care este detectat.

Senzorul de puls pe care il folosesc este un photoplethysmograph, cunoscut mai bine ca un dispozitiv medical folosit pentru a monitoriza pulsul neinvaziv. Senzorul de puls raspunde la schimbarile de intensitate luminoasa. Daca lumina ramane constanta, vloarea semnalului va fi 512. Daca va fi mai multa lumina, semnalul va creste.

Pentru conversia datelor am setat TIMER2 pentru a se declansa la 2ms si sa citeasca o valoare de la ADC, care va fi trimisa prin USART, catre calculator. Activez intreruperile globale.

void interruptSetup() {

  TCCR2A = 0x02;
  TCCR2B = 0x06;
  OCR2A = 0X7C;
  TIMSK2 = 0x02;
  sei();            

}

In rutina intreurperii, se calculeaza numarul de batai pe minut (BPM) ce este afisat ulterior si pe LCD. Prima bataie simtitia de senzor nu este luata in considerare din cauza zgomotului, de aceea ne folosim de variabilele firstBeat setata pe true initial si secondBeat setata pe false. Abia de la a doua bataie a inimii simtita, putem calcula pulsul.

Pentru a calcula pulsul (BPM) ne folosim de ultimele zece valori ale IBI (Inter Beat Interval) pentru a obtine un rezultat cat mai aproape de adevar.

int runningTotal = 0; for(int i = 0; i < 9; i ++){

  rate[i] = rate[i + 1]; 
  runningTotal += rate[i];      

} rate[9] = IBI; runningTotal += rate[9]; runningTotal /= 10; BPM = 60000/runningTotal; QS = true;

In momentul in care BPM este peste 100 (am ales o valoare cu care pot testa daca buzzerul functioneaza), buzzerul va incepe sa sune pentru a anunta ca este o problema.

if (BPM > 100) {

 PORTB &= ~(1 << PB7);

} else {

 PORTB |= (1 << PB7);

}

Rezultate obtinute

1. Perspectivă de ansamblu asupra proiectului

Realizarea unui proiect in care a trebuit personal sa fac si software-ul si hardware-ul mi s-a parut dificila, insa in acelasi timp si interesanta.

2. How to

Se plaseaza degetul pe senzor si asteapta cateva secunde pentru a se calibra, Astfel, valoarea pulsului va aparea pe LCD, iar in cazul in care este peste o anumita valoare, va scoate un sunet buzzerul.

Concluzii

Frumusetea din interior conteaza:

Jurnal

Bibliografie/Resurse

http://cs.curs.pub.ro/wiki/pm/prj2011/rtataroiu/pulse_meter

https://pulsesensor.com/pages/pulse-sensor-amped-arduino-v1dot1

pulse_meter_pm_wiki_.pdf

http://cs.curs.pub.ro/wiki/pm/lab/lab6

http://cs.curs.pub.ro/wiki/pm/lab/lab1

diana_cretu_336ca.zip