Está en la página 1de 3

MEDIDOR DE FRECUENCIA RESPIRATORIA CON DSPIC4013

1. INTRODUCCION.
El ciclo respiratorio comprende una fase de inspiración y otra de espiración. La frecuencia
respiratoria (FR) es el número de veces que una persona respira por minuto. Suele medirse
cuando la persona está en reposo (y sin tener conciencia de estar haciéndolo) y consiste en
contar el número de respiraciones durante un minuto visualizando las veces que se eleva el
tórax. La FR puede aumentar con la fiebre y otras condiciones médicas. Cuando se miden
las respiraciones, es importante tener en cuenta también si la persona tiene dificultad para
respirar. 1, 35 La FR normal de un adulto que esté en reposo oscila entre 15 y 20 ciclos por
minuto. Cuando la FR en reposo es mayor de 25 respiraciones por minuto o es menor de
12, podría considerarse anormal.
Según lo anteriormente citado, tener en cuenta la frecuencia respiratoria de un paciente
nos puede servir como indicador importante de su estado de salud y poder actuar de
acuerdo a lo observado. Es por ello que nos hemos propuesto realizar un prototipo de este
medidor con el dsPIC30F4013 y un NTC.

2. FUNDAMENTO TEORICO.
Para nuestro experimento nos apoyaremos del siguiente circuito divisor de voltaje. Donde
VT será la entrada de nuestro microcontrolador.

R
VCC 10k

5V VT

10K RT

GND

Aplicando la leyes de tensiones de Kirchoff, se tiene:


RT R
VT  VCC  RT 
RT  R VCC
1
VT ……. (1).
Ahora recordemos que la resistencia del termistor tiene el siguiente comportamiento.
1 1 
  
 T T0 
RT  R0 e ……. (2)
Donde:
R0 : Es la resistencia del termistor a temperatura ambiente.
 : Parámetro característico del termistor.
T0 : Temperatura ambiente.

De las ecuaciones (1) y (2) se tiene.


1 1
  
RVT
 e  T T0 
R0  VCC  VT 
1 1   RVT 
     ln  
 T T0   R0  VCC  VT  

T
 RVT  
ln  
 R0  VCC  VT   T0

LCD1
LM016L

U1
1 4
MCLR RB0/CN4/RP0/AN2/EMUD1/PGD1
20 5
VDDCORE RB1/CN5/RP1/AN3/EMUC1/PGC1
6
RB2/CN6/RP2/AN4

VDD
VSS

VEE
7

RW
RS

D0
D1
D2
D3
D4
D5
D6
D7
RB3/CN7/RP3/AN5

E
R1 RB4/CN1/RP4/SOSCI/EMUD3/PGD3
11
10k 14
RB5/CN27/RP5/ASDA1

1
2
3

4
5
6

7
8
9
10
11
12
13
14
28 15
AVDD RB6/CN24/RP6/ASCL1
27 16
AVSS RB7/CN23/RP7/INT0
17
RB8/CN22/RP8/SCL1/PWM2H1/TCK
18
RB9/CN21/RP9/SDA1/PWM2L1/TDO
21
RB10/CN16/RP10/PWM1H3/TDI
2 22
RA0/CN2/VREF+/AN0/EMUD2/PGD2RB11/CN15/RP11/PWM1L3/TMS
3 23
RA1/CN3/VREF-/AN1/EMUC2/PGC2 RB12/CN14/RP12/PWM1H2
9 24
RT1 RA2/CN30/CLKI/OSCI RB13/CN13/RP13/PWM1L2
10 25
RA3/CN29/CLKO/OSCO RB14/CN12/RP14/PWM1H1
X1 12
RA4/CN0/T1CK/SOSCO/EMUC3/PGC3 RB15/CN11/RP15/PWM1L1
26
28.00
1 2 DSPIC33FJ12MC202

50%
-tc
CRYSTAL
10k
1k

//simulación en proteus.
#include "config.h"
#include "reloj.h"
#include <libpic30.h>
#include "xlcd.h"
#include <stdio.h>
#include <math.h>
// libreria para calculos matematicos
char adc_vector[4] = "";
int adc_result = 0;
float vm = 0;
float tempK = 0;
float tempC = 0;
float adc_float = 0;
float rAux = 10000;
float vcc = 5;
float beta = 3977;
float temp0 = 298.0;
float a=0,suma=0;
void ADC_Init(void);
void ADC_Init(void){// inicializa el adc del dspic
AD1CON2bits.VCFG = 0b000; //AVss y AVdd como umbrales de referencia
AD1PCFGLbits.PCFG0 = 0; //AN0 como entrada anal\?ogica (Se\~nal del sensor)
AD1CHS0bits.CH0SA = 0b0000; //Canal anal\?ogico AN0
AD1CHS0bits.CH0NA = 1; //Toma Vref- como negativo AN1
AD1CON3bits.ADCS = 0b01011; //ADCS = 11
AD1CON1bits.ASAM = 0; //Muestreo manual
AD1CON1bits.SSRC = 0b000;//Limpiar el bit SAMP termina el sampleo
// e inicia la conversion
AD1CON1bits.ADON = 1; //Habilitar el ADC
}
int main(){
XLCDInit(); //Inicia la pantalla LCD
ADC_Init(); //Inicia el ADC
WriteCmdXLCD(CLEAR_XLCD); //Limpia la pantalla LCD al reinicio
XLCDgotoXY(0,0);
putrsXLCD("PROYECTO FINAL");
XLCDgotoXY(1,0);
putrsXLCD("T(C): ");
XLCDgotoXY(1,6);
while(1){
AD1CON1bits.SAMP = 1; //Inicio del muestreo
__delay_ms(500); //Tiempo de muestreo
AD1CON1bits.SAMP = 0; //Finalizar muestreo
while(!AD1CON1bits.DONE);
AD1CON1bits.DONE = 0;
adc_result = ADCBUF0;
vm = (float)adc_result*5/1024;// voltaje a medir
a=vm/(5-vm);
a=a-1;
suma=a-pow(a,2)/2+a*pow(a,2)/3;
tempK = beta/(suma+(beta/temp0)); //fórmula para calcular
// la temperatura en kelvin
tempC = (tempK - 273.15)-0.3;//fórmula para calcular temperatura en c
__delay_ms(10);// este es el tiempo de muestro del termistor
sprintf(adc_vector,"%.2f",tempC);
printf("%.2f\n",tempC );//nos imprime el valor censado en el lcd
XLCDgotoXY(1,8);
putrsXLCD(adc_vector);
XLCDgotoXY(1,13);
putrsXLCD("C");
}
return 0;
}

También podría gustarte