Professional Documents
Culture Documents
So Carlos
Novembro de 2014
So Carlos
Novembro de 2014
Agradecimentos
Os meus primeiros agradecimentos so carinhosa e merecidamente dedicados aos meus pais,
Mrcia Yoshiko Hoshika Kushima e Mrio Kushima, pela dedicao, compreenso e respeito em todos
os anos da minha vida.
Ao meu orientador Evandro Rodrigues, que aceitou a minha proposta para este trabalho e que
sempre esteve sugerindo novas ideias a serem desenvolvidas. Agradeo tambm minha primeira
orientadora Liliane Ventura, que me ajudou a desenvolver meus conhecimentos e me apoiou em todos
os momentos.
Aos meus amigos Marcio Makiyama, Tales Santini, Lucas Freitas, Teruo Nakamine, Paula
Fujioka, Tamie Sassaki, Danilo Schwab e Leila Bravo, que no pouparam esforos para me ajudar no
desenvolvimento deste trabalho.
Ao grupo Yanagi Taiko que me acolheu desde o primeiro dia em que estive em So Carlos.
Agradeo a experincia, o conhecimento e a amizade compartilhados com Snia Kaibara, Bruno
Watanabe, Guilherme Kawamata, Alexandre Romo e Luana Oiko.
Aos colegas de classe junto dos quais enfrentei inmeros desafios durante estes anos de
graduao. Obrigado Bruno Callegaro, Tiago Martins, Joo Tardelli, Artur Duarte, Lucas Pacheco e
Tiago Perez.
E tambm agradeo aqui aos amigos que estiveram comigo durante todos os momentos alegres,
tristes e engraados que vivenciei em So Carlos.
ii
Resumo
O monitoramento da saturao de oxignio pela hemoglobina, um dos principais sinais vitais,
essencial na rotina hospitalar. Tecnologias para monitorar a oximetria de forma no invasiva, rpida e
precisa, devem ser desenvolvidas para otimizar a rotina hospitalar e levar mais qualidade de vida aos
pacientes. A oximetria de pulso (absoro pelo sangue de dois comprimentos de onda diferentes) permite
a deteco da saturao de oxignio. Este projeto envolveu o desenvolvimento de um circuito analgico
de aquisio e condicionamento dos sinais de oximetria, controlado por um Arduino Uno, responsvel
por enviar os sinais amostrados Raspberry Pi, via Bluetooth. Estes sinais foram processados pelo
microcomputador para calcular a taxa de saturao de oxignio no sangue e a frequncia cardaca, os
quais foram armazenados em um banco de dados. A Raspberry Pi disponibilizou uma aplicao web
onde foi possvel visualizar o resultado da oximetria e iniciar a realizao de uma nova medio. Ao
final do projeto, conseguiu-se a integrao de todos os mdulos, desde o envio do comando para realizar
uma nova oximetria, a partir da aplicao web, at a visualizao dos dados e resultados da oximetria
na aplicao. O projeto possui as mesmas limitaes de um oxmetro comercial e o tempo de
processamento lento se comparado com outros oxmetros. Contudo, a realizao da oximetria por meio
da interface web permite um acesso remoto que nenhum outro oxmetro atual realiza.
Palavras-chave: Oxmetro, Arduino Uno, Raspberry Pi, Bluetooth, Web.
iii
iv
Abstract
The monitoring of oxygen saturation by hemoglobin, one of the main vital signs, is essential in
hospital routine. Noninvasive, fast and accurate technologies that allow the monitoring of oximetry must
be developed in order to improve hospital routine and bring more quality of life to patients. Pulse
oximetry (blood absorption by two different wavelengths) allows for the detection of oxygen saturation.
This project involved the development of an analog circuit of acquisition and conditioning of the
oximetry signs controlled by an Arduino Uno, responsible for sending the sampled signs to the
Raspberry Pi via Bluetooth. These signs were then processed by a microcomputer in order to determine
the exact oxygen saturation rate in the blood and the heart frequency. The data is then stored in a
database. Raspberry Pi offers a web application where the oximetry results can be verified and a new
measurement can be initialized. In the end of the project all modules were integrated (from the sending
of the command for a new oximetry measurement to be made in the web application until the
visualization of the data and results of the oximetry application). The project has the same limitations
as a conventional commercial oximeter and the processing time is slow when compared to other
oximeters. However, it allows for the remote execution of the oximetry through the web interface, a
characteristic not found in any other oximeter currently available.
Keywords: Oximeter, Arduino Uno, Raspberry Pi, Bluetooth, Web.
vi
Lista de Figuras
Figura 1 - Representao da hematose nos alvolos pulmonares............................................................ 1
Figura 2 - Representao do sistema circulatrio nos seres humanos..................................................... 2
Figura 3 - Sensor tico para oximetria .................................................................................................... 3
Figura 4 - Tipos de oxmetros existentes ................................................................................................ 3
Figura 5 - Wireless Pulse Oximeter ........................................................................................................ 4
Figura 6 - Curva de dissociao da oxiemoglobina. ............................................................................... 7
Figura 7 - Alterao da curva de dissociao da oxiemoglobina. ........................................................... 8
Figura 8 - Disposio dos LEDs e do sensor de oximetria de pulso. ...................................................... 8
Figura 9 - Diferena da absoro da luz infravermelha e vermelha para a oxiemoglobina e a sua forma
desoxigenada. .......................................................................................................................................... 9
Figura 10 - Absoro para diferentes componentes que a atenuam a transmisso da luz que atravessa o
paciente. .................................................................................................................................................. 9
Figura 11 - Princpio de Beer-Lambert. ................................................................................................ 10
Figura 12 - Alterao da luz transmitida em funo da variao do caminho ptico durante o ciclo
cardaco. ................................................................................................................................................ 12
Figura 13 - Sinais sem e com normalizao para diferentes comprimentos de ondas .......................... 13
Figura 14 - Curva terica e de calibrao emprica da saturao de oxignio pela razo R ................. 14
Figura 15 - Variao dos coeficientes de extino para diferentes tipos de hemoglobinas .................. 15
Figura 16 - Diagrama em blocos do projeto .......................................................................................... 20
Figura 17 - Sensor tico ........................................................................................................................ 21
Figura 18 - Curva de resposta do fotodiodo. ......................................................................................... 21
Figura 19 - Arduino Uno ....................................................................................................................... 22
Figura 20 - IDE do Arduino .................................................................................................................. 23
Figura 21 - Mdulo Bluetooth HC-05 ................................................................................................... 23
Figura 22 - Ligao entre o Arduino Uno e o Bluetooth HC-05 ........................................................... 24
Figura 23 - Raspverry Pi ....................................................................................................................... 25
Figura 24 - Bluetooth USB - ES388 ...................................................................................................... 26
Figura 25 - Circuito de alimentao ...................................................................................................... 27
Figura 26 - Circuito esquemtico de controle dos LEDs ...................................................................... 28
Figura 27 - Amplificador de Transimpedncia ..................................................................................... 29
Figura 28 - Filtro ativo passa-baixa com topologia Sallen-Key ............................................................ 30
Figura 29 - Filtro passivo passa alta ...................................................................................................... 31
Figura 30 - Amplificador de ganho no inversor .................................................................................. 31
Figura 31 - Regulador de offset............................................................................................................. 32
Figura 32 - Amplificador inversor unitrio ........................................................................................... 32
Figura 33 - Diagrama em blocos da programao no Arduino ............................................................. 33
Figura 34 - Janela de configurao da Raspberry Pi ............................................................................. 35
Figura 35 - Software de comunicao SSH (Putty) .............................................................................. 36
Figura 36 - Interface grfica para gerenciamento do banco de dados sqlite3 ....................................... 37
Figura 37 - Diagrama em blocos da programao em Python na Raspberry Pi .................................... 38
Figura 38 - Diagrama em blocos da aplicao web............................................................................... 42
Figura 39 - Sinais de entrada e sada do filtro passa baixa para uma frequncia de 5 Hz ..................... 44
Figura 40 - Comparao entre os dados tericos e experimentais para o filtro passa baixa ................. 44
Figura 41 - Sinais de entrada e sada do filtro passa alta para uma frequncia de 0,07 Hz ................... 45
Figura 42 - Comparao entre os dados tericos e experimentais para o filtro passa alta .................... 46
Figura 43 - Sada do amplificador de transimpedncia ......................................................................... 47
Figura 44 - Sada do filtro passa baixa .................................................................................................. 47
vii
viii
Lista de Tabelas
Tabela 1 - Tempo de sobrevivncia de alguns rgos em situao de hipxia ....................................... 1
Tabela 2 - Lgica de Controle dos LEDs .............................................................................................. 28
Tabela 3 - Dados experimentais do filtro passa baixa ........................................................................... 43
Tabela 4 - Dados experimentais do filtro passa alta .............................................................................. 45
Tabela 5 - Resultados da transmisso Bluetooth ................................................................................... 51
Tabela 6 - Resultados da oximetria e da pulsao cardaca para os testes ............................................ 59
Tabela 7 - Resultados da oximetria e da pulsao cardaca quando h esmaltes na unha ..................... 62
ix
xii
Sumrio
1.
2.
3.
Introduo ...................................................................................................................................... 1
1.1.
1.2.
1.3.
Objetivos ................................................................................................................................ 4
1.4.
A Oximetria ........................................................................................................................... 7
2.2.
2.3.
2.4.
2.5.
2.6.
2.7.
3.1.1.
3.1.2.
3.1.3.
3.1.4.
Bluetooth....................................................................................................................... 23
3.1.5.
3.2.
4.
Mtodos ................................................................................................................................ 26
3.2.1.
Circuito Analgico....................................................................................................... 26
3.2.2.
3.2.3.
5.
Materiais .............................................................................................................................. 21
4.1.1.
4.1.2.
4.2.
4.3.
4.4.
4.5.
Concluso ..................................................................................................................................... 65
Apndices ............................................................................................................................................. 69
Apndice A Cdigo do Arduino .................................................................................................. 69
Apndice B Programao em Python ......................................................................................... 71
Apndice C Validao da transmisso Bluetooth (Arduino).................................................... 73
Apndice D Validao da transmisso Bluetooth (Raspberry Pi) ........................................... 74
Apndice E Programao web index.js.................................................................................... 74
Apndice F Programao web oximeter.js .............................................................................. 76
Apndice G Programao web index.jade............................................................................... 76
Apndice H Programao web oximeter.jade .......................................................................... 76
Apndice I Programao web executingOximeterPy.jade ..................................................... 78
Apndice J Programao web layout.jade .............................................................................. 78
Apndice K Programao web layout2.jade ........................................................................... 78
Anexo .................................................................................................................................................... 79
Anexo A Configurao do HC-05 ............................................................................................... 79
Anexo B Instalao dos drivers do Bluetooth na Raspberry Pi ............................................... 79
Anexo C Instalao do Node.js.................................................................................................... 80
Anexo D Instalao do Express ................................................................................................... 80
xiv
1. Introduo
1.1.
prolongada de oxignio pode ocasionar a morte destas clulas. O processo de oxigenao inicia-se
quando o ar inspirado chega aos pulmes e, ento, nos alvolos, ocorre a hematose (Figura 1), ou seja,
a troca do gs carbnico (CO2) presente no sangue venoso pelo gs oxignio (O2) contido no ar inspirado
(WEBSTER, 1997).
Para enfatizar a importncia da oxigenao dos tecidos, na Tabela 1, observou-se o tempo que
um rgo consegue manter sua funo em situao de hipxia (baixa oxigenao nos tecidos).
Tabela 1 - Tempo de sobrevivncia de alguns rgos em situao de hipxia
rgo
Crtex Cerebral
Corao
Rim e Fgado
Msculos Esquelticos
Fonte: WEBSTER, 1997
Os sinais recebidos pelo fotodiodo precisam ser condicionados de forma que possam ser
analisados por microprocessadores, os quais realizam clculos para obterem a taxa de saturao e
frequncia cardaca. Estes resultados so, enfim, mostrados ao usurio em um visor ou monitor.
Atualmente, todo este sistema de oximetria pode ser tambm encontrado em equipamentos
portteis, alm de maior porte, geralmente utilizados em hospitais ou centros de sade, ambos com boa
qualidade de medio e fcil visualizao dos resultados. Na Figura 4, podem ser vistos exemplos de
oxmetros existentes.
Um modelo de oxmetro, que difere dos anteriores, o Wireless Pulse Oximeter (Figura 5) da
empresa iHealth, o qual composto por um oxmetro atual e por um aplicativo que pode ser executado
no sistema operacional iOS. Os dados de oximetria e pulsao cardaca podem ser enviados via
Bluetooth ao dispositivo que esteja executando o aplicativo. Estes dados podem ser visualizados no
dispositivo e armazenados em um banco de dados remoto.
1.2.
Justificativa do trabalho
A medio da saturao de oxignio no sangue e da frequncia cardaca, a partir do mtodo de
1.3.
Objetivos
O principal objetivo deste trabalho foi projetar e implementar um sistema de medio da
oxigenao arterial e da pulsao cardaca, com interface via web, baseado no mtodo da oximetria de
pulso. Para obter tal objetivo foi necessrio:
4
1.4.
Organizao do trabalho
O trabalho elaborado foi dividido em cinco captulos. O primeiro contm a descrio, o objetivo
2. Fundamentao Terica
2.1.
A Oximetria
O processo de oxigenao ocorre devido ao transporte de gs oxignio, O2, pelas molculas de
hemoglobina encontradas nas clulas do sangue denominadas hemcias ou eritrcitos. Este transporte
s possvel devido capacidade da hemoglobina de ligar-se a uma molcula de oxignio de forma
reversvel, assim resultando na oxiemoglobina, HbO2. As hemoglobinas que no esto carregando
molculas de oxignio so denominadas hemoglobinas reduzidas, Hb. Conforme o nmero de molculas
de oxignio ligadas hemoglobina (que varia de um a quatro), diz-se que ela est mais ou menos
saturada. A afinidade desta ligao eleva-se proporcionalmente ao aumento da quantidade existente de
molculas de hemoglobina oxigenadas (HAEBISCH, 1980), permitindo que o sangue arterial mantenha
um nvel de oxigenao constante e possibilite que o organismo sobreviva em regies de baixa presso
de oxignio, tais como em locais de grande altitude.
O ndice que mede a oxigenao arterial denominado saturao arterial de oxignio, SaO2,
expresso em porcentagem e determinado pela concentrao de oxiemoglobina sobre esta somada
concentrao de hemoglobinas reduzidas, como na equao (1).
SaO2 =
CHbO2
CHbO2 + CHb
(1)
2.2.
respectivamente, ao espectro de luz vermelho e infravermelho. Estes LEDs emitem luz que atravessa
uma parte translcida do corpo do paciente (as pontas dos dedos ou a orelha). Parte desta luz espalhada
e/ou absorvida quando atravessa o paciente, enquanto a radiao que o atravessa completamente
medida por um sensor de luz (fotodiodo), posicionado no lado oposto do corpo do paciente. Na Figura
8, possvel observar a disposio dos componentes citados anteriormente.
a vermelha, enquanto que a hemoglobina reduzida se comporta de modo oposto (Figura 9). Esta medio
depara-se com o problema: Como separar a quantidade de luz que absorvida pelo sangue arterial da
que absorvida pelos tecidos, ossos e sangue venoso.
Figura 9 - Diferena da absoro da luz infravermelha e vermelha para a oxiemoglobina e a sua forma
desoxigenada.
Fonte: (ANDRADE, 2010).
A parcela de luz absorvida devido aos tecidos no apresenta significantes mudanas em curtos
perodos de tempo, ao passo que a de absoro, referente ao sangue arterial, apresenta variaes devido
s alteraes na pulsao (embora exista um nvel constante de sangue arterial). Desse modo, como o
sangue arterial o nico componente da absoro que apresenta mudanas em curtos perodos de tempo,
esta pode ser isolada dos outros componentes e assim, utilizada para realizar a medio de saturao.
Na Figura 10, podem ser vistos os componentes da absoro da luz que atravessa o paciente.
Figura 10 - Absoro para diferentes componentes que a atenuam a transmisso da luz que atravessa o
paciente.
Fonte: Figura adaptada de (WEBSTER, 1997)
2.3.
Lei de Beer-Lambert
O princpio de Beer-Lambert (Figura 11), que relaciona a absoro de luz com as propriedades
do material, consiste em um feixe de luz incidente, Iincidente, com comprimento de onda , que atinge
um anteparo no totalmente opaco, resultando em um feixe transmitido, Itransmitido , que dependente
do comprimento do anteparo, l [cm], da constante de absoro deste para o comprimento de onda ,
() [L/mmol.cm], e da concentrao de partculas responsveis pela atenuao do sinal, C [mmol/L].
A equao (2) expressa a relao do princpio de Beer-Lambert.
= ()..
(2)
A transmitncia, T(), desse processo a relao entre a luz transmitida e a incidente, equao
(3); enquanto que a absorbncia, A(), o logaritmo natural negativo desta relao, equao (4).
T() =
Itransmitido
= e().C.l
Iincidente
2.4.
(3)
(4)
substncia que absorve a luz, quando atravessada. A absoro parcial de cada substncia contribui para
a absoro total da luz. Portanto, a representao matemtica desta absoro total pode ser obtida pela
superposio de cada absoro individual. Por exemplo, suponha uma mistura com n substncias
diferentes, ento a absoro total, At , pode ser obtida atravs da equao (5).
10
(5)
At (1 ) = 1 (1 ). C1 . L + 2 (1 ). C2 . L + + n (1 ). Cn . L
At (n ) = 1 (n ). C1 . L + 2 (n ). C2 . L + + n (n ). Cn . L
(6)
Esta abordagem no vivel para a determinao da oximetria de pulso deste projeto, visto que
os comprimentos pticos no so os mesmos para as diferentes substncias, as constantes de absoro
possuem uma variabilidade entre indivduos e, tambm, o sensor adquirido no permite uma anlise
simultnea da intensidade incidente da transmitida, atravs do dedo do paciente, de modo a determinar
a intensidade total absorvida. Outro fator limitante a necessidade de mais de dois comprimentos de
ondas diferentes, o que no possvel de se obter com o sensor disponvel (WEBSTER, 1997).
2.5.
Clculo do SpO2
O ndice SpO2 definido como a taxa de saturao pulstil de oxigenao, correspondente ao
SaO2, e sua sigla diferente devido ao mtodo pelo qual este ndice obtido. O mtodo para o clculo
do SpO2 baseado na pulsao cardaca, que acaba alterando o fluxo sanguneo responsvel pela
oxigenao do indivduo. Um ciclo cardaco composto pela sstole e pela distole. As artrias contm
mais sangue a sstole do que na distole. Dessa forma, a concentrao e o comprimento ptico das
hemoglobinas aumentam, consequentemente a intensidade luminosa dos feixes que atravessam diminui.
O processo inverso pode ser inferido durante a distole.
Na Figura 10, pode-se observar a variao da absoro e da transmisso do feixe luminoso,
devido ao ciclo cardaco. Nesta mesma figura, so indicados dois sinais, IH e IL, o primeiro
correspondendo intensidade mxima transmitida, enquanto que IL, intensidade mnima transmitida.
Estes dois sinais podem ser expressos conforme o sistema de equaes (7) (WEBSTER, 1997).
(7)
Onde,
IO a intensidade de luz incidente;
DC , CDC e dDC a constante de absoro, a concentrao e o comprimento ptico das componentes que
possuem absoro constante, com exceo do sangue arterial no pulstil;
Hb () e HbO2 () so as constantes de absoro da hemoglobina reduzida e da oxiemoglobina para
determinado comprimento de onda ;
CHb e CHbO2 so as concentraes de oxiemoglobina e hemoglobina reduzida;
dmin o comprimento ptico mnimo para a hemoglobina reduzida e a oxiemoglobina durante a distole;
dmax o comprimento ptico mximo para a hemoglobina reduzida e a oxiemoglobina durante a sstole.
Durante o ciclo cardaco, a intensidade transmitida I uma funo do dimetro d, da artria, que
pode variar de dmin a dmax , ou seja, d pode ser substitudo por dmin + d, onde d varia de 0 at dmax
- dmin . Sendo assim, I pode ser expresso como uma funo de IH e d.
(8)
Na Figura 12, pode-se observar a alterao da luz transmitida entre um valor IMIN a um IMAX
conforme altera-se a distncia x entre dmin a dmax .
Figura 12 - Alterao da luz transmitida em funo da variao do caminho ptico durante o ciclo
cardaco.
Fonte: Figura adaptada de (WEBSTER, 1997)
Antes de se iniciar o clculo do SpO2, deve-se normalizar os sinais de oximetria proveniente dos
LEDs, visto que estes no emitem luz com a mesma intensidade, havendo tambm a variao da
sensibilidade do sensor para diferentes comprimentos de onda. A normalizao realizada dividindo-se
12
o valor amostrado pelo valor mximo, equao (9), o que resulta em sinais com a mesma intensidade
durante a distole para os diferentes comprimentos de onda (este efeito melhor visualizado na Figura
13).
IN =
I
= e[Hb ().CHb +HbO2 ().CHbO2 ].d
IH
(9)
O clculo das absorbncias das luzes, sistema de equaes (10), equivalente ao total absorvido
devido ao componente AC do sinal.
(10)
A razo das absorbncias dos sinais j normalizados definida como um fator R (equao (11)).
R=
(11)
SpO2 =
Hb (V ) R Hb (IV )
R (HbO2 (IV ) Hb (IV )) + (Hb (V ) HbO2 (V ))
13
(12)
ln(, )
,
ln(, )
,
(13)
Este o modelo terico para se obter a saturao pulstil de oxignio, SpO2. No entanto, as
constantes de absoro, que variam para cada indivduo, a presena de hemoglobinas no funcionais e
o efeito de espalhamento da luz so fatores que no foram considerados para o modelo em questo
(WEBSTER, 1997). Usualmente, utiliza-se na prtica, uma curva de calibrao emprica (Figura 14)
que relaciona a razo R com o nvel de oxigenao.
Na literatura, h alguns polinmios que tentam obter uma curva emprica que se aproxime da
terica, dentre estes:
SpO2 =
1000 550. R
900 350. R
(14)
(15)
(16)
Fontes: Equao (14) (WEBSTER, 1997). Equao (15) (BRONZINO, 1999). Equao (16)
(NGHIA, 2012)
14
2.6.
Hemoglobinas no funcionais
A principal fonte de erro que afeta a medio da saturao de oxignio advm da presena da
hemoglobina no-funcional (WEBSTER, 1997). Em alguns pacientes, h uma grande quantidade destas
hemoglobinas incapazes de transportar oxignio. A carboxiemoglobina (HbCO) e a metemoglobina
(METHb) so alguns tipos de hemoglobina no funcionais. Na Figura 15, pode-se perceber como estas
hemoglobinas no funcionais influenciam uma medio incorreta do SpO2, por possurem, em alguns
determinados comprimentos de onda, um coeficiente de extino superior ou muito prximo ao das
hemoglobinas funcionais (oxiemoglobinas e hemoglobina reduzida). Sendo assim, a medio da
saturao pulstil de oxignio deveria ser:
SpO2 =
CHbO2
CHb + CHbO2 + CHbCO + CMETHb + Coutras hemoglobinas no funcionais
(17)
Contudo, para que seja possvel essa medio, seriam necessrios outros feixes de luz com
comprimentos de ondas diferentes, que possibilitem distinguir a absoro de uma determinada
hemoglobina em relao as outras.
Quando a quantidade de hemoglobinas no funcionais muito baixa, as equaes possuem
grande correspondncia. Ao passo que, na presena de grande quantidade destes tipos de hemoglobina,
os resultados obtidos so divergentes em relao ao estado real do paciente (WEBSTER, 1997).
A poluio por monxido de carbono e o fumo excessivo so fatores que influenciam a formao
de hemoglobinas no funcionais.
16
Anemia
Um paciente com anemia possui uma baixa quantidade de clulas vermelhas, o que diminui,
consequentemente, a quantidade de hemoglobina no seu sangue. Um paciente anmico pode no possuir
hemoglobinas funcionais suficientes em seu sangue para oxigenar os tecidos. A pequena quantidade de
hemoglobinas funcionais pode estar completamente saturada, o que indica que o paciente possui uma
taxa normal de SpO2, mas, na realidade, no possui oxigenao suficiente em seus tecidos (WEBSTER,
1997).
Corantes
Em alguns procedimentos cirrgicos, especialmente em cardiologia e urologia, so injetados
corantes no sangue do paciente, com a finalidade de se mapear o fluxo sanguneo. Estes corantes
interferem na transmisso da luz que atravessa o sangue, provocando uma leitura incorreta da oximetria
(WEBSTER, 1997).
Hipotermia
Em casos de hipotermia, o corpo reduz a perda de calor pela pele, diminuindo a circulao
perifrica, o que afeta significantemente a medio da oxigenao perifrica. Tambm, devido ao frio,
o paciente pode apresentar tremores que atrapalham a aquisio de dados pelo sensor (WEBSTER,
1997).
2.7.
Movimentos do paciente
A movimentao voluntria ou involuntria do paciente, at mesmo oriunda do ato da fala afeta
a leitura do sinal, pois o movimento acaba gerando pequenas distores no sinal.
17
Esmaltes de unhas
A colorao dos esmaltes utilizados nas unhas pode interferir significantemente na anlise da
oximetria, pois pode absorver ou refletir a luz emitida pelos diodos.
18
3. Materiais e Mtodos
Neste captulo, so apresentados os materiais e os mtodos utilizados para a implementao do
projeto. Um esquema geral deste pode ser visto na Figura 16, onde cada bloco representa um mdulo
do projeto com suas respectivas funes, caractersticas e componentes.
O projeto foi composto primeiramente por um sensor de oximetria que inclui dois LEDs e um
fotodiodo conforme especificado nos dois primeiros captulos. Este sensor foi conectado a um circuito
analgico que condicionou o sinal de modo que pudesse ser convertido para um sinal digital pelo
microcontrolador Arduino Uno.
O Arduino Uno foi o responsvel por controlar a emisso dos LEDs e pela transmisso via
Bluetooth, sendo que algumas configuraes precisaram ser realizadas neste tipo de comunicao. Os
dados enviados, via Bluetooth, foram recebidos pelo microcomputador Raspberry Pi. A Raspberry Pi
foi configurada e alguns programas e drivers foram instalados. Neste microcomputador, foram
desenvolvidos dois programas: programao em Python e web. O programa em Python foi responsvel
por inicializar a comunicao Bluetooth, o processamento digital dos sinais e o armazenamento destes
em um banco de dados. A programao web, que envolveu um servidor Node.js, o framework Express,
plug-ins e suas configuraes, foi responsvel por gerar o site, que serviu como interface para o usurio
realizar a oximetria e visualizar o resultado.
O site gerado foi uma aplicao web, composta por uma pgina inicial do projeto, uma segunda
que permitiu a visualizao da oximetria e a obteno de uma nova medio e, por fim, uma responsvel
por executar o programa em Python.
A oximetria foi realizada a partir do momento em que o usurio, por meio da aplicao web,
requisitou uma nova medio, que o redirecionou a uma pgina que executou o programa em Python. O
referido programa iniciou a comunicao Bluetooth entre a Raspberry Pi e o Arduino Uno. Estabelecida
a comunicao, a Raspberry enviou um sinal para que o Arduino Uno comeasse controlar a emisso
dos LEDs do sensor, de modo que o sinal de sada do fotodiodo pudesse ser condicionado pelo circuito
analgico. O sinal atravessou todos os mdulos conforme explicado anteriormente at que os resultados
fossem armazenados no banco de dados. Por fim, a aplicao web redirecionou o usurio para a pgina
de visualizao da oximetria, para uma anlise dos resultados obtidos.
A constituio, as caractersticas ou as funes de cada mdulo do projeto so descritas
detalhadamente ao longo deste captulo.
19
3.1.
Materiais
3.1.1.
Sensor de oximetria
O sensor utilizado (Figura 17) composto por um adaptador de dedo, um cabo blindado e um
conector DB9. Este sensor possui dois LEDs emissores de luz nos comprimentos de onda de 660 nm e
895 nm, e um fotodiodo, que funciona como uma fonte de corrente com sada diretamente proporcional
intensidade da luz recebida.
O fotodiodo possui uma curva de sensibilidade (Figura 18) que varia conforme o comprimento
de onda, com sensibilidade para o infravermelho (895 nm) diferente para o vermelho (660 nm).
21
3.1.2.
resistores, capacitores, reguladores e inversor de tenso. Os transstores foram utilizados para chavear
uma ponte-H que controlou a emisso dos LEDs. Os amplificadores operacionais foram implementados
como filtros analgicos, amplificadores de transimpedncia, amplificadores no-inversores e isoladores.
O inversor de tenso foi utilizado para que, a partir de uma nica fonte de tenso, pudesse gerar uma
alimentao simtrica utilizada nos amplificadores operacionais que necessitam deste tipo de
alimentao. Os resistores e capacitores atuaram em conjunto com os demais componentes para
polarizar ou permitir a funo desejada para aquele circuito.
3.1.3.
Microcontrolador Arduino
Neste projeto, o microcontrolador teve a funo de controlar o circuito analgico, realizar a
aquisio dos sinais provenientes dos LEDs e enviar estes dados ao microcomputador, via comunicao
Bluetooth.
O microcontrolador escolhido foi o Arduino Uno (Figura 19), que um microcontrolador
baseado no ATmega328. Este microcontrolador possui como caractersticas principais:
Alimentao de 5V;
Conector USB (do ingls, Universal Serial Bus) utilizado para programao do
microprocessador, comunicao serial e alimentao. (ARDUINO, 2014, Arduino Uno).
O conector USB, j acoplado a placa, que permite uma rpida programao atravs da sua IDE
(do ingls, Integrated Developmnet Environment, que significa Ambiente Integrado de
Desenvolvimento). Esta IDE (Figura 20) pode ser encontrado em (ARDUINO, 2014,
Download the Arduino Software), onde o usurio deve escolher a IDE conforme o sistema
operacional em que est desenvolvendo a aplicao.
3.1.4.
Bluetooth
O mdulo Bluetooth utilizado para se conectar ao Arduino Uno foi o HC-05 (Figura 21), que
um mdulo desenvolvido para ser utilizado junto aos diversos Arduinos existentes, apesar de que nada
impede a utilizao deste por outros microcontroladores. Este mdulo Bluetooth teve como funo a
transmisso dos dados amostrados pelo Arduino Uno e processados pelo microcomputador.
A ligao entre o mdulo e o Arduino Uno deu-se seguindo rigorosamente o esquema mostrado
na Figura 22. Os pinos Tx e Rx do HC-05 foram ligados aos pinos 10 e 11 do Arduino, respectivamente.
Alm disso, o pino 9 somente foi ligado ao HC-05 quando se desejou entrar no modo de configurao
do mdulo por meio dos comandos AT. No Anexo A Configurao do HC-05 encontra-se uma
lista de comandos e um cdigo exemplo para a configurao do mdulo Bluetooth.
Apesar do tipo de comunicao entre o Arduino Uno e o mdulo HC-05 ser serial e os pinos
digitais 0 e 1 do Arduino j serem configurados para este tipo de comunicao, neste projeto, utilizaramse os pinos 10 e 11, porque durante o desenvolvimento foi preciso utilizar a comunicao serial via USB,
como forma de verificao e validao do cdigo desenvolvido no Arduino. Para utilizar estes pinos em
uma comunicao serial necessria uma biblioteca, denominada SoftwareSerial Library, que permita
a existncia de uma serial por software (ARDUINO, 2014, SoftwareSerial Library).
Para este projeto foram alteradas algumas configuraes deste mdulo, tais como: o nome do
mdulo, a senha de acesso para pareamento e a taxa de transmisso (Baud Rate) para 115.200 BPS (Bits
Por Segundo). Os dois primeiros parmetros de configuraes foram escolhidos apenas para aumentar
a segurana dos dados transmitidos. A taxa de transmisso escolhida foi a que possibilitasse a realizao
as amostragens dos dados pelo Arduino sem que houvesse erros ou impossibilidade de transmisso dos
dados, via Bluetooth.
A taxa de transmisso foi escolhida empiricamente durante o desenvolvimento, visto que outros
valores para esta taxa no permitiram a completa transmisso dos dados, devido ao estouro do buffer de
transmisso, ou no eram valores disponveis para o mdulo Bluetooth conectado ao microcomputador.
24
3.1.5.
Microcomputador Raspberry Pi
O microcomputador utilizado a Raspberry Pi modelo B (Figura 23), que um mini computador
do tamanho de um carto de crdito capaz de se conectar a um monitor via HDMI (do ingls, High
Definition Media Interface).
A Raspberry Pi foi um conceito desenvolvido por Eben Upton que queria um computador
minimalista, com baixo consumo, baixo custo e flexvel para incentivar, nos estudantes de Ensino Mdio
e Superior, o aprendizado da programao.
O projeto evoluiu e se tornou uma Fundao: Raspberry Foundation. O sucesso de vendas desse
computador foi imediato e hoje, alm do cunho educacional, tornou-se a plataforma de desenvolvimento
preferida de estudantes universitrios e projetistas experientes, sendo utilizada em diversas aplicaes
comerciais ou no, inclusive na aplicao desenvolvida nesse trabalho (RASPBERRY PI, 2014, About
Us).
Figura 23 - Raspverry Pi
Fonte: Raspberry Pi. Disponvel em < http://pt.wikipedia.org/wiki/Raspberry_Pi>. Acesso em: 01
nov 2014.
Outros: 8 GPIO, UART, IC, SPI com dois seletores de chip, +3,3 V, +5 V, terra; Potncia:
700 mA (3,5 W); Tamanho: 85,60 mm 53,98 mm (RASPBERRY PI, 2014, Raspberry Pi
Models And Revisions).
A Raspberry Pi foi utilizada neste projeto para o processamento dos dados e obteno dos
resultados da oximetria. Ela gerou uma pgina web, a qual serviu como interface para o usurio, a fim
de que ele pudesse controlar e visualizar o processo de oximetria. Outra caracterstica importante foi a
possibilidade de armazenamento dos dados em um banco que permitiu a elaborao de um histrico das
medies realizadas.
O mdulo Bluetooth utilizado, neste projeto, para se conectar Raspberry Pi foi o Bluetooth
USB - ES388 (Figura 24), o qual permitiu facilmente a conexo e uma boa fixao.
3.2.
Mtodos
3.2.1.
Circuito Analgico
O circuito analgico responsvel pelo controle dos LEDs, aquisio do sinal de sada do
fotodiodo e condicionamento do sinal para que este seja processado pelo microcontrolador.
Basicamente, este circuito analgico composto pelos blocos:
Circuito de alimentao;
Amplificador de transimpedncia
Regulador de offset;
Circuito de alimentao
Para eliminar possveis rudos e harmnicos da rede de alimentao, foi utilizada uma bateria
de 9V para alimentar o circuito analgico; o que permitiu tambm uma proteo ao usurio, visto que
no havia possibilidade de ele entrar em contato com alta tenso.
O circuito de alimentao tambm foi composto por um inversor de tenso, que permitiu a partir
de uma tenso positiva se obter uma negativa, cujo valor em mdulo o mesmo da bateria utilizada para
a alimentao. O inversor de tenso escolhido foi o CI (Circuito Integrado) TL7660 cuja faixa de
operao de 1,5 V a 10 V de entrada, convertidos em -1,5 V a -10 V na sada. Este CI possui uma
eficincia de 98% e requer apenas dois capacitores eletrolticos externos (TEXAS INSTRUMENTS,
2006, datasheet TL7660).
Por fim, utilizaram-se dois reguladores de tenso, um positivo e outro negativo, de modo que a
alimentao do circuito tornasse mais estvel, diminuindo possveis rudos que interfiram nos sinais. Os
CIs utilizados foram o KA7805 e L7905, reguladores de tenso positiva e negativa, respectivamente.
Estes CIs suportam correntes de sada de at 1 A e possuem proteo de curto circuito e de
sobreaquecimento (FAIRCHILD, 2001, datasheet KA78XX/KA78XXA) (ST, 2012, datasheet L79xxAC).
Na Figura 25, podem ser observadas as ligaes dos componentes utilizados no circuito de
alimentao. Os valores dos capacitores foram obtidos por meio das recomendaes presentes nos
datasheets dos fabricantes. H, inclusive, uma chave mecnica, que serviu apenas para controlar se o
circuito estava energizado ou no.
Outro ponto importante foi a utilizao de capacitores de cermica com valor nominal de 100
nF em cada ponto de alimentao do circuito, o que permitiu aumentar a estabilidade da alimentao,
de forma que no interferisse no condicionamento do sinal.
CtrlLed_2
CtrlLed_3
CtrlLed_4
0
1
1
0
1
0
1
0
0
1
0
1
LED
Vermelho
Apagado
Ligado
Apagado
LED
Infravermelho
Ligado
Apagado
Apagado
28
Amplificador de Transimpedncia
O sinal de sada do fotodiodo uma corrente proporcional luz que incide sobre ele. Dessa
forma, necessrio transformar em tenso esta corrente. Para tal, utilizado um circuito amplificador
de transimpedncia, conforme a Figura 27.
Vsada = Ifotodiodo R f
(18)
29
fc =
2 R1 R2 C1 C2
(19)
R1 R2 C1 C2
Q=
C2 (R1 + R2)
{
Onde, f a frequncia de corte selecionada e Q o fator de qualidade do filtro.
Sabe-se que a frequncia cardaca de um adulto est, normalmente, entre 60 a 100 BPM
(PORTO, 2014). Considerando um indivduo que possui no mximo uma frequncia cardaca de 100
BPM, o que corresponde a um sinal de oximetria de 1,67 Hz, a maior parte do espectro de potncia deste
sinal est contido em at 5 Hz. Isto porque, em um sinal de oximetria, 90% a 95% de seu espectro de
potncia esto concentrados a partir da frequncia cardaca do indivduo em at trs vezes esta
frequncia (HAYES, 2001).
Um filtro foi projetado com um fator de qualidade igual a 1 e frequncia de corte em 5 Hz, pois
a maioria dos sinais de oximetria possuem grande parte dos seus espectros de potncia contidos at esta
frequncia. Os valores que so mostrados na Figura 28 foram calculados, levando em conta estas
consideraes.
1
2. . .
(20)
Vsada = (1 +
R2
)V
R1 entrada
(21)
Regulador de offset
Como o nvel DC foi removido pelo filtro passa alta, o sinal possua alguns valores negativos
de tenso, o que tornou impossvel a converso deste pelo conversor analgico-digital, CAD, do Arduino
Uno. Dessa forma, foi necessrio introduzir uma tenso de offset no sinal de modo que este estivesse
contido na faixa de converso do CAD. Para tanto, foi utilizado o circuito da Figura 31 que um divisor
de tenso resistivo com desacoplamento feito pelo capacitor eletroltico. Este circuito se comportou
como um filtro passa alta, cuja frequncia de corte igual a 0.03 Hz, porm sua funo principal foi
inserir um offset de 2,5V no sinal visto que este o valor central da faixa de converso do CAD que
est contido entre 0 a 5V.
3.2.2.
Programao do Arduino
A programao do Arduino foi realizada pela IDE fornecida pelo prprio fabricante em seu site.
Da serial Bluetooth que transmite os dados e da USB que utilizada para verificao do cdigo;
Aps esta configurao, o programa teve de esperar at receber algum dado via Bluetooth. Caso
recebesse era necessrio verificar se esse dado era vlido. Se sim, deveria iniciar o processo de oximetria
de pulso.
Esse processo comea ligando primeiramente o LED vermelho por 10 segundos antes de se
realizar a leitura. Foi necessrio esperar este tempo para que o sinal se estabilizasse em torno de um
valor. Esperado este tempo, foi realizada a leitura do sinal vermelho durante 5 segundos com um
33
intervalo de 4 ms entre cada leitura executada, ou seja, a uma taxa de amostragem de 250 Hz. Cada
amostra adquirida foi enviada via Bluetooth.
O processo se repetiu para o LED infravermelho. No entanto, 15 segundos foram precisos para
que o sinal se estabilizasse. Este tempo foi escolhido empiricamente durante os testes do circuito. Aps
concluda a leitura dos dois sinais, o microcontrolador apagou os dois LEDs e ficou aguardando um
novo dado recebido via Bluetooth para que se iniciasse o processo de oximetria novamente.
O cdigo desenvolvido apresentado no Apndice A Cdigo do Arduino.
3.2.3.
Programao da Raspberry Pi
34
Outra configurao realizada foi a mudana da senha padro para o usurio pi, o que permitiu
uma maior segurana em relao ao acesso ao Sistema Operacional. Aps a realizao destas
configuraes, o sistema reiniciou para que as configuraes fossem aplicadas.
Atribuindo um IP fixo
O prximo passo foi a configurao de um IP (do ingls, Internet Protocol) esttico para a
Raspberry Pi, de modo que fosse possvel acessar remotamente o dispositivo, o que dispensou a
necessidade de um monitor ligado placa durante o desenvolvimento. Para realizar este procedimento,
conectou-se um cabo Ethernet entre a Raspberry Pi e um roteador. Em seguida, o roteador disponibilizou
um IP dinmico e um conjunto de variveis de configurao ao dispositivo. Este conjunto de variveis,
juntamente com o IP fornecido, foram inseridos dentro de um arquivo de configurao de rede da
Raspberry Pi (MODMYPI, 2010).
35
Configurao do Bluetooth
Para utilizar a comunicao Bluetooth necessrio instalar alguns drivers e ajustar algumas
variveis de configurao (DAWN ROBOTICS, 2013) (MYPIANDME, 2013). Durante esta
configurao, houve um problema na comunicao devido verso do kernel utilizada pelo Sistema
Operacional. Um downgrade dessa verso possibilitou o correto funcionamento da comunicao
(RASPEBERRY PI, 2014, Connecting to arduino bluetooth module) (CHAN, 2014).
36
Programao em Python
A programao da Raspberry Pi foi composta por um programa em Python que inicializou a
comunicao Bluetooth, executou o processamento do sinal e o armazenamento dos resultados em um
banco de dados.
Para a programao em Python, foi necessrio instalar um banco de dados na Raspberry Pi. O
banco utilizado neste projeto foi o sqlite3. A instalao do Python e do banco de dados sqlite3, pode ser
realizada a partir das seguintes linhas de comando.
~$ sudo apt-get update
~$ sudo apt-get install python
~$ Sudo apt-get install sqlite3
Para gerenciar e visualizar o banco de dados, foi instalada a interface grfica sqlitebrowser
(SQLITEBROWSER, 2014). Na Figura 36, pode ser observada esta interface grfica.
Esta forma de separao foi escolhida para facilitar e agilizar o processo de busca dos dados
posteriormente efetuada pelo programa web.
Na Figura 37, pode ser observado como o programa em Python foi estruturado. Ele foi composto
inicialmente pela importao das bibliotecas necessrias e pela inicializao das variveis,
posteriormente, iniciou-se a conexo Bluetooth que recebeu os dados enviados pelo Arduino Uno.
Enquanto a quantidade esperada de dados, que corresponde a 5 segundos de cada amostra dos sinais,
no for recebida, o programa ficou em loop. Aps o completo recebimento dos dados, estes sinais foram
filtrados por um filtro de mdia mvel para remover os rudos de 60 Hz.
O filtro de mdia mvel se inicia realizando a mdia aritmtica das M primeiras amostras. Em
seguida a primeira amostra descartada e inserida a prxima para o clculo da mdia novamente. Esse
processo se repete at que seja realizada a mdia de todo o sinal.
Este tipo de filtro atenua uma determinada frequncia dada pela equao (22) e todos os
mltiplos inteiros desta frequncia.
fc =
(22)
Onde,
a primeira frequncia atenuada;
a frequncia de amostragem;
M quantidade de amostras que sero utilizadas para a mdia.
38
Sabendo que o Arduino realiza a amostragem dos sinais a uma taxa igual a 250 Hz e desejando
que a primeira frequncia atenuada seja em 10 Hz, pode-se concluir que o comprimento M do filtro deve
ser igual a 25 amostras. Logo, o rudo de 60 Hz foi atenuado, pois este mltiplo inteiro dessa
frequncia.
Aps executada a filtragem, o programa realizou um algoritmo de busca e localizao dos picos
e dos vales dos sinais, para que na prxima etapa, fosse possvel o clculo da oximetria de pulso e da
frequncia cardaca. O algoritmo de busca dos picos e dos vales estabeleceu uma comparao entre n
amostras. Esta comparao verificou qual era o maior e o menor valor dentro desta quantidade de
amostras, sendo que n era um nmero inferior quantidade total de amostras de cada sinal. Verificadas
estas n primeiras amostras, o algoritmo repetiu o mesmo processo para as seguintes n amostras, at que
se percorresse todo sinal. O algoritmo de procura dos picos e dos vales terminou quando se obteve a
mdia aritmtica entre os picos e entre os vales de cada sinal.
A partir dos picos e dos vales obtidos foi possvel calcular a relao R dada pela equao (13),
e, posteriormente, o clculo da oximetria realizado a partir da curva de calibrao da equao (14).
A frequncia cardaca foi calculada a partir da mdia aritmtica da frequncia de cada sinal,
visto que o algoritmo de busca dos picos e dos vales salvou as posies onde estes extremos ocorreram.
Desse modo, pde-se determinar o perodo entre cada pico, uma vez que a frequncia de amostragem
foi fixada em 250 Hz pelo Arduino Uno.
O programa termina aps a insero dos dados e resultados no banco de dados, criado pelo
sqlitebrowser. No entanto, no foram inseridas todas as amostras dos sinais vermelho e infravermelho,
j que consome um processamento muito grande, tanto na escrita como na leitura do banco de dados.
Portanto, os dados destes sinais foram inseridos a cada 10 amostras. O que se teve, dessa forma, foi um
sinal salvo equivalente ao sinal original amostrado a uma frequncia igual a
250
10
= 25 Hz. Mesmo
ocorrendo esta reduo da taxa de amostragem, ela ainda atendeu ao critrio de Nyquist, visto que o
espectro do sinal no superior a 5 Hz.
Programao web
A aplicao web deste projeto foi desenvolvida por meio da utilizao da plataforma Node.js e
do framework Express.
O Node.js uma plataforma que utiliza o mecanismo V8 JavaScript do Google Chrome para
construir aplicaes de rede rpidas e escalveis. O Node.js um modelo orientado a eventos, focado
em I/O (do ingls, Input/Output) no bloqueante, de modo que suas aplicaes sejam leves e eficientes,
39
o que perfeito para aplicaes em tempo real com fluxo de dados em grande quantidade e rapidez por
meio de dispositivos distribudos (MOREIRA, 2013, O que Node.Js?).
O Express um framework para o Node.js, sendo que esse minimalista, flexvel e possui um
robusto conjunto de recursos para desenvolver aplicaes web, sistema de roteamento, executvel para
gerao de aplicaes, dentre outras funes (MOREIRA, 2013, Primeiros passos com Express em
Node.js).
necessrio que a instalao do Node.js seja para a arquitetura da Raspberry Pi (NODEARM,
2014). Terminada a instalao do Node.js pde-se iniciar a instalao do framework Express
(EXPRESS, 2014).
O mtodo de instalao do framework Express utiliza o comando npm (do ingls, node
package modules), que um gerenciador de pacotes do Node.js. Este comando foi utilizado para instalar
mais dois pacotes, que so o Sqlite3 e o Nodemon. O pacote Sqlite3 responsvel por permitir a
manipulao de um banco de dados do tipo sqlite3. O Nodemon um outro pacote que auxiliou durante
o desenvolvimento do projeto, visto que ele monitora qualquer mudana em algum cdigo que compe
a aplicao web e, quando h deteco de alguma alterao, o pacote reinicia automaticamente a
aplicao web que est rodando sobre o Node.js (NPM, 2014) (NODEMON, 2014).
A instalao do framework Express criou uma pasta onde j est iniciado um projeto sobre o
Node.js e utilizando o framework Express. Esta denominada a pasta raiz do projeto, e nela foi inserido
o programa em Python desenvolvido. Dentro da pasta public/datas colocou-se o banco de dados, que
acessado tanto pelo programa em Python quanto pela aplicao web, quando for necessrio inserir ou
buscar os dados e resultados armazenados.
Na pasta public/images foram colocadas as imagens que compem a aplicao web, tal como
o logotipo desenvolvido. Na pasta public/javascripts encontram-se os programas em javascripts
responsveis por gerar os grficos, a dinmica de algumas pginas e o layout destas. Na pasta
public/stylesheets foram inseridos os arquivos do tipo css, responsveis pela formatao,
estruturao e pelo layout das pginas.
O contedo de cada pgina foi definido dentro da pasta views, em arquivos do tipo Jade. O
Jade um template engine exclusivo para o Node.js o que permitiu facilmente a descrio do
contedo de uma pgina. O arquivo index.jade foi responsvel pelo contedo da pgina inicial, o
oximeter.jade pelo contedo da pgina que mostra os resultados das medidas de oximetria e permite
a requisio de uma nova medida, e o executingOximeterPy.jade a pgina redirecionada quando se
executa o programa em Python localizado na pasta raiz.
40
O arquivo index.js localizado na pasta routes foi responsvel por gerenciar o roteamento
das pginas, enviar ou receber variveis do browser, ler os dados e resultados do banco de dados e
executar o programa em Python da pasta raiz.
Na Figura 38, pode ser visto o diagrama em blocos da aplicao web, onde se percebem as
funcionalidades que foram descritas sobre o arquivo index.js e como as pginas foram interligadas
por meio da atuao deste arquivo.
41
42
4. Resultados e Discusso
Neste captulo so apresentados os resultados obtidos no projeto referente ao circuito analgico,
ao processamento digital do sinal (programao em Python) e aplicao web. Sero feitas algumas
anlises e discusses sobre cada resultado que foi obtido.
4.1.
Circuito analgico
4.1.1.
Filtros analgicos
A validao dos filtros implementados no circuito tem a finalidade de verificar se as
Entrada (Vpp1)
1,07
1,07
1,07
1,07
1,07
1,07
1,07
1,07
1,07
1,07
1,07
Sada (Vpp)
1,07
1,09
1,11
1,17
1,23
1,21
1,09
0,90
0,72
0,60
0,48
43
Ganho (dB)
0,00
0,16
0,32
0,78
1,21
1,07
0,16
-1,50
-3,44
-5,02
-6,96
Fase ()
-0,30
-6,70
-16,90
-31,10
-46,09
-68,00
-87,20
-104,60
-118,40
-127,80
-134,80
Figura 39 - Sinais de entrada e sada do filtro passa baixa para uma frequncia de 5 Hz
Por meio da utilizao do Matlab, esses dados experimentais foram comparados com o terico
fornecido pelo software de simulao LTSpice. Na Figura 40, pode-se observar a comparao entre estes
dados.
Figura 40 - Comparao entre os dados tericos e experimentais para o filtro passa baixa
44
Nota-se, pelo grfico, que h pequenas diferenas entre os dados tericos e experimentais. As
discrepncias existem devido tolerncia de fabricao dos componentes.
Entrada (Vpp2)
1,07
1,07
1,07
1,07
1,07
1,07
1,07
1,07
1,07
Sada (Vpp)
0,42
0,70
0,82
0,90
0,96
1,03
1,07
1,07
1,07
Ganho (dB)
-8,12
-3,69
-2,31
-1,50
-0,94
-0,33
0,00
0,00
0,00
Fase ()
72,10
54,80
44,80
35,87
32,60
20,19
8,70
4,33
1,55
Figura 41 - Sinais de entrada e sada do filtro passa alta para uma frequncia de 0,07 Hz
45
Figura 42 - Comparao entre os dados tericos e experimentais para o filtro passa alta
Novamente, percebe-se que h uma grande correlao entre os dados. As diferenas entre os
valores tericos e experimentais se devem ao fato da tolerncia de fabricao dos componentes.
4.1.2.
realizada a partir da anlise do sinal de sada em cada estgio do circuito. Para isso, utilizou-se um sinal
de oximetria real, no qual liga-se apenas um LED e a luz emitida por este atravessa o dedo de um
indivduo.
Amplificador de transimpedncia
O amplificador de transimpedncia responsvel por converter a corrente do fotodiodo, que
proporcional luz recebida por este, em tenso. Na Figura 43, pode ser observado que o sinal de sada
deste estgio muito ruidoso.
46
47
Percebe-se a grande reduo do rudo no sinal, sendo possvel reconhecer o padro presente em
sinais de oximetria. Repara-se que a amplitude do sinal ainda muito baixa, sendo necessrio realizar
uma amplificao deste para uma melhor preciso dos resultados.
Amplificador no inversor
Aps a remoo do nvel DC, pde-se realizar a amplificao do sinal para obter melhor
resoluo durante a converso analgica-digital. Esta amplificao pode ser vista na Figura 46. Na sada
deste estgio, o sinal mantm o mesmo padro, contudo, percebe-se a amplificao de todo o sinal e
uma alterao do nvel DC.
A partir de uma anlise das tenses de pico a pico dos sinais de sada e de entrada do
amplificador no inversor, calculou-se que o ganho prtico deste amplificador foi:
48
( )
760 (820)
=
= 4,46
( ) 177 (177)
(23)
Considerando que o ganho terico dimensionado para este amplificador foi de 4,7. Pode-se
concluir que o valor experimental do ganho est dentro do esperado, visto que o erro existe devido
presena da tolerncia dos componentes utilizados na prtica.
Ajuste de offset
O sinal de sada do amplificador no inversor possui valores negativos de tenso, logo no
possvel a converso analgico-digital do sinal pelo CAD do Arduino. Portanto, se faz necessrio um
ajuste do nvel DC do sinal. Na Figura 47, observado o sinal resultante do circuito de ajuste de offset
implementado, nota-se o mesmo padro do sinal, porm com um nvel DC por volta de 2,52 V.
Sabendo que o nvel DC dimensionado para a sada deste circuito foi de 2,5 V, que corresponde
metade da faixa de converso suportada pelo Arduino, conclui-se que h uma grande correlao entre
os valores terico e experimental.
49
componente que est interferindo no sinal. Para esta finalidade utilizou-se um filtro digital de mdia
mvel, o qual foi implementado no processamento digital do sinal contido na programao em Python.
4.2.
Transmisso Bluetooth
Para a validao da transmisso Bluetooth foi programado que o Arduino Uno enviasse uma
forma de onda padro por meio da serial do Bluetooth e, quando a Raspberry Pi recebeu esses dados,
eles foram comparados com o mesmo padro gravado no Arduino. Dessa forma, a Raspberry Pi soube
qual a ordem dos dados que deveria receber.
O sinal padro em questo foi uma onda dente de serra, com valores inteiros, que iam de 0 at
1023. Este intervalo foi escolhido, porque durante a converso analgica-digital os possveis valores
convertidos estavam contidos justamente nesta gama de valores. O intervalo entre uma transmisso de
um dado e o seguinte foi definido em 4 ms, que corresponde a frequncia de amostragem escolhida para
o projeto.
Este teste foi realizado em trs situaes diferentes: na primeira, a distncia entre o Arduino
Uno e a Raspberry Pi foi de 1,5 m; na segunda, a distncia foi de 6 m e na ltima a distncia foi de 4 m,
porm havia uma parede entre eles nesta ltima situao.
Na Tabela 5, podem ser visualizados os resultados do teste da transmisso. Nota-se que nos trs
casos, no houve erros na transmisso dos dados.
Tabela 5 - Resultados da transmisso Bluetooth
Teste
1
2
3
Quantidade de
Dados Enviados
1000000
1000000
1000000
Quantidade de Dados
Recebidos Corretos
1000000
1000000
1000000
Quantidade de Dados
Recebidos Errados
0
0
0
Foi realizado um teste para verificar a distncia mxima em que era possvel o pareamento entre
os mdulos Bluetooth. Descobriu-se que esta podia chegar a uma distncia mxima de 12 m sem
obstculos entre os mdulos ou a 7 m quando havia algumas paredes entre eles.
4.3.
e a localizao dos picos e vales. Estes processos estavam contidos dentro do programa em Python que
inicializou a comunicao Bluetooth e o armazenamento dos dados e resultados em um banco de dados.
Nas Figuras 49 e 50, podem ser observados os resultados obtidos deste processamento. Na Figura 49,
51
so apresentados os sinais vermelho e infravermelho no filtrados com seus respectivos vales e picos
encontrados pelo algoritmo, enquanto, na Figura 50, podem ser visualizados os mesmos resultados para
esses sinais aps o filtro de mdia mvel ser aplicado.
Nota-se que os primeiros e ltimos picos e vales de cada sinal so desconsiderados, visto que
no h a necessidade de se utilizar todos os extremos encontrado (pois o sinal de oximetria no apresenta
uma variao repentina) para o clculo da oximetria e tambm pela possibilidade do algoritmo
interpretar um falso extremo no comeo ou no fim das sequncias dos sinais.
Figura 49 - Sinais vermelho e infravermelho no filtrados junto aos seus respectivos picos e vales
Figura 50 - Sinais vermelho e infravermelho filtrados junto aos seus respectivos picos e vales
52
4.4.
Aplicao web
A visualizao e o controle do processo de oximetria deste projeto foram feitos pela aplicao
web, gerada pela Raspberry Pi por meio do Node.js e do framework Express. Esta aplicao web
permitiu que o usurio visualizasse trs pginas diferentes:
A pgina que permite verificar a oximetria e requisitar uma nova medio desta;
boas-vindas, informaes sobre o aplicativo, um boto que permite redirecionar o usurio para a
pgina de visualizao da oximetria e o logotipo que foi criado para o projeto.
Ao clicar no boto Check your oximetry!, o usurio abre uma nova pgina na qual visualiza
os dados e os resultados referentes ltima medio de oximetria realizada (Figura 52). Esta pgina
composta por trs setores principais. No primeiro, conforme na Figura 53, observa-se o valor numrico
da oximetria e da frequncia cardaca, o horrio e o dia em que foi realizada a medio referente aos
valores mostrados, um boto em que o usurio pode executar uma nova oximetria (New oximetry!) e
outro que permite retornar pgina inicial (Home page).
O segundo setor (Figura 54) composto por dois templates de grficos (HIGHCHARTS, 2014).
O primeiro corresponde ao sinal de oximetria proveniente do LED vermelho, enquanto o segundo
53
referente ao LED infravermelho. Ambos os grficos refletem os sinais de oximetria correspondentes aos
valores numricos apresentados no primeiro setor desta pgina. Estes grficos permitem que o usurio,
utilizando o cursor do mouse, visualize os pontos que foram coletados durante a oximetria.
Por fim, na Figura 55, mostrado o ltimo setor que compe esta pgina. Neste, possvel
observar o histrico das medies da oximetria e da frequncia cardaca por meio de dois grficos
gerados pelo mesmo template anterior. Estes grficos permitem selecionar e pressionar os pontos que
os geram. Caso isso acontea, a pgina ser atualizada juntamente com os dois primeiros setores.
A ltima pgina que compe o aplicativo web mostrada somente quando o usurio requer uma
nova oximetria. Esta pgina mantida por aproximadamente 50 segundos, que corresponde ao tempo
de aquisio, transmisso via Bluetooth, processamento digital do sinal e armazenamento dos dados e
resultados no banco de dados. Passado este tempo, o usurio redirecionado automaticamente para a
pgina de visualizao da oximetria.
54
Figura 52 - Pgina que permite visualizar e requisitar uma nova medio de oximetria
55
56
57
O aplicativo desenvolvido pode ser acessado por dispositivos mveis, tais como smartphones e
tablets. Na Figura 57, observa-se o aplicativo por meio de um smartphone. Nota-se que o aplicativo
automaticamente se redimensiona para uma melhor visualizao no dispositivo.
4.5.
conectado de forma correta ao seu dedo, sem esmaltes na unha e com iluminao ambiente baixa. Esse
conjunto de situaes minimizam as fontes de erro para a realizao da oximetria.
58
Os sinais obtidos nos testes 1 a 4 podem ser observados, respectivamente, nas Figuras 59, 60,
61 e 62, enquanto os resultados da oximetria e da pulsao destes testes esto disponibilizados na Tabela
6.
Tabela 6 - Resultados da oximetria e da pulsao cardaca para os testes
Teste
1
2
3
4
SpO2 (%)
70
98
96
105
Nota-se pelos grficos que o nico sinal que no apresentou grandes distores ocorreu durante
o teste 2, enquanto os piores resultados aconteceram nos testes 3 e 4. Os ltimos testes possuem uma
grande flutuao dos seus sinais, visto que a movimentao do dedo gera grande rudo durante a medio
da oximetria. Portanto, este resultado demonstra ser essencial que o usurio esteja em repouso.
59
O sinal vermelho do teste 1 apresenta uma flutuao significativa em seu sinal vermelho, devido
ao fato do sensor estar mais exposto luz ambiente durante o processo. Por fim, em ambos os testes
percebe-se que o algoritmo de busca dos picos e dos vales e a filtragem de mdia mvel mostraram bons
resultados.
60
O prximo teste consiste na medio da oximetria quando h esmaltes de cores opacas nas
unhas. Os sinais resultantes da utilizao do esmalte de cor azul, preta e vermelha so apresentados nas
Figuras 63, 64 e 65, respectivamente. Na Tabela 7, podem ser visualizados os resultados da oximetria e
da pulsao cardaca para cada cor de esmalte.
61
SpO2 (%)
106
107
70
Os sinais de oximetria sofreram distores para todas as cores utilizadas, isto porque a cor do
esmalte acaba absorvendo ou refletindo certos componentes da luz que incide sobre a unha. Esta
distoro gera resultados de oximetria comprometidos, que podem ser observados nos valores de SpO2
mostrados na Tabela 7. Nota-se, assim, que a frequncia cardaca est entre os valores esperados, o que
pode indicar que a cor do esmalte altera o sinal de oximetria em relao amplitude, mas a frequncia
no sofre grande efeito.
Enfim, o que se pode afirmar a partir destes testes, que a presena de esmaltes de cores opacas
na unha deve ser evitada, pois altera o espectro do sinal de oximetria, resultando consequentemente em
falsos valores de oxigenao perifrica.
62
63
64
5. Concluso
Ao final deste projeto, foi possvel obter conhecimentos acerca de vrios itens: a importncia e
o modo de aferio da oxigenao perifrica do sangue e da pulsao cardaca por meio da oximetria de
pulso; a utilizao de dispositivos pticos-eletrnicos (LEDs e fotodiodo); os circuitos analgicos para
o condicionamento do sinal (amplificador de transimpedncia, filtros passa baixa e passa alta,
amplificadores de ganho, ajuste de offset, isoladores ou buffers, ponte-h, inversor e reguladores de
tenso); a programao do microcontrolador Arduino Uno; a aplicao do Teorema da Amostragem
para determinar a taxa de aquisio sem que resulte em aliasing do sinal; a transmisso Bluetooth
utilizando o mdulo HC-05 e o dongle ES338; a configurao do microcomputador Raspberry Pi e a
instalao de pacotes, drivers e programas para desenvolvimento neste microcomputador; a
comunicao SSH para acessar a Raspberry Pi e assim realizar sua programao remotamente; o
desenvolvimento de programas utilizando a linguagem de programao Python que permitiu a
comunicao Bluetooth, o processamento digital do sinal e o armazenamento dos dados e resultados em
um banco de dados; a gerao e a manipulao de um banco de dados do tipo sqlite; e a programao
web utilizando o Node.js e o framework Express, que permitem em conjunto a elaborao de um
aplicativo web;
O foco do projeto foi propiciar ao usurio a comodidade de iniciar a medio de oximetria e
visualizar seu resultado atravs de um aplicativo web, sem a necessidade da utilizao de um display
especfico para esta aplicao. Como se trata de uma aplicao web, qualquer dispositivo que permita
acesso rede, pode ser utilizado como visualizador, tais como computadores, tablets e smartphones,
independente do tipo de sistema operacional que se utilize. O que se fez necessrio para este projeto foi
a utilizao de um roteador que permitiu conectar o dispositivo escolhido para visualizao e controle
da oximetria com a aplicao web que era executada na Raspberry Pi.
A utilizao de uma rede que permite a ligao de qualquer dispositivo com a aplicao web
possibilita o acionamento do oxmetro ligado a um usurio por uma outra pessoa dentro da rede interna.
Isso no impede que, ao mesmo tempo, o usurio ou outro indivduo acesse seus dados e resultados de
oximetria.
O aplicativo web que se conecta ao oxmetro tambm pode ser acessado atravs de uma rede
externa. Para tanto, necessrio que se conhea o IP externo utilizado pela Raspberry Pi, ou, ento, que
se realize um redirecionamento das portas do roteador e se atribua um domnio DNS (do ingls, Domain
Name System) a este.
A possibilidade do controle e da visualizao da oximetria de modo remoto permite que este
projeto seja implementado em hospitais, onde enfermeiros so redirecionados, em intervalos de tempo
regulares, para coletar dados de oximetria de alguns pacientes e, posteriormente, anotar os resultados
65
em uma ficha de acompanhamento do paciente, que guardada frente de sua cama. Com este sistema,
necessrio apenas um funcionrio para realizar, remotamente, a aferio da oximetria de todos os
pacientes. Os dados e os resultados so armazenados em um banco de dados digital que pode ser
arquivado ao final do acompanhamento do paciente. A utilizao dos bancos de dados uma forma til
para casos onde se deve verificar se as medies foram realizadas nos horrios corretos ou para futuras
anlises de pesquisa ou de estatstica.
As restries encontradas neste projeto relacionam-se ao tempo de aquisio prolongado,
porque quando se ligou um LED foi necessrio esperar um certo tempo at que o sinal de oximetria se
estabelecesse em torno de um valor. Uma possvel soluo, ento, seria o chaveamento dos LEDs de
forma alternada e, posteriormente, a utilizao de um circuito de Sample&Hold para separar os sinais,
visto que h apenas um fotodiodo para ambos os LEDs. Para que a soluo anterior seja vivel,
necessria a escolha de um sensor que possua uma resposta rpida o suficiente para acompanhar o
chaveamento dos LEDs. Sobre o sensor, tambm possvel fazer uma anlise do conjunto de LEDs
utilizados, da isolao de luz ambiente e da imobilizao do dedo durante a oximetria de modo a
melhorar a qualidade do sinal. A distncia e a taxa de transmisso do Bluetooth so outros limitantes do
projeto, sendo que uma alternativa para esta transmisso seria a utilizao de outros radiotransmissores.
Por fim, o processamento da Raspberry Pi para a gerao da aplicao web se mostrou limitado, visto
que durante a gerao da pgina de visualizao dos dados de oximetria, a unidade de processamento
da Raspberry Pi chegou a 100% e assim houve uma demora na resposta deste microcomputador.
Trabalhos futuros podero ser feitos em todo o projeto, como por exemplo, a escolha de outro
sensor que tenha melhor resposta; o desenvolvimento de uma placa de circuito impresso para diminuir
capacitncias parasitas e rudos que so normalmente encontrados em protoboards; a utilizao de
chaveamento alternado dos LEDs para diminuir o tempo de aquisio dos dados; a troca do
microcontrolador Arduino Uno por um ARM que permite um maior e mais rpido processamento
computacional; a mudana da comunicao Bluetooth por outra com maior alcance e taxa de
transmisso; e a utilizao de outro sistema embarcado anlogo a Raspberry Pi, tal como a BeagleBone
ou a Odroid.
Estes possveis melhoramentos no s possibilitaro uma melhor anlise da oximetria de pulso,
como tambm permitiro que outros sistemas de medies de sinais vitais sejam acoplados a este
projeto, de forma a gerar uma central de monitoramento de diversos sinais utilizando uma aplicao
web.
66
Referncias Bibliogrficas
ANDRADE, L. A. K., Sistema de Medio para Oximetria de Pulso. Curitiba, 2009.
ARDUINO, Arduino Uno. Arduino. 2014. Disponvel em:
<http://arduino.cc/en/Main/ArduinoBoardUno>. Acesso em: 01 nov 2014.
ARDUINO, Download the Arduino Software. Arduino. 2014. Disponvel em:
<http://arduino.cc/en/main/software>. Acesso em: 01 nov 2014.
ARDUINO, SoftwareSerial Library. Arduino. 2014. Disponvel em:
<http://arduino.cc/en/Reference/softwareSerial>. Acesso em: 01 nov 2014.
CHAN, E., Upgrade/Downgrade to a specific firmware-kernel version with rpi-update in Raspbian.
2014. Disponvel em: <http://tech.enekochan.com/en/2014/03/08/upgradedowngrade-to-a-specificfirmware-kernel-version-with-rpi-update-in-raspbian/>. Acesso em: 01 nov 14.
DAWN ROBOTICS, Talking to a Bluetooth Serial Module with a Raspberry Pi. Dawn Robotics.
2013. Disponvel em: <http://blog.dawnrobotics.co.uk/2013/11/talking-to-a-bluetooth-serial-modulewith-a-raspberry-pi/>. Acesso em: 01 nov 2014.
EXPRESS, Installing. 2014. Disponvel em: <http://expressjs.com/starter/installing.html>. Acesso em:
01 nov 14.
FAIRCHILD, datasheet KA78XX/KA78XXA. Electronic Components Datasheet Search. 2001.
Disponvel em: <http://pdf1.alldatasheet.com/datasheet-pdf/view/99445/FAIRCHILD/KA7805.html>.
Acesso em: 01 nov 2014.
FAIRCHILD, datasheet BC556/557/558/559/560. Datasheet Catalog. 2002. Disponvel em:
<http://pdf.datasheetcatalog.com/datasheet/fairchild/BC558.pdf>. Acesso em: 01 nov 2014.
FAIRCHILD, datasheet BC548/BC548A/BC548B/BC548C. Datasheet Catalog. 2002. Disponvel em:
<http://pdf.datasheetcatalog.com/datasheet/fairchild/BC548.pdf>. Acesso em: 01 nov 2014.
FINE, I.; WEINREB, A., Multiple scattering effect in transmission pulse oximetry. 1995.
HAYES, M. J.; SMITH, P. R., A new Method For Pulse Oximetry Possessing Inherent Insensitivity to
Artifact. In: IEEE Transactions on Biomedical Engineering, vol. 48, no. 4, p.452-461, 2001.
KIKUTHI, P. M. B., Desenvolvimento de um Circuito Sensor Analgico para um Oxmetro no
Invasivo. So Carlos, 2012.
LIMA, D. W. C., Oxmetro de Pulso com Transmisso de Sinal Sem Fios. Porto Alegre, 2009.
MARIEB, E. N.; HOEHN, K., Human Anatomy & Physiology. Eight ed., San Francisco: Benjamin
Cummings, ISBN: 987-0-8053-956-3, 2008.
MODMYPI, Tutorial How to Give Your Raspberry Pi a Static IP Address. ModMyPi. 2010.
Disponvel em: <https://www.modmypi.com/blog/tutorial-how-to-give-your-raspberry-pi-a-static-ipaddress.>. Acesso em: 01 nov 2014.
MOREIRA, R. H., O que Node.js?.2013. Disponvel em: <http://nodebr.com/o-que-e-node-js/>.
Acesso em: 01 nov 14.
MOREIRA, R. H., Primeiros passos com Express em Node.js. 2013. Disponvel em:
<http://nodebr.com/o-que-e-node-js/>. Acesso em: 01 nov 14.
MOYLE, J. T. B., Pulse Oximetry. London: BMJ, 1994.
67
68
Apndices
Apndice A Cdigo do Arduino
#include <TimerOne.h>
#include <SoftwareSerial.h>
/**
pino10(Rx) do arduino <-> Tx do HC05
pino11(Tx) do arduino <-> Rx do HC05
**/
SoftwareSerial BTSerial(10, 11);
int
int
int
int
int
int
int
int
int
readAD = 0;
ctrlLed2 = 6;
ctrlLed3 = 7;
ctrlLed4 = 8;
ctrlLed5 = 9;
ledRed = 5;
ledReadRed= 4;
ledIRed = 3;
ledReadIRed = 2;
// RX | TX
//
//
//
//
//
char dataBTReceive;
#define MaxSizeBuffer 1250
int IndexRed;
int IndexIR;
boolean EndRed = false;
boolean EndIRed = false;
#define waitTime5 1250
#define waitTime10 2500
#define waitTime15 3750
int time;
int BufferRed;
int BufferIRed;
/**
state= 0: Todos os LEDs desligados
state= 1: Liga o LED Vermelho, realiza a leitura equivalente a 5 seg, envia os dados via Bluetooth e desliga o LED Vermelho
state= 3: Liga o LED Infravermelho, realiza a leitura equivalente a 5 seg, envia os dados via Bluetooth e desliga o LED
Infravermelho
**/
int state;
void
void
void
void
void
redOn();
iredOn();
allOff();
readRedLed();
readlRedLed();
void setup()
{
pinMode(ctrlLed2,
pinMode(ctrlLed3,
pinMode(ctrlLed4,
pinMode(ctrlLed5,
OUTPUT);
OUTPUT);
OUTPUT);
OUTPUT);
pinMode(ledRed,OUTPUT);
pinMode(ledReadRed,OUTPUT);
pinMode(ledIRed,OUTPUT);
pinMode(ledReadIRed,OUTPUT);
state = 0;
allOff();
// estado inicial
digitalWrite(ledRed,LOW);
digitalWrite(ledReadRed,LOW);
digitalWrite(ledIRed,LOW);
digitalWrite(ledReadIRed,LOW);
IndexRed = 0;
IndexIR = 0;
time = 0;
Serial.begin(115200);
Serial.flush();
BTSerial.begin(115200);
BTSerial.flush();
Timer1.initialize(4000);
Timer1.attachInterrupt(switchState);
Serial.println("newOximeter2");
// Overflow do Timer1
// A cada overflow do timer chama-se esta funcao
}
void loop() {
if (BTSerial.available()) {
dataBTReceive = char(BTSerial.read());
if(dataBTReceive == '1'){
Serial.println(dataBTReceive);
BTSerial.flush();
state++;
}
else
69
Serial.println("dado incorreto");
}
}
void switchState() {
switch (state) {
case 0:
allOff();
break;
case 1:
redOn();
digitalWrite(ledRed,HIGH);
if(time++ == waitTime10-1) {
time = 0;
state++;
}
break;
case 2:
digitalWrite(ledReadRed,HIGH);
readRedLed();
if (EndRed == true) {
iredOn();
digitalWrite(ledRed,LOW);
digitalWrite(ledReadRed,LOW);
state++;
EndRed = false;
}
break;
case 3:
iredOn();
digitalWrite(ledIRed,HIGH);
if(time++ == waitTime15-1) {
time = 0;
state++;
}
break;
case 4:
digitalWrite(ledReadIRed,HIGH);
readIRedLed();
if (EndIRed == true) {
allOff();
digitalWrite(ledIRed,LOW);
digitalWrite(ledReadIRed,LOW);
state = 0;
EndIRed = false;
}
break;
}
}
void redOn() {
digitalWrite(ctrlLed2,HIGH);
digitalWrite(ctrlLed3,HIGH);
digitalWrite(ctrlLed4,LOW);
digitalWrite(ctrlLed5,LOW);
}
void iredOn() {
digitalWrite(ctrlLed2,LOW);
digitalWrite(ctrlLed3,LOW);
digitalWrite(ctrlLed4,HIGH);
digitalWrite(ctrlLed5,HIGH);
}
void allOff() {
digitalWrite(ctrlLed2,HIGH);
digitalWrite(ctrlLed3,LOW);
digitalWrite(ctrlLed4,HIGH);
digitalWrite(ctrlLed5,LOW);
}
void readRedLed() {
BTSerial.println("R");
BTSerial.flush();
BTSerial.println(analogRead(readAD));
BTSerial.flush();
if(IndexRed++ == MaxSizeBuffer-1) {
IndexRed= 0;
EndRed = true;
}
}
void readIRedLed() {
BTSerial.println("I");
BTSerial.flush();
BTSerial.println(analogRead(readAD));
BTSerial.flush();
if(IndexIR++ == MaxSizeBuffer-1) {
IndexIR= 0;
EndIRed = true;
}
}
70
serial
sqlite3
time
numpy as np
math
redDataIn = []
iredDataIn = []
redData = []
iredData = []
redDataFiltered = []
iredDataFiltered = []
indexValleyRed = []
indexValleyIRed = []
indexPeakRed = []
indexPeakIRed = []
valleyRed = []
valleyIRed = []
peakRed = []
peakIRed = []
dbname='public/datas/oximeterlog.db'
####################### Comunicacao Bluetooth #######################
bluetoothSerial = serial.Serial( "/dev/rfcomm0", baudrate=115200)
open("red.dat",'w').close()
open("ired.dat",'w').close()
bluetoothSerial.write("1")
bluetoothSerial.flush()
i = 0
while i<2500: #cuidado com este valor!!!! = 2*MaxSizeBuffer
bt_data =(bluetoothSerial.readline().rstrip('\r\n'))
bluetoothSerial.flush()
i +=1
if (bt_data == "R"):
if (i == 1250):
bt_data =(bluetoothSerial.readline().rstrip('\r\n'))
else:
bt_data =(bluetoothSerial.readline())
bluetoothSerial.flush()
with open("red.dat","a") as file:
file.write(bt_data)
elif (bt_data == "I"):
bt_data =(bluetoothSerial.readline().rstrip('\r\n'))
else:
bt_data =(bluetoothSerial.readline())
bluetoothSerial.flush()
with open("ired.dat","a") as file:
file.write(bt_data)
else:
print(bt_data)
print("error")
####################### Processamento dos Sinais #######################
def find_peak_valley(data,peakOrValley):
index=[]
extreme=[]
npts = 100
i = 0
if (peakOrValley == 1):
while (i < npts):
if(max(data[0:i+npts]) == data[i]):
index.append(i)
extreme.append(data[i])
i = i+npts
else:
i = i+1
while (i < len(data)-npts):
if(max(data[i-npts:i+npts]) == data[i]):
index.append(i)
extreme.append(data[i])
i = i+npts
else:
i = i+1
while (i < len(data)):
if(max(data[i-npts:len(data)]) == data[i]):
index.append(i)
extreme.append(data[i])
i = i+npts
else:
i = i+1
return index,extreme
elif (peakOrValley == -1):
71
72
record_data)
73
record_data)
Timer1.initialize(4000);
Timer1.attachInterrupt(switchState);
// Timer1's overflow
// A cada overflow do timer chama-se esta funcao
}
void loop() {
if (BTSerial.available()) {
dataBTReceive = char(BTSerial.read());
if(dataBTReceive == '1'){
Serial.println(dataBTReceive);
BTSerial.flush();
state++;
}
else
Serial.println("dado incorreto");
}
}
void switchState() {
switch (state) {
case 0:
break;
case 1:
if(nDataSent == maxDataSent) {
state = 0;
nDataSent = 0;
signal = 0;
}
else {
BTSerial.println(signal);
BTSerial.flush();
nDataSent++;
if(++signal == 1024){
signal = 0;
}
}
break;
}
}
express = require('express');
router = express.Router();
exec = require('child_process').exec;
child;
labels;
labelsTime;
seriesSpo2;
seriesBpm;
seriesRed;
seriesIRed;
showSpo2;
showBpm;
showTime;
tickInterval;
74
sqlite3 = require('sqlite3').verbose();
db = new sqlite3.Database('public/datas/oximeterlog.db');
section = req.query.section;
index = (section * 123) + 1;
upperIndex = index+123;
nSampligns = 0;
labels = [];
labelsTime = [];
seriesSpo2 = [];
seriesBpm = [];
seriesRed = [];
seriesIRed = [];
db.serialize(function(){
if (section > -1) {
while (index < upperIndex) {
db.each("SELECT samplingTime AS time, red, ired FROM allDatas WHERE rowid = " + (index), function(err, row) {
labelsTime.push('\'' + String(row.time) + '\'');
seriesRed.push(row.red);
seriesIRed.push(row.ired);
});
index++;
}
var rowId = ++section;
db.each("SELECT timestamp AS time, spo2, bpm, rowid FROM historyResult", function(err, row) {
labels.push('\'' + String(row.time) + '\'');
seriesSpo2.push(row.spo2);
seriesBpm.push(row.bpm);
nSampligns = ++nSampligns;
if(row.rowid == (rowId)) {
showSpo2 = row.spo2;
showBpm = row.bpm;
showTime = row.time;
}
}, function(err2, row2) {
tickInterval = Math.round(nSampligns / 6);
sendDatas(res);
});
}
else {
db.each("SELECT samplingTime AS time, red, ired FROM lastData", function(err, row) {
labelsTime.push('\'' + String(row.time) + '\'');
seriesRed.push(row.red);
seriesIRed.push(row.ired);
});
db.each("SELECT timestamp AS time, spo2, bpm FROM historyResult", function(err, row) {
labels.push('\'' + String(row.time) + '\'');
seriesSpo2.push(row.spo2);
seriesBpm.push(row.bpm);
nSampligns = ++nSampligns;
showSpo2 = row.spo2;
showBpm = row.bpm;
showTime = row.time;
}, function(err2, row2) {
tickInterval = Math.round(nSampligns / 6);
sendDatas(res);
});
}
});
db.close();
});
router.get('/executingOximeterPy', function(req, res) {
child = exec("python oximeter.py",
function (error, stdout, stderr) {
if (error !== null) {
console.log('exec error: ' + error);
}
if (stdout == 1) {
console.log('executingOximeterPy page will be closed!');
}
});
res.render('executingOximeterPy', { title: 'Web Pulse Oximeter' })
});
module.exports = router;
75
76
77
title: {
text: 'InfraRed signal data',
x: -20, //center
style: {
"color": "#000",
"fontSize": "26px",
"fontWeight": "bold"
}
},
colors: ['#ff851f'],
xAxis: {
categories: [#{mtime}],
tickInterval: 15,
tickWidth: 0,
gridLineWidth: 1
},
yAxis: {
title: {
text: 'Voltage (V)'
}
},
tooltip: {
valueSuffix: ' V'
},
legend: {
layout: 'vertical',
align: 'right',
verticalAlign: 'middle',
borderWidth: 0
},
series: [{
name: 'IRED',
data: [#{mired}]
}]
});
div
a(href="/")
img(src="images/logoWebPulseOximeter.png", alt="Logo WebPulseOximeter")
78
Anexo
Anexo A Configurao do HC-05
Modify The HC-05 Bluetooth Module Defaults Using AT Commands by techbitar <http://www.instructables.com/id/Modify-The-HC-05-Bluetooth-Module-Defaults-UsingA/?ALLSTEPS>
This Arduino program (HC_05.ino) does two things. It takes the AT commands you enter from the Arduino IDE Serial Monitor and sends those commands to the HC-05. The program then
reads the output of the HC-05 and displays it on the Arduino IDE Serial Monitor. You can also use a terminal emulator such as Tera Term instead of the Arduino Serial Monitor.
The Arduino communicates with the HC-05 using the SoftwareSerial ports while the Arduino communicates with the user via the Serial Monitor.
/*
AUTHOR: Hazim Bitar (techbitar)
DATE: Aug 29, 2013
LICENSE: Public domain (use at your own risk)
CONTACT: techbitar at gmail dot com (techbitar.com)
*/
#include <SoftwareSerial.h>
SoftwareSerial BTSerial(10, 11); // RX | TX
void setup()
{
pinMode(9, OUTPUT); // this pin will pull the HC-05 pin 34 (key pin) HIGH to switch module to AT mode
digitalWrite(9, HIGH);
Serial.begin(9600);
Serial.println("Enter AT commands:");
BTSerial.begin(38400); // HC-05 default speed in AT command more
}
void loop()
{
// Keep reading from HC-05 and send to Arduino Serial Monitor
if (BTSerial.available())
Serial.write(BTSerial.read());
// Keep reading from Arduino Serial Monitor and send to HC-05
if (Serial.available())
BTSerial.write(Serial.read());
}
You can send AT Commands to the HC-05 from the Arduino IDE Serial Monitor while the Arduino is running the attached Arduino program.
I have listed a few popular AT commands that will change the HC-05 device name, pass code, and speed. You will find a full set of AT commands from the attached HC-05 reference PDF
file.
(remove double quotes from AT command)
To change device name from the default HC-05 to let's say MYBLUE enter: "AT+NAME=MYBLUE"
To change HC-05 baud rate from default 9600 to 115200, 1 stop bit, 0 parity enter: "AT+UART=115200,1,0"
Switch on the Arduino with the HC-05 connected and the sketch from above loaded. Its time to scan for devices from the Raspberry side of things. Type in hcitool scan and this should get
you:
This is the name and the MAC address of the device we configured from the Arduino. Now every manual on the internet begins referring to the sdptool command to discover services and
channels. This is not needed. You may also read something about editing configuration files to add support for the SPP protocol and so on. This is not needed, in fact it didnt work for me at
all. So this time I deliberately skipped these steps.
The only configuration file that needs editing is the rfcomm.conf file, where we will add a permanent connection to the module we just discovered. Im using nano as an editor here. Type in
sudo cp /etc/bluetooth/rfcomm.conf rfcomm.conf.orig
sudo nano /etc/bluetooth/rfcomm.conf
The first line just copies the file we are editing. In case things do not work out one can always revert back. Edit the rfcomm.conf file that it looks like this: Just change the address to the
address of your HC-05 module and set the comment to whatever you like.
# RFCOMM configuration file.
rfcomm0 {
# Automatically bind the device at startup
bind yes;
# Bluetooth address of the device
device 98:D3:31:b0:80:6C;
# RFCOMM channel for the connection
channel 1;
79
80