- Componentes Requeridos
- Sensor de pulso SEN-11574
- Diagrama de circuito para interface do sensor de pulso com o microcontrolador PIC
- Explicação do código PIC16F877A para monitor de batimento cardíaco
A taxa de batimento cardíaco é o parâmetro mais importante no monitoramento da saúde de qualquer pessoa. Na era moderna dos dispositivos vestíveis, existem muitos dispositivos que podem medir o batimento cardíaco, a pressão arterial, os passos, as calorias queimadas e muitas outras coisas. Esses dispositivos possuem um sensor de pulso dentro deles para detectar a taxa de pulso. Hoje, também usaremos um sensor de pulso com microcontrolador PIC para contar os batimentos cardíacos por minuto e o intervalo entre batimentos, esses valores serão exibidos posteriormente em um LCD de 16x2 caracteres. Utilizaremos o microcontrolador PIC PIC16F877A neste projeto. Já conectamos o sensor de pulso com o Arduino para o sistema de monitoramento de pacientes.
Componentes Requeridos
- Microcontrolador PIC16F877A
- 20 Mhz Cristal
- Capacitor 33pF 2 pcs
- Resistor 4,7k 1 pcs
- LCD de caracteres 16x2
- Pote de 10K para controle de contraste do LCD
- Sensor de pulso SEN-11574
- Cinta de velcro
- Adaptador de energia 5V
- Placa de ensaio e fios de conexão
Sensor de pulso SEN-11574
Para medir o batimento cardíaco, precisamos de um sensor de pulso. Aqui, selecionamos o sensor de pulso SEN-11574, que está facilmente disponível em lojas online ou offline. Usamos este sensor porque existem códigos de amostra fornecidos pelo fabricante, mas é um código do Arduino. Convertemos esse código para nosso microcontrolador PIC.
O sensor é realmente pequeno e perfeito para ler os batimentos cardíacos no lóbulo da orelha ou na ponta do dedo. Tem 0,625 "de diâmetro e 0,125" de espessura do lado redondo do PCB.
Este sensor fornece um sinal analógico e o sensor pode ser acionado com 3V ou 5V, o consumo de corrente do sensor é de 4 mA, o que é ótimo para aplicações móveis. O sensor vem com três fios com cabo de conexão longo de 24 ”e cabeçalho macho berg na extremidade. Além disso, o sensor vem com tira de dedo de velcro para usá-lo na ponta do dedo.
O esquema do sensor de pulso também é fornecido pelo fabricante e também está disponível em sparkfun.com.
O esquemático do sensor consiste em um sensor óptico de frequência cardíaca, circuitos ou filtros RC de cancelamento de ruído, que podem ser vistos no diagrama esquemático. R2, C2, C1, C3 e um amplificador operacional MCP6001 são usados para uma saída analógica amplificada confiável.
Existem poucos outros sensores para monitoramento de batimento cardíaco, mas o sensor de pulso SEN-11574 é amplamente utilizado em projetos eletrônicos.
Diagrama de circuito para interface do sensor de pulso com o microcontrolador PIC
Aqui nós conectou o sensor de pulso através de um 2 nd pino do microcontrolador unidade. Como o sensor fornece dados analógicos, precisamos converter os dados analógicos em sinal digital, fazendo os cálculos necessários.
O oscilador de cristal de 20Mhz é conectado através de dois pinos OSC da unidade do microcontrolador com dois capacitores de cerâmica 33pF. O LCD é conectado à porta RB do microcontrolador.
Explicação do código PIC16F877A para monitor de batimento cardíaco
O código é um pouco complexo para iniciantes. O fabricante forneceu códigos de amostra para o sensor SEN-11574, mas ele foi escrito para a plataforma Arduino. Precisamos converter o cálculo do nosso microchip, PIC16F877A. O código completo é fornecido no final deste projeto com um vídeo de demonstração. E os arquivos C de suporte podem ser baixados aqui.
Nosso fluxo de código é relativamente simples e fizemos as etapas usando um caso de switch . De acordo com o fabricante, precisamos obter os dados do sensor a cada 2 milissegundos. Portanto, usamos uma rotina de serviço de interrupção de cronômetro que irá disparar uma função a cada 2 milissegundos.
Nosso fluxo de código na instrução switch será assim:
Caso 1: Leia o ADC
Caso 2: calcule o batimento cardíaco e o IBI
Caso 3: mostrar a pulsação e o IBI no LCD
Caso 4: IDLE (não fazer nada)
Dentro da função de interrupção do temporizador, mudamos o estado do programa para Caso 1: Leia o ADC a cada 2 milissegundos.
Assim, na função principal , definimos o estado do programa e todos os casos de switch .
void main () { system_init (); main_state = READ_ADC; while (1) { switch (main_state) { case READ_ADC: { adc_value = ADC_Read (0); // 0 é o número do canal main_state = CALCULATE_HEART_BEAT; pausa; } case CALCULATE_HEART_BEAT: { calcule_heart_beat (adc_value); main_state = SHOW_HEART_BEAT; pausa; } case SHOW_HEART_BEAT: { if (QS == true) {// Uma pulsação foi encontrada // BPM e IBI foram determinados // Quantified Self "QS" true quando Arduino encontra uma pulsação QS = false; // redefine o sinalizador Quantified Self para a próxima vez // 0.9 usado para obter dados melhores. na verdade, não deve ser usado BPM = BPM * 0,9; IBI = IBI / 0,9; lcd_com (0x80); lcd_puts ("BPM: -"); lcd_print_number (BPM); lcd_com (0xC0); lcd_puts ("IBI: -"); numero_impressao_cd (IBI); } } main_state = IDLE; pausa; case IDLE: { break; } padrão: { } } } }
Estamos usando dois periféricos de hardware do PIC16F877A: Timer0 e ADC.
Dentro do arquivo timer0.c, TMR0 = (uint8_t) (tmr0_mask & (256 - (((2 * _XTAL_FREQ) / (256 * 4)) / 1000)));
Este cálculo está fornecendo a interrupção do temporizador de 2 milissegundos. A fórmula de cálculo é
// TimerCountMax - (((delay (ms) * Focs (hz)) / (PreScale_Val * 4)) / 1000)
Se virmos a função timer_isr , é-
void timer_isr () { main_state = READ_ADC; }
Nesta função, o estado do programa é alterado para READ_ADC a cada 2 ms.
Em seguida, a função CALCULATE_HEART_BEAT é obtida do código de exemplo do Arduino.
void calcul_heart_beat (int adc_value) { Signal = adc_value; sampleCounter + = 2; // monitora o tempo em mS com esta variável int N = sampleCounter - lastBeatTime; // monitore o tempo desde a última batida para evitar ruído // encontre o pico e o vale da onda de pulso if (Signal <thresh && N> (IBI / 5) * 3) {// evite ruído dicrótico esperando 3/5 do último IBI if (Signal <T) {// T é o vale T = Signal; // acompanha o ponto mais baixo na onda de pulso } } …………. ………………………..
Além disso, o código completo é fornecido abaixo e bem explicado pelos comentários. Esses dados do sensor de batimentos cardíacos podem ser enviados para a nuvem e monitorados pela Internet de qualquer lugar, o que o torna um sistema de monitoramento de batimentos cardíacos baseado em IoT. Siga o link para saber mais.
Baixe os arquivos C de suporte para este projeto de sensor de pulso PIC aqui.