Anda di halaman 1dari 2

unsigned long int intervaloAmostragem = 2000; // Intervalo de Amostragem (em

Microsegundos)
unsigned long int tempo=0;
int amostraR; //declaracao da vari�vel do LED vermelho do ADC, em bits
int amostraIR; //declaracao da vari�vel do LED infravermelho do ADC, em bits
float amostraRvolts[1000]; //array com os valores do LED vermelho, em volts
float amostraIRvolts[1000]; //array com os valores do LED infravermelho, em volts
float maxR, maxIR, minR, minIR, medR, medIR; //declaracao das variaveis dos valores
m�ximos, minimos e m�dios nos comprimentos de onda correspondentes a luz vermelha,
660 nm, e a luz infravermelha, 940 nm;
float valorAtual; //declaracao da variavel para percorrer os arrays
float R; //declaracao da vari�vel do valor R, correspondente ao ratio-to-ratio
float ganho = 20.74; //declaracao da variavel correspondente ao ganho do filtro
passa-baixo da montagem implementada
float IACR, IACIR; //variaveis das componentes AC para o LED vermelho e
infravermelho
float atenuacaoHbR = 0.81; //coeficiente de atenua��o do comprimento de onda de 660
nm para a hemoglobina desoxigenada
float atenuacaoHbO2R = 0.08; //coeficiente de atenua��o do comprimento de onda de
660 nm para a hemoglobina oxigenada
float atenuacaoHbIR= 0.18;//coeficiente de atenua��o do comprimento de onda de 940
nm para a hemoglobina desoxigenada
float atenuacaoHbO2IR = 0.29; //coeficiente de atenua��o do comprimento de onda de
940 nm para a hemoglobina oxigenada
float SaO2; //declaracao da vari�vel correspondente ao valor da satura��o de
oxig�nio no sangue arterial

// este c�digo � executado apenas uma vez


void setup() {
Serial.begin(230400); // Define a velocidade de comunica��o com o PC.
pinMode(13,OUTPUT); // Pino do LED vermelho
pinMode(12,OUTPUT); // Pino do LED infravermelho
}

// o c�digo que se segue � executado em loop


void loop() {

// O c�digo seguinte realiza amostragem com um intervalo de tempo definido.


// a fun��o micros() devolve o instante actual em microsegundos
// se j� decorreu tempo suficiente desde a �ltima amostra ent�o realiza nova
amostragem e envia o resultado para o PC.
digitalWrite(13,HIGH); //acende o LED vermelho
digitalWrite(12,LOW); //apaga o LED infravermelho
for (int i=0; i<1000; i++){ //para colocar os valores dentro dos array das
amostras para o LED vermelho
amostraR=analogRead(A0); // L� o pino anal�gico A0
amostraR=(5*amostraR/1023.0)-2.5; //converte os valores vindos do ADC para
valores de tens�o
amostraRvolts [i] = amostraR; //coloca os valores no array
}
digitalWrite(13,LOW); //apaga o LED vermelho
digitalWrite(12,HIGH); //acende o LED infravermelho
for (int i=0; i<1000; i++){ //para colocar os valores dentro dos array das
amostras para o LED infravermelho
amostraIR=analogRead(A0); // L� o pino anal�gico A0
amostraIR=(5*amostraIR/1023.0)-2.5; //converte os valores vindos do ADC em
valores de tens�o
amostraIRvolts [i] = amostraIR; //coloca os valores no array
}
for (int i=0; i<1000; i++){ //para os valores m�ximo, m�nimo e m�dio obtidos pelo
LED vermelho
valorAtual = amostraRvolts[i];
if(valorAtual > maxR){ //obtencao do valor m�ximo
maxR = valorAtual;
}
if(valorAtual < minR){ //obtencao do valor m�nimo
minR = valorAtual;
}
medR = medR + valorAtual; //soma todos os valores do array e guarda na vari�vel
medR
}
medR = medR/1000; //obtencao do valor m�dio

for (int i=0; i<1000; i++){ //para os valores m�ximo, m�nimo e m�dio obtidos pelo
LED infravermelho
valorAtual = amostraIRvolts[i];
if(valorAtual > maxR){ //obtencao do valor m�ximo
maxIR = valorAtual;
}
if(valorAtual < minIR){ //obtencao do valor m�nimo
minIR = valorAtual;
}
medIR = medIR + valorAtual; //soma todos os valores do array e guarda na
vari�vel medIR
}
medIR = medIR/1000; //obtencao do valor m�dio
IACR =(maxR-minR)/ganho; //c�lculo da componente AC para o LED vermelho
IACIR =(maxIR-minIR)/ganho;//c�lculo da componente AC para o LED infravermelho
R=(IACR/medR)/(IACIR/medIR); //c�lculo do fator R
SaO2=(((atenuacaoHbR-(atenuacaoHbIR*R))/(atenuacaoHbR-atenuacaoHbO2R+
((atenuacaoHbO2IR-atenuacaoHbIR)*R))))*100; //c�lculo da satura��o de oxigenio no
sangue arterial
Serial.println (SaO2); //imprime o valor da satura�ao de oxig�nio arterial
}

Anda mungkin juga menyukai