implementação de um oxímetro de pulso
Transcrição
implementação de um oxímetro de pulso
UNIVERSIDADE REGIONAL DE BLUMENAU CENTRO DE CIÊNCIAS EXATAS E NATURAIS CURSO DE CIÊNCIAS DA COMPUTAÇÃO – BACHARELADO IMPLEMENTAÇÃO DE UM OXÍMETRO DE PULSO LUÍS AUGUSTO SPRANGER BLUMENAU 2004 2004/1-26 LUÍS AUGUSTO SPRANGER IMPLEMENTAÇÃO DE UM OXÍMETRO DE PULSO Trabalho de Conclusão de Curso submetido à Universidade Regional de Blumenau para a obtenção dos créditos na disciplina Trabalho de Conclusão de Curso II do curso de Ciências da Computação — Bacharelado. Prof. Antonio Carlos Tavares BLUMENAU 2004 2004/1-26 IMPLEMENTAÇÃO DE UM OXÍMETRO DE PULSO Por LUÍS AUGUSTO SPRANGER Trabalho aprovado para obtenção dos créditos na disciplina de Trabalho de Conclusão de Curso II, pela banca examinadora formada por: Presidente: ______________________________________________________ Prof. Antonio Carlos Tavares, FURB Membro: ______________________________________________________ Prof. Miguel Alexandre Wisintainer, FURB Membro: ______________________________________________________ Prof. Francisco Adell Péricas, FURB Blumenau, dia de mês de 2004 AGRADECIMENTOS A Deus, pelo seu imenso amor e graça. À minha família e amigos, pelo apoio. Ao meu orientador, Antônio Carlos Tavares, por ter acreditado na conclusão deste trabalho e pelas inúmeras dicas e idéias. A Lúcio Bareta Todorov por me apresentar as tecnologias desenvolvidas na área médica e por me fornecer todo o material (componentes, módulos e livros) para o desenvolvimento do trabalho. RESUMO Este trabalho descreve como é feita a medição da saturação de oxigênio no sangue arterial, a oxímetria (SpO2). Descreve também o desenvolvimento do hardware e software de um protótipo de oxímetro de pulso. O trabalho mostra o diagrama em blocos e esquema elétrico do hardware que foi desenvolvido utilizando um módulo de oxímetria de pulso, um microcontrolador com arquitetura RISC e mostrador gráfico. No software do protótipo foi implementado um escalonador de tarefas que faz o controle da velocidade de apresentação dos dados no mostrador. São descritas ainda rotinas para geração de caracteres, comunicação serial com o módulo de oxímetria de pulso. Por fim são expostos os resultados obtidos com o protótipo. Palavras chaves: Microcontrolador; Equipamentos de Monitorização; Oxímetria. ABSTRACT This work describes how is determined the oxygen´s saturation in the arterial blood, the oximetry (SpO2). Describes the development of hardware and software of a pulse oximeter prototype. This work shows the block diagram and hardware´s schematic, using a RISC microcontroller and a graphic display. In the software´s prototype was programmed a task manager, this controls the speed of the data that is plot in the display. Other software routines are also described like character generator and serial communication with the pulse oximeter module. Key Words: Microcontroller; Monitoring Equipment; Oximetry. LISTA DE ILUSTRAÇÕES Figura 1 - Curva de absorção da HbO2 e Hb ............................................................................ 13 Figura 2 - Características de absorção da luz nos diversos componentes do sistema ..............14 Figura 3 - Oxímetria de pulso por sensor de transmissão ........................................................ 14 Figura 4 - Oxímetria de pulso por sensor de refletância........................................................... 15 Figura 5 - Forma de onda pletismográfica normal ................................................................... 15 Figura 6 - Diferentes tipos de probe......................................................................................... 18 Figura 7 - Pinos de conexão com o módulo de oxímetria de pulso.......................................... 19 Figura 8 - Pinagem do microcontrolador AT90S8515 com encapsulamento PLCC ............... 22 Figura 9 - Janela do compilador BASCOM-AVR.................................................................... 23 Figura 10 - Janela do PONYPROG.......................................................................................... 24 Figura 11 - Janela do EAGLE com o diagrama elétrico do protótipo......................................25 Figura 12 - Monitor 8100 do fabricante Criticare ....................................................................26 Figura 13 - Biomonitor 7 do fabricante BESE .........................................................................26 Figura 14 - Diagrama em blocos do hardware do protótipo .................................................... 29 Figura 15 - Esquema elétrico do protótipo ...............................................................................30 Figura 16 - Placa principal do protótipo...................................................................................31 Figura 17 - Fluxograma do escalonador ................................................................................... 32 Figura 18 - Interpretação dos dados fornecidos pelo módulo .................................................. 34 Figura 19 - Escrever leituras ou mensagens de erro.................................................................35 Figura 20 - Desenha a curva do pletismograma ....................................................................... 36 Figura 21 - Mapa de bits armazenado na EEPROM do microcontrolador...............................37 Figura 22 - Tela inicial do protótipo.........................................................................................38 Figura 23 - Tela de medição com mensagem de erro............................................................... 39 Figura 24 - Tela de medição mostrando os valores lidos ......................................................... 40 Figura 25 – Foto do protótipo realizando medição................................................................... 40 Quadro 1- Equação para o cálculo de SpO2 ............................................................................. 13 Quadro 2 - Protocolo do módulo de oxímetria de pulso........................................................... 20 Quadro 3 - Alguns microcontroladores AVR e suas características ........................................ 21 Quadro 4 – Código do escalonador de tarefas.......................................................................... 37 SUMÁRIO 1 INTRODUÇÃO....................................................................................................................9 1.1 OBJETIVOS DO TRABALHO ........................................................................................11 1.2 ESTRUTURA DO TRABALHO ......................................................................................11 2 FUNDAMENTAÇÃO TEÓRICA ....................................................................................12 2.1 OXÍMETRIA..................................................................................................................... 12 2.1.1 Motivos para o uso da oxímetria de pulso ...................................................................... 12 2.1.2 Princípios de funcionamento........................................................................................... 13 2.1.3 Interferências e fatores que prejudicam a leitura da oxímetria de pulso......................... 15 2.1.4 Condições fisiológicas .................................................................................................... 16 2.1.5 Condições técnicas .......................................................................................................... 17 2.1.6 Tipos de probe ................................................................................................................ 18 2.2 MÓDULO DE OXÍMETRIA DE PULSO MEDLAB EG 00302..................................... 19 2.2.1 Protocolo de comunicação .............................................................................................. 20 2.3 MICROCONTROLADOR AVR ......................................................................................20 2.3.1 Característica do microcontrolador AT90S8515 ............................................................ 21 2.3.2 Pinagem do microcontrolador AT90S8515 .................................................................... 21 2.4 FERRAMENTAS.............................................................................................................. 22 2.4.1 BASCOM-AVR ..............................................................................................................22 2.4.2 PONYPROG ................................................................................................................... 23 2.4.3 EAGLE............................................................................................................................ 24 2.5 TRABALHOS CORRELATOS E OXÍMETROS DE PULSO EXISTENTES NO MERCADO ....................................................................................................................... 25 3 DESENVOLVIMENTO DO TRABALHO .....................................................................28 3.1 REQUISITOS PRINCIPAIS DO PROBLEMA A SER TRABALHADO....................... 28 3.2 ESPECIFICAÇÃO DO HARDWARE ............................................................................... 28 3.2.1 DIAGRAMA EM BLOCOS E ESQUEMA ELÉTRICO DO HARDWARE.................. 28 3.3 IMPLEMENTAÇÃO DO HARDWARE ........................................................................... 30 3.4 ESPECIFICAÇÃO DO SOFTWARE ................................................................................ 31 3.4.1 Especificação do escalonador de tarefas ......................................................................... 32 3.4.2 As tarefas......................................................................................................................... 33 3.5 IMPLEMENTAÇÃO DO SOFTWARE ............................................................................ 36 3.5.1 Implementação do escalonador de tarefas....................................................................... 36 3.5.2 Implementação das tarefas .............................................................................................. 37 3.5.3 Geração de caracteres no mostrador gráfico ...................................................................37 3.6 OPERACIONALIDADE DA IMPLEMENTAÇÃO ........................................................ 38 3.7 RESULTADOS E DISCUSSÃO ......................................................................................41 4 CONCLUSÕES.................................................................................................................. 42 4.1 EXTENSÕES .................................................................................................................... 42 REFERÊNCIAS BIBLIOGRÁFICAS .................................................................................44 APÊNDICE A – Software do protótipo elaborado no BASCOM-AVR .................................. 45 9 1 INTRODUÇÃO O diagnóstico inicial do estado de saúde de um paciente determina os procedimentos que serão adotados para o seu atendimento. Estes procedimentos em casos mais críticos pode ser a internação do paciente na Unidade de Tratamento Intensivo (UTI) ou até levar a uma intervenção cirúrgica. Para o corpo clínico, estes locais devem apresentar condições necessárias ao bom desempenho de seu trabalho, ou seja, conforto, tranqüilidade e recursos materiais. Dentre estes recursos, os equipamentos de monitorização estão destinados a acompanhar constantemente a condição clínica do paciente (PAZ, 1996). De acordo com PAZ (1996), o uso desses equipamentos é muito comum, entre os quais se destacam: o oxímetro de pulso que monitora a saturação do sangue arterial periférico; o capnógrafo que faz a leitura do CO2 nos gases expirados durante o ciclo respiratório; o monitor cardíaco que mostra a atividade elétrica do músculo do coração; o monitor de pressão que faz a medida da pressão arterial; entre outros. A precisão e estabilidade do equipamento são de vital importância para evitar diagnósticos imprecisos da condição clínica do paciente. No mercado nacional, o oxímetro de pulso é um equipamento de monitorização com um custo muito elevado, existem poucos fabricantes e grande parte dos equipamentos vendidos é de origem estrangeira. Um fator que torna a construção de um equipamento de monitorização muito difícil são os sensores, necessários para converter os sinais vitais em grandezas elétricas. Este problema pode ser solucionado usando-se módulos no sistema OEM (Original Equipment Manufacturer). Estes módulos são compostos dos sensores e também de uma interface que converte os valores adquiridos nos sensores para uma forma numérica com sinais digitais, os quais podem ser interpretados por computadores ou microcontroladores. Grande parte dos equipamentos de monitorização como oxímetros de pulso e capnógrafos fazem uso de módulos, chamados de monitores multiparâmetros modulares, junto com plataformas bem conhecidas no mercado, como o hardware de um IBM-PC e um software desenvolvido para sistemas operacionais MS-Windows ou DOS. Isso faz com que esses equipamentos tenham um custo muitas vezes elevado e possam apresentar problemas de estabilidade no seu funcionamento devido ao uso de um hardware que é inadequado para essa aplicação. 10 Com a evolução tecnológica e redução no custo de fabricação de componentes eletrônicos, surgiram no mercado microcontroladores dos mais diversos fabricantes e com vários recursos. Pode-se comparar o desempenho de alguns microcontroladores com os microcomputadores usados há alguns anos atrás. A utilização destes microcontroladores em circuitos é muito vantajosa, pois podem ser programados para realizar várias tarefas específicas de acordo com a necessidade. Esses microcontroladores podem substituir o hardware do IBM-PC usado nos capnógrafos e outros equipamentos de monitorização existentes no mercado, fazendo com que o seu custo tenha uma redução considerável e que o software seja específico para a aplicação. No software do microcontrolador pode ser programado um sistema que permite que o microcontrolador execute mais do que um programa, nesse caso denominado tarefa ou processo. Este sistema, também chamado de núcleo, faz o gerenciamento destas tarefas dividindo o tempo de processamento do microcontrolador entre as tarefas que devem ser executadas, este tipo de processamento é denominado de multitarefa. As vantagens de microcontroladores com esse núcleo são evidentes considerando uma aplicação do mundo real. Dificilmente uma aplicação deste tipo consiste de apenas uma tarefa que é realizada dentro de um programa monolítico. Inclusive em aplicações pequenas, existem pelo menos duas ou mais tarefas que são processadas separadamente (BASIC, 2001). Se o conceito de multitarefa é usado em um programa, o risco de problemas com paradas indevidas pode ser reduzido e as rotinas de avaliação de processos e a interface com usuário podem ser separadas em diferentes tarefas (BASIC, 2001). Para implementar um protótipo de um equipamento de monitorização como um oxímetro de pulso, algumas tarefas podem ser identificadas como, por exemplo, leitura do módulo de oxímetria de pulso, e apresentação dos valores fornecidos pelo módulo para o usuário. Estas tarefas podem ser implementadas em um microcontrolador e este microcontrolador pode ser à base do hardware do equipamento de monitorização. O hardware em questão, juntamente com um software específico é uma solução para o problema de custo, plataforma de construção e estabilidade, sendo assim possível à construção de um equipamento de monitorização com microcontrolador multitarefa. 11 1.1 OBJETIVOS DO TRABALHO O objetivo deste trabalho é desenvolver o hardware e o software de um equipamento de monitorização, que faça a leitura da oxímetria de pulso, fazendo uso de um microcontrolador. Os objetivos específicos do trabalho são: a) fazer a leitura do módulo de oxímetria de pulso; b) descrever o protocolo utilizado na comunicação módulo/microcontrolador; c) apresentar os valores obtidos para o usuário; d) apresentar um protótipo incorporando hardware e software; e) realizar comparações com o protótipo apresentado e os oxímetros oferecidos no mercado. 1.2 ESTRUTURA DO TRABALHO Este trabalho apresenta um estudo da oxímetria de pulso e o desenvolvimento de um protótipo microcontrolado, onde foram desenvolvidos hardware e software. O trabalho está dividido em quatro capítulos, no primeiro capítulo é apresentada uma introdução sobre os assuntos que serão abordados. O segundo capítulo mostra o funcionamento e a utilidade da oxímetria de pulso na área médica. Ainda no segundo capítulo são mostrados assuntos referentes ao protótipo, como o módulo de oxímetria de pulso utilizado para o desenvolvimento, o seu protocolo de comunicação e características técnicas. Um estudo sobre o microcontrolador também é apresentado. Após isto alguns comentários sobre ferramentas que foram utilizadas no desenvolvimento do protótipo. Finalizando o segundo capítulo são apresentados alguns outros modelos de oxímetros de pulso existentes no mercado. O terceiro capítulo mostra o desenvolvimento do hardware do protótipo, o diagrama em blocos e circuito elétrico do protótipo, logo após a especificação e desenvolvimento do software. Uma demonstração do uso do equipamento também é apresentada no terceiro capítulo. No quarto e ultimo capítulo são apresentadas às conclusões, limitações e dificuldades encontradas, bem como as sugestões para trabalhos futuros. 12 2 FUNDAMENTAÇÃO TEÓRICA 2.1 OXÍMETRIA De acordo com PAZ (1996), o oxímetro de pulso é o equipamento eletromédico que monitora a saturação de oxigênio no sangue arterial (SpO2) de forma contínua, não invasíva e em tempo real. A oxímetria de pulso consiste em um probe (compartimento que contém o sensor) no corpo do paciente e este sensor está ligado a uma unidade computadorizada que informa os valores obtidos (FEARNLEY, 1995). Segundo FEARNLEY (1995) em pacientes normais, a leitura de SpO2 é superior a 95% e em pacientes com problemas respiratórios ou cardíacos este valor pode ser um pouco inferior. 2.1.1 Motivos para o uso da oxímetria de pulso “Não há dúvida que o oxímetro de pulso e um dos maiores avanços na monitoração de pacientes, e se espera que o seu uso se torne rotineiro durante anestesias e cirurgias no mundo inteiro” (FEARNLEY, 1995). Sua aplicação compreende: a) procedimento anestésico: indispensável para detecção de hipoxemia (diminuição do teor de oxigênio no sangue), que é a causa mais comum de acidentes fatais em anestesia; b) unidade de tratamento intensivo: onde condições clínicas podem levar a uma diminuição repentina no nível de oxigênio no sangue arterial, como por exemplo a hemorragia pulmonar; c) transporte de pacientes: ambulância, procedimentos de emergência e outros. De acordo com FEARNLEY (1995), oxímetros de pulso não informam o nível de CO2 que é expirado no ciclo respiratório, por isso não conseguem indicar os motivos de falha da respiração em pacientes que estão retendo CO2. Nesses casos é indicado o uso do oxímetro de pulso juntamente com um capnógrafo. 13 2.1.2 Princípios de funcionamento O princípio de funcionamento está baseado na medição do oxigênio (O2) associado a hemoglobina (Hb), encontrado em grande quantidade no sangue arterial. A porcentagem de SpO2 é dada pela equação apresentada no Quadro 1 (PAZ, 1996). Quadro 1- Equação para o cálculo de SpO2 A medição dos fatores da equação do Quadro 1 pode ser feita através da técnica da espectrometria. A hemoglobina saturada e a hemoglobina reduzida tem diferentes características de absorção nos comprimentos de onda da luz vermelha e luz infravermelha, como é mostrado na figura 1. Figura 1 - Curva de absorção da HbO2 e Hb Diodos emissores de luz (LED) produzem o vermelho (660nm), o infravermelho (940nm) e um fotodiodo recebe o sinal. A luz é transmitida através de um leito vascular 14 pulsátil, parte dessa luz é absorvida por cada constituinte do tecido. O único componente que possui absorção variável, é devido à pulsação arterial, o que pode ser visto na figura 2 (PAZ, 1996). Figura 2 - Características de absorção da luz nos diversos componentes do sistema Dois tipos de sensores são usados, o de transmissão e o de refletância. No de transmissão os dois diodos emissores ficam em oposição ao fotodiodo, como na figura 3 (PAZ, 1996). Figura 3 - Oxímetria de pulso por sensor de transmissão No de refletância os componentes óticos são posicionados lado a lado, sobre uma superfície plana que tenha um bom suprimento arterial, como a testa ou a têmpora. A luz emitida pelos LEDs passa pela região vascular e difundem-se dentro dela. O fotodetector recebe a quantidade de luz que retorna a superfície. 15 Figura 4 - Oxímetria de pulso por sensor de refletância O sensor de refletância e o de transmissão tem uso em locais específicos, dependendo da aplicação. O primeiro é posicionado na testa ou têmpora, e o segundo, nas mãos, pés, nariz ou orelha. O fotodetector recebe o sinal dos sensores, este sinal é filtrado e condicionado a níveis de tensão adequados e então convertidos da forma analógica para forma digital por um conversor A/D. O sinal digital é processado e então é apresentado em um visor. No leito vascular durante a sístole, como o pulso do sangue alcança o sensor, o vaso tem uma maior quantidade de volume sangüíneo, portanto, uma maior quantidade de luz será absorvida. Durante a diástole tem um menor volume sangüíneo, tendo assim uma menor quantidade de luz absorvida (PAZ, 1996). Estas variações de luz absorvidas têm uma forma de onda características que é chamada de forma de onda pletismográfica, conforme a figura 5 (PAZ, 1996). Figura 5 - Forma de onda pletismográfica normal 2.1.3 Interferências e fatores que prejudicam a leitura da oxímetria de pulso O oxímetro de pulso foi projetado para medir sinais de luz de baixa intensidade transmitidos através da pele, os fotodetectores nos sensores podem também ser afetados por 16 outras fontes de luz, tais como lâmpadas cirúrgicas, fluorescentes, incandescentes e luz do sol. No oxímetro de pulso, para minimizar o efeito da luz ambiente, o sistema de leitura e medição lê o nível de luz ambiente para depois ler o vermelho e o infravermelho, fazendo assim a compensação (PAZ, 1996). A prevenção de interferência de luz externa pode ser realizada envolvendo o probe com tecido escuro ou outro material opaco (PAZ, 1996). Os campos magnéticos dos equipamentos de Imagem por Ressonância Magnética (MRI), podem afetar a exatidão do oxímetro de pulso, e também a freqüência eletrônica do oxímetro de pulso pode interferir com a imagem do equipamento de MRI. Queimaduras têm sido relatadas no local do uso da probe no paciente, durante o uso de MRI, provavelmente resultante de altas correntes induzidas geradas pela unidade de MRI no cabo da probe (PAZ, 1996). Para evitar interferência a probe de oxímetro deve ficar o mais longe possível dos equipamentos eletrocirúrgicos. 2.1.4 Condições fisiológicas Anemia e pele levemente pigmentada podem complicar a detecção do sinal. Os fabricantes para prevenir este problema, usam luz suficientemente intensa, que atinja o fotodetector de maneira a se obter resultados mais exatos. Recomenda-se verificar o nível de hemoglobina e usar outros métodos de determinação do nível de oxigenação, como a gasometria. Em relação à baixa perfusão, o oxímetro de pulso necessita de um sinal de pulso adequado para fornecer a leitura de saturação e pulso. Muitos pacientes, que necessitam ser monitorizados, não têm bom fluxo sangüíneo em suas extremidades devido à doença vascular periférica, hipovolemia (redução do volume de sangue) ou hipotermia (temperatura do corpo abaixo do normal). Nestas situações, o oxímetro fornecerá informação intermitente ou não fornecerá nenhuma informação. Algumas alternativas são sugeridas para minimizar este efeito: a) assegurar que o pulso do paciente no local do sensor seja significativo para a exatidão do oxímetro. Isso pode ser realizado por testes em diversos locais do paciente até conseguir um pulso aceitável; b) escolha da probe correta, quando um pulso adequado não está presente nos pés ou nas mãos, pode-se colocar em uma região mais central do corpo, como nariz ou 17 orelha ou usar a oxímetria por refletância, colocando a probe na testa ou na têmpora; c) aquecer o local do sensor, em pacientes hipotérmicos principalmente, pode ser útil aplicar um tecido morno no local do sensor, antes da aplicação do mesmo, caso não haja contra-indicação clínica. 2.1.5 Condições técnicas Para melhorar a exatidão, variedades de probes têm sido desenvolvidas, para uso em diferentes locais do paciente e também em tamanho adulto pediátrico e neonatal. Os oxímetros de pulso têm um alto potencial de errar em baixas saturações (menor de 80%), uma vez que os fabricantes não podem induzir hipoxias severas, repetidamente em voluntários para calibrar seu equipamento (PAZ, 1996). Carboxihemoglobina (HbCO) e Metahemoglobina (MetHb) absorvem o vermelho e o infravermelho dos LEDs, como estas hemoglobinas não são computadas pelo equipamento, afetam a exatidão da medida. Quanto às interferências geradas devido ao movimento do paciente em relação à probe, os oxímetros de pulso foram inicialmente planejados para salas cirúrgicas onde os pacientes estão anestesiados. Atualmente também são usados em pacientes ativos e vários setores do hospital. A atividade do paciente principalmente no local da probe, cria dificuldade para monitorização. A interferência gerada pelo movimento pode aparecer na forma de onda pletismográfica, resultado em uma leitura de SpO2 inexata. Para minimizar o efeito gerado pelo movimento deve-se observar: a) aplicar o sensor em um local minimamente ativo do paciente; b) usar sensor apropriado, confortavelmente e de baixa massa. Por exemplo, uma probe adesiva permanece mais seguramente posicionada do que uma probe tipo clip. Unhas pintadas, artificiais ou não, podem causar inexatidão na leitura. As cores mais críticas são o azul, o verde, o marrom e o preto. No intuito de minimizar este problema deve ser removida a pintura ou escolhido outro local (PAZ, 1996). Inspecionar o local do paciente onde está colocado a probe, que pode causar irritação na pele. Se detectada, trocar a probe de local. Realizar inspeções periódicas. 18 A utilização do oxímetro de pulso com a medição de pressão não invasíva, deve ser realizada com a colocação da probe no dedo oposto ao lado usado para a medida de pressão arterial. Se o sinal é fraco ou erro de luz insuficiente ocorre, deve-se observar: a) limpe a probe e o local do paciente com álcool; b) reposicione a probe até que a luz dos LEDs esteja diretamente em oposição com o fotodetector; c) remova a pintura das unhas ou remova as unhas artificiais; d) tente um lugar diferente; e) tente uma probe diferente ou um tipo de probe diferente. 2.1.6 Tipos de probe Existem vários tipos de probe, alguns exemplos podem ser vistos na figura 6 (MEDLAB, 1998). Figura 6 - Diferentes tipos de probe 19 2.2 MÓDULO DE OXÍMETRIA DE PULSO MEDLAB EG 00302 Segundo MEDLAB (1998), o módulo de oxímetria de pulso EG 00302 utiliza um algoritmo chamado “onda de pulso cheio”. Isto significa que a cada pulso reconhecido, um valor de SpO2 é calculado e então processado. A cada pulso os valores da leitura são enviados ao host. O módulo é conectado ao host por uma interface serial padrão RS-232, mais detalhes sobre este padrão podem ser encontrados em AXELSON (1998). O módulo é capaz de ler de 30% até 100% de SpO2 e de 30 até 250 batimentos cardíacos por minuto (pulso) (MEDLAB, 1998). De acordo com MEDLAB (1998), a precisão do módulo depende da leitura do valor de SpO2, quanto mais alto o valor de SpO2, menor é o erro: a) valor de SpO2 variando de 90% até 100%: erro na leitura de 1%; b) valor de SpO2 variando de 80% até 89%: erro na leitura de 2%; c) valor de SpO2 variando de 65% até 79%: erro na leitura de 3%; d) valor de SpO2 abaixo de 65%: erro não especificado. Os pinos para conexão com o módulo podem ser vistos na figura 7. São conectados apenas os pinos de alimentação e o pino TX, pois o módulo apenas envia dados, os outros sete pinos ficam sem conexão. Figura 7 - Pinos de conexão com o módulo de oxímetria de pulso 20 2.2.1 Protocolo de comunicação O módulo apenas envia dados para o host, a velocidade da comunicação é de 9600 bps com 8 bits de dados e 1 bit de parada. Os valores para o desenho da curva pletismográfica são enviados constantemente variando de 50 a 100 bytes por segundo. Estes valores variam de 0 a 127, isto significa que o bit mais significativo está em zero. Valores maiores que 127 são usados para bytes de marcação, conforme o quadro 2. Quadro 2 - Protocolo do módulo de oxímetria de pulso A cada pulso identificado no paciente o módulo manda uma seqüência com os bytes de marcação, informado o valor de SpO2, pulso, informações do módulo e qualidade do sinal, conforme o quadro 2. Enquanto o pulso do paciente não é detectado o módulo envia dados para o desenho da curva pletismográfica. Como pode ser visto no quadro 2, após o byte de marcação 248 todos os bytes seguintes se referem ao desenho da curva, quando o módulo envia o byte 249, o byte seguinte é o valor de SpO2, então se o módulo envia o byte 97, isto significa que o valor de SpO2 é de 97%, e esta regra se repete para os outros bytes de marcação, que são 250, 251 e 252. 2.3 MICROCONTROLADOR AVR De acordo com ATMEL (2004), a família AVR de microcontroladores foi criada em 1993, são microcontroladores RISC de 8 bits com memória flash de programa. A família 21 AVR é composta de vários modelos de microcontroladores variando de tamanho da memória, pinos de entrada e saída, periféricos e velocidade de funcionamento. No quadro 3 são apresentados alguns modelos de microcontroladores da família AVR com suas características, inclusive o microcontrolador AT90S8515 que é utilizado na montagem do protótipo. Flash EEPROM SRAM Pinos F.Max Timers de Timers de Microcontrolador (Kbytes) (Kbytes) (bytes) I/O (MHz) Vcc (V) 16-bits 8-bits UART AT90S1200 1 0.0625 15 12 2.7-6.0 0 1 0 AT90S2313 2 0.125 128 15 10 2.7-6.0 1 1 1 8 0.5 512 32 8 4.5-5.5 1 1 1 AT90S8515 ATmega162 16 0.5 1024 35 16 4.5-5.5 2 2 2 ATmega32 32 1 2048 32 16 4.0-5.5 1 2 1 ATmega48 4 0.256 512 23 20 1.8-5.5 1 2 1 ATmega128 128 4 4096 53 16 4.5-5.5 2 2 2 Quadro 3 - Alguns microcontroladores AVR e suas características 2.3.1 Característica do microcontrolador AT90S8515 Entre as características mais relevantes citadas na folha de dados do microcontrolador (AT90S8515, 2004) tem-se: a) utiliza arquitetura RISC; b) 118 instruções (a maioria executada em um ciclo de clock); c) 32 registradores de 8 bits para uso geral; d) velocidade de 8 MIPS (milhões de instruções por segundo) com clock de 8 MHz; e) 8 Kb de memória FLASH para programa; f) 512 bytes de memória RAM e 512 bytes de memória EEPROM; g) 1 contador de 8 bits e 1 contador de 16 bits; h) UART para comunicação serial; i) 32 portas de entrada e saída; j) baixo consumo (3mA em modo ativo a 8 MHz com alimentação de 3V). 2.3.2 Pinagem do microcontrolador AT90S8515 O microcontrolador AT90S8515 está disponível em vários tipos de encapsulamento, o encapsulamento escolhido para o desenvolvimento do protótipo foi o PLCC, pois algumas 22 peças deste microcontrolador com este encapsulamento já estavam disponíveis pelo autor do TCC. Na figura 8 podem ser vistos os pinos do microcontrolador, entre eles temos os pinos das portas (PA, PB, PC e PD), os pinos de ligação com o cristal oscilador (XTAL1 e XTAL2), pinos de alimentação, reset e entre outros. Figura 8 - Pinagem do microcontrolador AT90S8515 com encapsulamento PLCC 2.4 FERRAMENTAS Varias ferramentas foram utilizadas para o desenvolvimento do trabalho, entre as principais temos o compilador BASCOM-AVR (MCS, 2004) para desenvolver o software do microcontrolador, o PONYPROG (LANCONELLI, 2004) para programar a memória FLASH e EEPROM do microcontrolador e o editor de diagramas e circuitos EAGLE (CADSOFT, 2004). 2.4.1 BASCOM-AVR O software do protótipo foi desenvolvido com o compilador BASCOM-AVR, que é um software de utilização simplificada, a interface é bem dinâmica e as instruções BASIC 23 facilitam muito a programação. O compilador gera arquivos no formato HEX para serem gravado diretamente no microcontrolador. Na figura 9 é apresentada a tela principal do BASCOM-AVR, na parte superior botões para ativar a simulação, compilação e outras funções. No centro da janela é escrito o programa em BASIC. Figura 9 - Janela do compilador BASCOM-AVR 2.4.2 PONYPROG O software PONYPROG é capaz de gravar grande parte de dispositivos que possuem memória serial como: microcontroladores, memórias, cartões de memória entre outros. O PONYPROG já abre o arquivo HEX que é gerado pelo BASCOM-AVR permitindo a gravação do programa direto no microcontrolador com um hardware específico. O projeto do hardware pra a gravação do microcontrolador está disponível em LANCONELLI (2004). A janela do programa PONYPROG pode ser vista na figura 10. 24 Figura 10 - Janela do PONYPROG 2.4.3 EAGLE O editor de diagramas EAGLE permite desenhar tanto o diagrama elétrico do circuito como também a própria placa de circuito impresso que é gerada automaticamente a partir do diagrama elétrico que foi desenhado. O EAGLE possui uma vasta biblioteca de componentes, inclusive todos os componentes que foram utilizados para montagem do protótipo. Na figura 11 é apresentada a janela do EAGLE, no lado esquerdo temos ferramentas que ajudam no desenho e na parte superior botões para controle de tamanho, opções de arquivo entre outras funções. 25 Figura 11 - Janela do EAGLE com o diagrama elétrico do protótipo 2.5 TRABALHOS CORRELATOS E OXÍMETROS DE PULSO EXISTENTES NO MERCADO Para o desenvolvimento do protótipo deste trabalho foram utilizados como referência outros dois equipamentos. Estes equipamentos são: o Monitor 8100, fabricado pela Criticare Systems Inc. (CRITICARE, 2000) que é visto na figura 12 e o Biomonitor 7 fabricado pela BESE (CHIESA, 2000) na figura 13. 26 Figura 12 - Monitor 8100 do fabricante Criticare O Biomonitor 7 apresentado na figura 13 já não é mais fabricado pois a empresa que o fabrica já não atua mais no mercado, por isto não foi possível encontrar um manual técnico com mais informações. Figura 13 - Biomonitor 7 do fabricante BESE Tanto o Monitor 8100 e o Biomonitor 7 são monitores multiparâmetros, medem a oxímetria de pulso e outros sinais vitais em um único equipamento. Os sinais vitais que o 27 Monitor 8100 fornece são: oxímetria de pulso, ECG (eletrocardiograma ou EKG), NIBP (pressão arterial não invasíva), capnografia (medição de CO2) e monitorização de O2 (CRITICARE, 2000). E os sinais vitais que o Biomonitor 7 fornece são: oxímetria de pulso, ECG, NIPB, temperatura, pressão invasíva, débito cardíaco e capnografia. De acordo com CRITICARE (2000) o Monitor 8100 utiliza um método que suprime circuitos analógicos para fazer o tratamento do sinal da oxímetria de pulso, todo o processamento é feito de forma digital, este método resulta na redução de ruídos gerados pelos componentes do circuito. Este método também permite obter um sinal mais nítido e um melhor desempenho em sinal de baixa perfusão. Os dois monitores foram utilizados como referência, no que diz respeito à velocidade com que o pletismograma é desenhado, também foram utilizados para os testes finais, onde os resultados obtidos com o protótipo foram comparados com os resultados mo apresentados pelos monitores. Não foram encontrados trabalhos sobre desenvolvimento ou implementação de equipamentos de monitorização utilizando microcontroladores, apenas trabalhos alguns trabalhos descrevendo o processo de medição dos sinais vitais. 28 3 DESENVOLVIMENTO DO TRABALHO De acordo com o que foi apresentado na introdução e objetivos do trabalho, foi desenvolvido o hardware e software de um protótipo de oxímetro de pulso. O presente capítulo trata da especificação e implementação deste protótipo. 3.1 REQUISITOS PRINCIPAIS DO PROBLEMA A SER TRABALHADO Deve-se fazer a comunicação com o módulo de oxímetria de pulso e o tratamento destes dados de acordo com o protocolo de comunicação apresentado. A medição da oxímetria de pulso deve ser apresentada de forma gráfica para facilitar a visualização e detectar possíveis problemas com o paciente. Os valores numéricos também devem ser apresentados ao usuário do protótipo. Possíveis falhas no módulo ou na utilização, como falta do sensor, ou mal posicionamento do probe também devem ser apresentados ao usuário do protótipo. Como o módulo informa a qualidade do sinal que está sendo processado, esta informação também deve ser apresentada no mostrador do protótipo. Cada ponto da curva deve ser desenhado em uma velocidade constante, não importando se o sinal é inválido, ou se existe alguma falha com o sensor, ou falha no probe. Se o sinal é inválido a curva do pletismograma é desenhada de forma incorreta, isso facilita a visualização de algum erro que deve ser rapidamente corrigido, por isto mesmo sinais inválidos também são desenhados. 3.2 ESPECIFICAÇÃO DO HARDWARE O propósito deste protótipo é apresentar a medição da oxímetria de pulso graficamente em um mostrador de cristal líquido, utilizando um módulo de oxímetria de pulso e um microcontrolador para reduzir o tamanho físico e o custo do equipamento. Foram desenhados um diagrama em blocos e o esquema elétrico do hardware. O software foi especificado com fluxogramas e diagramas de transição de estados. 3.2.1 DIAGRAMA EM BLOCOS E ESQUEMA ELÉTRICO DO HARDWARE O hardware do protótipo é baseado no microcontrolador AT90S8515 do fabricante ATMEL. O diagrama em blocos é apresentado na figura 14. No diagrama podem ser vistos os 29 principais blocos que compõem o circuito, entre eles: o módulo de oxímetria de pulso, a interface serial utilizando o microcontrolador, o mostrador gráfico e a fonte de alimentação que fornece –18V para o funcionamento do mostrador gráfico e +5V também para o mostrador e para o restante do circuito. Figura 14 - Diagrama em blocos do hardware do protótipo O circuito elétrico é mostrado na figura 15, nele podemos observar as conexões do microcontrolador ao mostrador gráfico, a interface serial utilizando o circuito MAX232 para condicionamento dos níveis elétricos deste tipo de interface, o conector com o módulo de oxímetria de pulso e ainda quatro LEDs que foram colocados para o acompanhamento da execução do programa pelo microcontrolador. 30 Figura 15 - Esquema elétrico do protótipo 3.3 IMPLEMENTAÇÃO DO HARDWARE O hardware do protótipo foi montado em uma placa universal, podendo ser vista na figura 16. O módulo de oxímetria de pulso é conectado a placa por três fios, como descrito no esquema elétrico. Na placa principal foram montados o microcontrolador e a interface serial, bem como os pinos para conexão com o mostrador e alimentação do circuito. Como pode ser visto na figura 16, na placa do protótipo existem ainda alguns outros soquetes para circuitos integrados que foram utilizados em testes com o microcontrolador no inicio do desenvolvimento do protótipo. Posteriormente estes circuitos integrados não foram mais utilizados para o desenvolvimento do protótipo. 31 Figura 16 - Placa principal do protótipo 3.4 ESPECIFICAÇÃO DO SOFTWARE O protótipo deve apresentar os valores da medição da oxímetria no mostrador gráfico, bem como a curva pletismográfica. Esta curva deve ser desenhada de forma constante, não importando a qualidade do sinal ou possíveis falhas com o probe ou desconexão do probe do circuito. As eventuais falhas devem ser indicadas na parte superior do mostrador gráfico. Como a curva deve ser desenhada de forma constante, e nem sempre o módulo envia os dados de forma constante, optou-se por dividir as atividades que devem ser realizadas em três pequenas tarefas, estas três tarefas são: a) interpretar os dados do módulo de oxímetria de pulso; b) escrever os valores lidos ou apresentar mensagens de erro; c) desenhar a curva pletismográfica. 32 3.4.1 Especificação do escalonador de tarefas Como o protótipo irá executar três tarefas, foi feita a especificação de um escalonador de tarefas, para que ele seja chamado em tempos regulares, este escalonado é chamado a cada interrupção por estouro do TIMER no microcontrolador. Verificando a folha de dados do microcontrolador, constatou-se que, utilizando o prescaler em 1 no TIMER, a curva seria desenhada de forma muito rápida, não sendo possível a visualização da mesma. Por isto foi especificado que o escalonador que a cada duas chamadas de interrupção a tarefa de desenhar a curva é acionada (aprox. 65ms). Como a apresentação da situação de erro ou os valores de SpO2, pulso e qualidade de sinal não precisam ser apresentados no mostrador na mesma velocidade com que a curva é desenhada, estas rotinas são acionadas a cada 10 chamadas do escalonador (aprox. 330ms). O fluxograma do escalonador de tarefas é apresentado na figura 17, utiliza uma variável, chamada de “Contaescalonador” para fazer o controle de chamas de tarefas. Inicio Contaescalonador = Contaescalonador + 1 (resto da divisão de Contaescalonador por 2) = 0 Sim Chama tarefa DesenhaCurva Não (resto da divisão de Contaescalonador por 10) = 0 Sim Chama tarefa Escreve Leitura Não Fim Figura 17 - Fluxograma do escalonador 33 3.4.2 As tarefas A principal tarefa que deve ser executada é a interpretação dos dados do módulo, o fluxograma para esta tarefa é mostrado na figura 18. Constantemente é chamada uma rotina que aguarda um novo byte, quando algum byte está disponível na entrada serial ela é armazenada em uma variável chamada de “DadoSerial”. A especificação desta rotina segue a descrição do protocolo de comunicação descrito na seção 2.2.1. Os valores obtidos são armazenados em variáveis públicas, são elas: “LeituraSpO2”, “LeituraPulso”, “LeituraInfo”, “LeituraQualidade” e “LeituraGrafico”, estas variáveis são posteriormente utilizadas pelas outras tarefas. A tarefa de interpretação do protocolo do módulo é a única tarefa que não é chamada a partir do escalonador de tarefas, pois a sua execução não depende do tempo e sim dos dados disponibilizados pelo módulo. O fluxograma da tarefa que escreve os valores no mostrador, é apresentado na figura 19. Esta tarefa faz uso das variáveis públicas que são definidas pela tarefa de interpretar os dados do módulo. O valor de “LeituraInfo” é analisado se ele for zero, ou seja o sinal esta sem erros, são apresentados na parte superior do mostrador os valores de SpO2, pulso e qualidade do sinal, caso o valor de “LeituraInfo” não seja zero, o erro correspondente é apresentado no mostrador. A última tarefa é a tarefa que é chamada com mais freqüência, é a tarefa que desenha a curva pletismográfica, o fluxograma é encontrado na figura 20. Esta tarefa faz o controle de uma variável que indica que posição do eixo X será desenhada a nova linha do pletismograma, se este valor for superior a 128 ele é zerado pois o mostrador só tem capacidade para 128 pontos no sentido horizontal. O valor para o desenho da linha do gráfico está em “LeituraGrafico”, este valor também é atualizado pela tarefa de interpretação dos dados do módulo. 34 Inicio Aguarda um byte da porta serial e armazena em DadoSerial DadoSerial = 248 Sim Aguarda um byte da porta serial e armazena em DadoSerial Não Não DadoSerial < 240 Sim Armazena DadoSerial em LeituraGrafico Aguarda um byte da porta serial e armazena em DadoSerial DadoSerial = 249 Sim Aguarda um byte da porta serial e armazena em DadoSerial Armazena DadoSerial em LeituraSpo2 Não DadoSerial = 250 Sim Aguarda um byte da porta serial e armazena em DadoSerial Armazena DadoSerial em LeituraPulso Não DadoSerial = 251 Sim Aguarda um byte da porta serial e armazena em DadoSerial Armazena DadoSerial em LeituraInfo Não DadoSerial = 252 Sim Aguarda um byte da porta serial e armazena em DadoSerial Armazena DadoSerial em LeituraQualidade Não Figura 18 - Interpretação dos dados fornecidos pelo módulo 35 Inicio LeituraInfo = 0 Sim Escreve LeituraSpO2 Não Escreve LeituraPulso Escreve Qualidade 0 LeituraQualidade > 6 Sim Escreve Qualidade 0 Não LeituraQualidade > 4 Sim Escreve Qualidade 1 Não LeituraQualidade > 2 Sim Escreve Qualidade 2 Não LeituraQualidade > 1 Sim Escreve Qualidade 3 Não Escreve Qualidade 4 LeituraInfo = 1 Sim Escreve "SENSOR DESCONECTADO" Não LeituraInfo = 2 Sim Escreve "PACIENTE DESCONECTADO" Não LeituraInfo = 3 Sim Escreve "BAIXA PERFUSAO" Nâo Fim Figura 19 - Escrever leituras ou mensagens de erro 36 Inicio PosicaoAtual = Posicao Atual + 1 PosicaoAtual > 128 Sim PosicaoAtual =0 Não Preenche os bytes na de acordo com o valor de LeituraGrafico Fim Figura 20 - Desenha a curva do pletismograma 3.5 IMPLEMENTAÇÃO DO SOFTWARE O software do protótipo foi desenvolvido em linguagem BASIC e compilado no compilador BASCOM-AVR, mais detalhes na seção 2.4.1. A memória FLASH e EEPROM do microcontrolador foram programadas utilizando o PONYPROG, mais detalhes na seção 2.4.2. 3.5.1 Implementação do escalonador de tarefas Como especificado na seção 3.4.1, foi desenvolvido um escalonador de tarefas, que é chamado em tempos regulares, através da interrupção por estouro do TIMER do microcontrolador. A implementação da rotina do escalonador pode ser encontrada no quadro 4. 37 Quadro 4 – Código do escalonador de tarefas 3.5.2 Implementação das tarefas Todas as tarefas foram implementadas conforme descritas na especificação, que pode ser vista na seção 3.4.2. A implementação das tarefas pode ser encontrada no Apêndice. 3.5.3 Geração de caracteres no mostrador gráfico Como o mostrador gráfico utilizado no desenvolvimento do protótipo não possui gerador de caracteres próprio, foram escritas rotinas de geração de caracteres. Para isso fez se necessário à criação de uma tabela de caracteres. Esta tabela foi desenhada em um programa de edição gráfica e gravada na EEPROM do microcontrolador e pode ser vista na figura 21. Figura 21 - Mapa de bits armazenado na EEPROM do microcontrolador Esta tabela é baseada na tabela ASCII, sendo que começa com o caractere “espaço”, que é representado pelo byte 32 e vai até o byte 90 que representa a letra Z, ainda foi adicionado mais um caractere que está na última posição e não é do padrão ASCII, que é a cedilha “Ç”. Cada caractere ocupa 5 bytes, ou seja o caractere tem 5 pontos de largura por 8 pontos de altura, como a tabela do protótipo tem 60 caracteres, a tabela ocupa 300 bytes da memória EEPROM do microcontrolador. Quando ocorre a chamada a rotina de escrever algum 38 caractere, este caractere é convertido em um numero correspondente da tabela ASCII, deste número é subtraído o valor 32, posteriormente o número é multiplicado por 5, com isto tem-se a posição exata no mapa de bits do caractere que será desenhado. Com isto os próximos 5 bytes são apenas copiados da memória EEPROM para a memória do mostrador gráfico. A rotina pode ser encontrada no Apêndice A, onde está descrito o software desenvolvido para o protótipo. 3.6 OPERACIONALIDADE DA IMPLEMENTAÇÃO A utilização do protótipo é simples, basta alimentar o circuito e o protótipo está pronto para o uso. Ao ligar o protótipo, é mostrada uma tela de apresentação como na figura 22. Figura 22 - Tela inicial do protótipo A tela da figura 22 á apresentada por aproximadamente 2 segundos, após este período é apresentada a tela de leituras. Caso exista algum erro, este erro é apresentado na parte superior do mostrador, figura 23, nesta mesma figura pode-se observar que a curva do pletismograma toma uma forma reta da metade até o lado direito indicando falha na leitura. 39 Figura 23 - Tela de medição com mensagem de erro Caso não existam erros os valores de leitura são apresentados juntamente com a curva pletismográfica, como na figura 24. Nesta figura podemos ver ainda que no canto direito superior é apresentada a qualidade do sinal, a qualidade é representada de acordo com a quantidade de caracteres “>”: quatro caracteres “>” representam um sinal ótimo e a ausência de caracteres “>”, representam um sinal ruim. 40 Figura 24 - Tela de medição mostrando os valores lidos As leituras de SpO2, pulso e qualidade do sinal são informadas na parte superior do mostrador, na figura 25 é apresentada uma foto do protótipo em funcionamento, onde os valores da leitura podem ser vistos na parte superior do mostrador. Figura 25 – Foto do protótipo realizando medição 41 3.7 RESULTADOS E DISCUSSÃO O protótipo foi comparado com monitores multiparâmetros, ou seja, medem mais sinais vitais do que apenas a oxímetria de pulso. Estes monitores foram apresentados na seção 2.5. Os resultados obtidos com o equipamento foram similares a equipamentos originais, mesmo porque é o módulo que apresenta os resultados do pletismograma e os valores de SpO2 e pulso, o protótipo apenas faz a comunicação com o módulo. Em comparação com outros dois equipamentos o protótipo apresentou os mesmos valores de medição. Junto com a medição da oxímetria de pulso também é importante que seja feita a medição da capnografia que é a medição da quantidade expirada de CO2 no ciclo respiratório e o ECG. Os outros equipamentos também possuem mais recursos, como: alarmes, configuração dos mesmos, armazenamento em memórias externas e linhas de tendência. Estes recursos não foram implementados, pois não eram os objetivos deste trabalho. Tanto o Monitor 8100 da Criticare e o Biomonitor 7 da BESE apresentam ainda uma saída serial para impressora, o que é muito importante em casos de pacientes mais críticos. 42 4 CONCLUSÕES A proposta inicial do trabalho, era a construção de um capnógrafo, mas o módulo OEM de capnografia que estava sendo utilizado apresentou problemas de funcionamento. Por questões de tempo, o conserto deste módulo ficou inviável, por isso optou-se pela construção de um monitor de outro sinal vital igualmente importante sob o ponto de vista médico, a oxímetria de pulso. Como o funcionamento dos dois tipos de equipamento é igual, os objetivos do trabalho inicial de capnografia ficaram inalterados para o trabalho com oxímetria de pulso. Os principais objetivos do trabalho foram alcançados como a leitura do módulo de oxímetria de pulso, estudo do protocolo de comunicação, a apresentação dos dados obtidos do módulo para o usuário e a montagem de um protótipo desenvolvendo o seu hardware e software. A construção de equipamentos de monitorização com microcontroladores é possível, como foi demonstrado neste trabalho. A divisão das atividades em tarefas, utilizando as interrupções do microcontrolador também apresentou resultados muito satisfatórios em relação a outros tipos de programação. A principal vantagem do protótipo é o baixo custo do equipamento, considerando que foi montado com componentes comuns de custo baixo. O tamanho físico reduzido do protótipo também é uma vantagem, se a alimentação for fornecida por baterias pode ser montado um equipamento portátil. O software específico para função também se mostrou bastante estável. A principal limitação do aparelho deve-se ao fato da falta de integração com a capnografia e ECG, a falta de recursos especiais como alarmes, gravação de logs, em alguns casos o tamanho reduzido do mostrador gráfico também pode ser prejudicial, pois o corpo clínico não consegue ver claramente as informações apresentas a uma distância muito grande. 4.1 EXTENSÕES A principal sugestão é transformar o protótipo do oxímetro de pulso em um monitor multiparâmetros, os primeiros sinais que deveriam ser acrescidos seriam os de capnografia e ECG. Estes sinais também podem ser medidos com módulos OEM. 43 Outra sugestão é a adição de alarmes para utilização do protótipo em situações mais críticas e por fim a adição de memória externa para fazer a gravação de logs. Por fim, a troca do mostrador que é monocromático por um mostrador com tons de cinza ou colorido com dimensões maiores também é interessante. 44 REFERÊNCIAS BIBLIOGRÁFICAS ATMEL Corporation, AVR 8-Bit RISC Overview. San Jose CA, USA, 2004. Disponível em: <www.atmel.com/products/AVR/overview.asp>. Acesso em: 19 mar. 2004. AT90S8515, ATMEL Corporation, Datasheet. San Jose CA, USA, 2004. Disponível em: <www.atmel.com/dyn/resources/prod_documents/1041S.PDF>. Acesso em: 19 mar. 2004. AXELSON, Jan, Serial Port Complete. Chicago, USA: Independent Publishers Group, 1998; BASIC Tiger, Hardware manual. Aachen, Alemanha: Wilke Technology GmbH, 2001. Disponível em: <www.wilke-tecnology.com>. Acesso em: 20 jun. 2004. CADSOFT, Home of the EAGLE Layout Editor. Delray Beach FL, USA, 2004. Disponível em: <www.cadosftusa.com>. Acesso em: 19 mar. 2004. CHIESA, João Borloth, Biomonitor 7. Rio de Janeiro, 2000. Disponível em: <www.joao.eng.br/bio7.htm>. Acesso em: 20 jun. 2004. CRITICARE Systems, Manual do Operador do Modelo 8100, Waukesha WI, USA: Criticare Systems Inc, 2000. FEARNLEY, Dr. SJ, Pulse Oximetry. Torquay, Inglaterra: Department of Anaesthetics, Torbay Hospital, 1995. Disponível em: <www.nda.ox.ac.uk/wfsa/html/u05/u05_003.htm>. Acesso em: 20 jun. 2004. MEDLAB GmbH, Pulse Oximeter OEM board EG 00302. Karlsruhe, Alemanha, 1998. Disponível em: < http://www.medlab-gmbh.de/english/downloads/eg00302.pdf >. Acesso em: 19 mar. 2004. MCS Electronics, BASCOM AVR. Zaandam, Holanda, 2004. Disponível em: <www.mcselec.com/bascom-avr.htm >. Acesso em: 19 mar. 2004. LANCONELLI, Cláudio, Lancos Homepage. Lugo, Itália, 2004. Disponível em: <www.lancos.com>. Acesso em: 19 mar 2004. PAZ, Mário Augusto Silva Segurança em equipamentos de monitorização em sala cirúrgica e UTI oxímetro de pulso, capnógrafo, monitor cardíaco, e monitor de pressão não invasivo. 1996. 62 f. Monografia (Pós Graduação em Engenharia Elétrica) – Universidade Federal de Santa Catarina, Florianópolis. TANENBAUM Andrew S. Sistemas operacionais modernos. Rio de Janeiro: LTC, 1999. 45 APÊNDICE A – Software do protótipo elaborado no BASCOM-AVR ' ' ' ' ' ---------------------------------------------------------------------------Capnografo digital Autor : Luis Augusto Spranger BCC-FURB ---------------------------------------------------------------------------- $crystal = 8000000 $baud = 9600 ' Define cristal ' Velocidade da porta serial Config Serialin = Buffered , Size = 255 buffer circular de 255 bytes na memoria RAM ' A UART é buferizada com um Config Timer1 = Timer , Prescale = 1 On Ovf1 Escalonador estouro ' Configura escalonador de tarefas ' Quando houver interrupção por Declare Declare Declare Declare Sub Sub Sub Sub Lcdenable Setlcdcs1 Setlcdcs2 Setlcdon Dim Endereco As Integer externa Dim H As Byte Dim L As Byte Dim W As Byte memoria externa Dim Mostrastring As String * 25 a funcao Escrevstring Dim Tempmostrastring As String * 1 Dim Nmostrastring As Byte escritos por Escrevestring Dim Tempa As Byte Dim Tempc As Byte Escrevestring Dim Tempe As Byte Dim Enderecoeeprom As Integer caracteres Dim Cx As Byte caracteres Dim Cy As Byte caracteres Dim C As Byte mostrador Dim I As Byte de caracteres Dim J As Byte de caracteres ' Endereco de gravaçao na memoria ' Enderecamento da memoria externa ' Enderecamento da memoria externa ' Byte de escrita ou leitura da ' String que sera apresentada com ' Utilizado na funcao Mostrastring ' Numero de caracteres que sao ' Utilizado na funcao ' Utilizado por Escrevstring ' Endereco de busca do mapa de ' Posicao para escrever os ' Posicao para escrever os ' Caracter que será escrito no ' Controle do mostrador e escrita ' COntrole do mostrador e escrita Dim Flagdisplay As Bit de limpeza e escrita no mostrador ' Utilizado para acelerar rotina Dim Posicaoatual As Byte mostrador ' Posicao de desenho do grafico no Dim Leiturapulso As Byte Dim Leituraspo2 As Byte Dim Leiturainfo As Byte Dim Leituraqualidade As Byte Dim Leituragrafico As Byte Dim Contaescalonador As Byte tarefas Dim DadoSerial As Byte ' Contados para o escalonador de ' Entrada do buffer serial ' ---------------------------------------------------------------------------' Configura portas e inicializa ' ---------------------------------------------------------------------------Rotinainicial: Posicaoatual = 0 Contaescalonador = 0 Config Config Config Config Porta Portb Portc Portd = = = = Output Output Output Output 46 Led1 Alias Portc.2 das tarefas Led2 Alias Portc.3 Led3 Alias Portc.4 Led4 Alias Portc.5 ' Leds para acompanhar a execução Glcdrs Alias Portd.2 Glcdrw Alias Portd.3 Glcde Alias Portd.4 Glcdreset Alias Portd.5 Glcdcs1 Alias Portc.0 Glcdcs2 Alias Portc.1 Call Setlcdcs1 Call Setlcdon Call Setlcdcs2 Call Setlcdon ' ---------------------------------------------------------------------------' Tela de inicialização ' ---------------------------------------------------------------------------Gosub Limpadisplay Cx = 0 Cy = 2 Nmostrastring = 23 Mostrastring = "PROTOTIPO DE OXIMETRO" Gosub Escrevestring Cx = 1 Cy = 4 Nmostrastring = 16 Mostrastring = "DE PULSO DIGITAL" Gosub Escrevestring Cx = 3 Cy = 2 Nmostrastring = 21 Mostrastring = "LUIS AUGUSTO SPRANGER" Gosub Escrevestring Cx = 5 Cy = 2 Nmostrastring = 21 Mostrastring = "TRABALHO DE CONCLUSAO" Gosub Escrevestring Cx = 6 Cy = 4 Nmostrastring = 17 Mostrastring = "DO CURSO BCC-FURB" Gosub Escrevestring Cx = 7 Cy = 7 Nmostrastring = 11 Mostrastring = "JUNHO Gosub Escrevestring 2004" Wait 2 Gosub Limpadisplay Enable Timer1 Enable Interrupts Do Gosub Esperaentrada 'DADOSERIAL é o proximo byte que dese ver processado ' Byte de controle indicando que os proximos bytes sao do desenho dDadoSerial curva If DADOSERIAL = 248 Then Gosub Esperaentrada 47 While DADOSERIAL < 240 Leituragrafico = DADOSERIAL \ 5 Gosub Esperaentrada Wend End If ' Byte de controle indicando que o proximo byte é o valor de SpO2 If DADOSERIAL = 249 Then ' AguardDadoSerial novo byte Gosub Esperaentrada Leituraspo2 = A End If ' Byte de controle indicando que o proximo byte é o valor do pulso If DADOSERIAL = 250 Then ' AguardDadoSerial novo byte Gosub Esperaentrada Leiturapulso = A End If ' Byte de controle indicando que o proximo byte é DadoSerial informação do modulo (ver tarefDadoSerial 1) If DADOSERIAL = 251 Then ' AguardDadoSerial novo byte Gosub Esperaentrada Leiturainfo = A End If ' Byte de controle indicando que o proximo byte é DadoSerial qualidade do sinal If DADOSERIAL = 252 Then ' AguardDadoSerial novo byte Gosub Esperaentrada Leituraqualidade = A End If Loop ' ---------------------------------------------------------------------------' AguardDadoSerial caracter no buffer de entradDadoSerial serial ' ---------------------------------------------------------------------------Esperaentrada: 'Apenas parDadoSerial Debug Set Led3 DADOSERIAL = 0 While DADOSERIAL = 0 DADOSERIAL = Ischarwaiting() Wend DADOSERIAL = Inkey() 'Apenas Para Debug Reset Led1 Return ' ---------------------------------------------------------------------------' Escalonador de tarefas ' ---------------------------------------------------------------------------Escalonador: 'Apenas para Debug Set Led4 Contaescalonador = Contaescalonador + 1 Tempa = Contaescalonador Mod 2 If Tempa = 0 Then Gosub Tarefa2 End If Tempa = Contaescalonador Mod 10 If Tempa = 0 Then Gosub Tarefa1 End If 'Apenas para Debug 48 Reset Led4 Return ' ---------------------------------------------------------------------------' Tarefa 1 - Desenha informações ' ---------------------------------------------------------------------------Tarefa1: 'Apenas para Debug Set Led1 Cx = 0 Cy = 0 Nmostrastring = 25 If Leiturainfo = 0 Then Mostrastring = " % SPO2 Gosub Escrevestring PULSO Cx = 0 Cy = 0 Nmostrastring = 3 Mostrastring = Str(leituraspo2) + " Gosub Escrevestring " " Cx = 0 Cy = 11 Nmostrastring = 3 Mostrastring = Str(leiturapulso) + " Gosub Escrevestring " Nmostrastring = 0 If Leituraqualidade > 6 Then Nmostrastring = 1 Else If Leituraqualidade > 2 Then Nmostrastring = 2 Else If Leituraqualidade > 1 Then Nmostrastring = 3 Else Nmostrastring = 4 End If End If End If Cx = 0 Cy = 21 Mostrastring = ">>>>" Gosub Escrevestring End If If Leiturainfo = 1 Then Mostrastring = " SENSOR DESCONECTADO Gosub Escrevestring End If If Leiturainfo = 2 Then Mostrastring = " PACIENTE DESCONECTADO Gosub Escrevestring End If If Leiturainfo = 3 Then Mostrastring = "!!!! BAIXA Gosub Escrevestring End If " " PERFUSAO !!!!" 'Apenas para Debug Reset Led1 Return ' ---------------------------------------------------------------------------' Tarefa 2 - Desenha curva ' ---------------------------------------------------------------------------Tarefa2: 'Apenas para Debug Set Led2 49 Tempc = Leituragrafico Posicaoatual = Posicaoatual + 1 If Posicaoatual = 128 Then Posicaoatual = 0 I = Posicaoatual ' desenho de baixo da linha 7 para linha 1 For J = 6 To 0 Step -1 ' set J = J Gosub Gosub J = J a posicao no mostrador + 1 Mudax Muday - 1 If Tempc >= 8 Then Portb = 255 Tempc = Tempc - 8 Else Select Case Tempc Case 0 : Portb Case 1 : Portb Case 2 : Portb Case 3 : Portb Case 4 : Portb Case 5 : Portb Case 6 : Portb Case 7 : Portb End Select Tempc = 0 End If = = = = = = = = 0 128 192 224 240 248 252 254 Set Glcdrs Call Lcdenable Next 'Apenas para Debug Reset Led2 Return ' ---------------------------------------------------------------------------' Rotina para escrever um caracter no mostrador ' ---------------------------------------------------------------------------Writechar: J = Cx I = Cy * 5 C = C - 32 Enderecoeeprom = C * 5 For Tempc = 0 To 4 Gosub Mudax Gosub Muday Readeeprom W , Enderecoeeprom Gosub Writebyte I = I + 1 Enderecoeeprom = Enderecoeeprom + 1 Next Cy = Cy If Cy = Cy = Cx = End If + 1 25 Then 0 Cx + 1 If Cx = 8 Then Cx = 0 End If Return ' ---------------------------------------------------------------------------' Rotinas para display grafico ' ---------------------------------------------------------------------------- 50 Mudax: Dim X As Byte Reset Glcdrw Reset Glcdrs If I <= 63 Then X = I Call Setlcdcs1 Else X = I - 64 Call Setlcdcs2 End If X = 64 + X Portb = X Call Lcdenable Portb = 192 Call Lcdenable Return Muday: Dim Y As Byte Reset Glcdrw Reset Glcdrs Y = 184 + J Portb = Y Call Lcdenable Return Writebyte: Reset Glcdrw Set Glcdrs Portb = W Call Lcdenable Return Sub Lcdenable Set Glcde For Tempa = 0 To 2 Next Reset Glcde End Sub Sub Setlcdcs1 Reset Glcdcs2 Set Glcdcs1 End Sub Sub Setlcdcs2 Reset Glcdcs1 Set Glcdcs2 End Sub Sub Setlcdon Config Portb = Output Reset Glcdrw Reset Glcdrs Portb = 63 Call Lcdenable Portb = 184 Call Lcdenable Portb = 64 Call Lcdenable Portb = 192 Call Lcdenable End Sub ' ---------------------------------------------------------------------------' Limpa o mostrador ' ---------------------------------------------------------------------------Limpadisplay: Flagdisplay = 0 For J = 0 To 7 For I = 0 To 127 51 If I = 0 Then Flagdisplay = 1 If I = 64 Then Flagdisplay = 1 If Flagdisplay = 1 Then Gosub Mudax Gosub Muday Flagdisplay = 0 End If Portb = 0 Set Glcdrs Call Lcdenable Next Next Return ' ---------------------------------------------------------------------------' Escreve uma string inteira no mostrador ' ---------------------------------------------------------------------------Escrevestring: For Tempe = 1 To Nmostrastring Tempmostrastring = Mid(mostrastring , Tempe , 1) C = Asc(tempmostrastring) Gosub Writechar Next Return ' ---------------------------------------------------------------------------' Mapa de caracteres gravado na EEPROM cada 5 bytes corresponde a uma letra ' ---------------------------------------------------------------------------$eeprom Data Data Data Data Data Data Data Data Data Data Data Data Data Data Data Data Data Data Data Data Data Data Data Data Data Data Data Data Data Data 0 , 0 , 0 , 0 , 0 , 0 , 95 , 0 , 0 , 0 72 , 84 , 84 , 36 , 0 , 120 , 16 , 16 , 120 , 0 152 , 168 , 168 , 120 , 0 , 113 , 24 , 12 , 71 , 0 24 , 24 , 24 , 24 , 0 , 0 , 4 , 3 , 0 , 0 28 , 34 , 65 , 0 , 0 , 65 , 34 , 28 , 0 , 0 42 , 28 , 28 , 42 , 0 , 8 , 28 , 8 , 0 , 0 0 , 128 , 96 , 0 , 0 , 8 , 8 , 8 , 8 , 0 0 , 0 , 64 , 0 , 0 , 0 , 96 , 28 , 3 , 0 62 , 81 , 69 , 62 , 0 , 4 , 2 , 127 , 0 , 0 98 , 81 , 73 , 70 , 0 , 34 , 73 , 73 , 54 , 0 28 , 18 , 127 , 16 , 0 , 39 , 69 , 69 , 57 , 0 62 , 73 , 73 , 50 , 0 , 1 , 97 , 25 , 7 , 0 54 , 73 , 73 , 54 , 0 , 38 , 73 , 73 , 62 , 0 0 , 36 , 0 , 0 , 0 , 0 , 128 , 100 , 0 , 0 8 , 20 , 34 , 65 , 0 , 20 , 20 , 20 , 20 , 0 65 , 34 , 20 , 8 , 0 , 2 , 89 , 9 , 14 , 0 62 , 65 , 89 , 94 , 0 , 126 , 17 , 17 , 126 , 0 127 , 73 , 73 , 54 , 0 , 62 , 65 , 65 , 34 , 0 127 , 65 , 34 , 28 , 0 , 127 , 73 , 73 , 65 , 0 127 , 9 , 9 , 1 , 0 , 62 , 65 , 81 , 50 , 0 127 , 8 , 8 , 127 , 0 , 65 , 127 , 65 , 0 , 0 48 , 64 , 64 , 63 , 0 , 127 , 12 , 18 , 97 , 0 127 , 64 , 64 , 64 , 0 , 127 , 2 , 2 , 127 , 0 127 , 6 , 24 , 127 , 0 , 62 , 65 , 65 , 62 , 0 127 , 9 , 9 , 6 , 0 , 62 , 65 , 33 , 94 , 0 127 , 25 , 41 , 70 , 0 , 70 , 73 , 73 , 49 , 0 1 , 127 , 1 , 0 , 0 , 127 , 64 , 64 , 127 , 0 31 , 96 , 96 , 31 , 0 , 127 , 32 , 32 , 127 , 0 115 , 12 , 12 , 115 , 0 , 7 , 120 , 120 , 7 , 0 113 , 73 , 69 , 67 , 0 , 62 , 193 , 97 , 34 , 0