Измеритель пульса на микроконтроллере PIC16F628A. Часть 3. Конструкция прибора и использование, настройка ИК сенсора.

Данный проект демонстрирует технику измерения частоты сердечных сокращений (пульса) по изменению объема крови в артерии пальца. В статье мы рассмотрим все основные моменты в аппаратной и программной реализации устройства.

Пульс – это количество ударов сердца в единицу времени, и обычно измеряется в ударах в минуту. Для взрослых нормальный пульс составляет 60-100 ударов в минуту при отсутствии нагрузок. Пульс, измеренный в отсутствии физических нагрузок, является важным показателем здоровья человека.

Для измерения пульса используется датчик, который состоит из инфракрасного светодиода, который передает ИК сигнал на палец человека, и фотодиода, который принимает отраженный от клеток крови сигнал. Светодиод и фотодиод должны быть расположены близко друг к другу, как показано на рисунке ниже.

нтенсивность отраженного сигнала зависит от объема крови в кончике пальца. Следовательно, с каждым ударом сердца немного изменяется интенсивность отраженного ИК сигнала, которая фиксируется фотодиодом.

Изменяющийся с биением сердца человека объем крови в пальце вызывает появление импульсов на выходе фотодиода, однако величина их слишком мала для непосредственной подачи на микроконтроллер с целью обработки. Для решения этой задачи применена схема усиления и фильтрации сигнала на операционном усилителе. Вывод измеренного значения пульса осуществляется на 3-х разрядный семисегментный индикатор. Примененный микроконтроллер PIC16F628A производства компании Microchip.

Принципиальная схема

Схема нормализации сигнала состоит из двух идентичных активных фильтров нижних частот с частотой среза около 2.5 Гц. Это означает, что максимальное измеряемое значение пульса составляет 150 ударов в минуту. Операционный усилитель, используемый в схеме MCP602 – сдвоенный операционный усилитель, работающий от однополярного источника напряжения. Выходной сигнал имеет размах, равный напряжению питания. Фильтрация сигнала необходима для блокирования высокочастотного шума.

Коэффициент усиления каждой ступени равен 101, а итоговое усиление 10000. Входной конденсатор каждой ступени необходим для блокирования постоянной составляющей сигнала. Выражения для расчета коэффициента усиления и частоты среза фильтра приведены на рисунке. Такая схема обладает достаточными возможностями для повышения уровня сигнала с фотодиода, его фильтрации и преобразования в импульсы для дальнейшего подсчета микроконтроллером.

Светодиод Led (см. схему выше) на выходе фильтра мигает каждый раз, как определяется удар сердца.

Управление, подсчет импульсов и вычисления, вывод измеренного значения на индикатор выполняет микроконтроллер. Примененный индикатор – 3-хразрядный семисегментный, с общим анодом. Выводы сегментов a-g индикатора подключены к порту B микроконтроллера (RB0 – RB6, соответственно). Управление разрядами осуществляется посредством транзисторов BC557, подключенных к линиям ввода/вывода RA0-RA2 (сотни, десятки, единицы).

Микроконтроллер работает на тактовой частоте 4 МГц, в качестве источника тактовой частоты применен кварцевый резонатор. Кнопка «Start» подключена к порту RB7 (вывод 13 микроконтроллера).

Расположение и назначение выводов микроконтроллера PIC16F628A

По нажатию этой кнопки начинается измерение пульса, микроконтроллер активизирует передачу ИК импульсов на время 15 секунд. ИК светодиод, через управляющий транзистор BC547, подключен к порту RA3 (вывод 2 микроконтроллера). В течении этого времени осуществляется подсчет импульсов приходящих на вход TOCK1 таймера, встроенного в микроконтроллер (Timer0). Полученное количество импульсов умножается на 4, чтобы получить количество ударов сердца в минуту.

Величина пульса по окончанию измерения отображается на индикаторе. Для сброса результатов необходимо нажать на кнопку «Clear».

Принцип действия и схема

рограммное обеспечение микроконтроллера осуществляет управление и вычисление данных. С целью экономии ресурса батареи (в случае питания от батареи) модуль ИК сенсора активируется только при запуске измерения, включаясь на 15 секунд после нажатия кнопки «Start».

Импульсы, поступающие на вывод TOCK1 микроконтроллера, подсчитываются таймером Timer0, который работает в режиме счетчика без предделителя.

Программа для микроконтроллера полностью написана с использованием компилятора mikroC, разработанного компанией mikroElektronika, текст программы снабжен подробными комментариями.

Листинг

/*
Project: Measuring heart rate through fingertip
Copyright @ Rajendra Bhatt
January 18, 2011
PIC16F628A at 4.0 MHz external clock, MCLR enabled
*/

sbit IR_Tx at RA3_bit;
sbit DD0_Set at RA2_bit;
sbit DD1_Set at RA1_bit;
sbit DD2_Set at RA0_bit;
sbit start at RB7_bit;
unsigned short j, DD0, DD1, DD2, DD3;
unsigned short pulserate, pulsecount;
unsigned int i;
//-------------- Function to Return mask for common anode 7-seg. display
unsigned short mask(unsigned short num) {
switch (num) {
case 0 : return 0xC0;
case 1 : return 0xF9;
case 2 : return 0xA4;
case 3 : return 0xB0;
case 4 : return 0x99;
case 5 : return 0x92;
case 6 : return 0x82;
case 7 : return 0xF8;
case 8 : return 0x80;
case 9 : return 0x90;
} //case end
}

void delay_debounce(){
Delay_ms(300);
}

void delay_refresh(){
Delay_ms(5);
}

void countpulse(){
IR_Tx = 1;
delay_debounce();
delay_debounce();
TMR0=0;
Delay_ms(15000); // Delay 15 Sec
IR_Tx = 0;
pulsecount = TMR0;
pulserate = pulsecount*4;
}

void display(){
DD0 = pulserate%10;
DD0 = mask(DD0);
DD1 = (pulserate/10)%10;
DD1 = mask(DD1);
DD2 = pulserate/100;
DD2 = mask(DD2);
for (i = 0; i<=180*j; i++) {
DD0_Set = 0;
DD1_Set = 1;
DD2_Set = 1;
PORTB = DD0;
delay_refresh();
DD0_Set = 1;
DD1_Set = 0;
DD2_Set = 1;
PORTB = DD1;
delay_refresh();
DD0_Set = 1;
DD1_Set = 1;
DD2_Set = 0;
PORTB = DD2;
delay_refresh();
}
DD2_Set = 1;
}

void main() {
CMCON = 0x07; // Disable Comparators
TRISA = 0b00110000; // RA4/T0CKI input, RA5 is I/P only
TRISB = 0b10000000; // RB7 input, rest output
OPTION_REG = 0b00101000; // Prescaler (1:1), TOCS =1 for counter mode
pulserate = 0;
j = 1;
display();
do {
if(!start){
delay_debounce();
countpulse();
j= 3;
display();
}
} while(1); // Infinite loop
}

Загрузки

Исходный код и hex файл для прошивки микроконтроллера — скачать

Прибор очень прост в использовании. При включении питания на дисплее появится значение «000». Необходимо подождать несколько секунд, пока показания не исчезнут. Теперь необходимо поместить указательный палец на ИК сенсор и нажать кнопку «Start». Во время измерения нужно держать палец неподвижно до тех пор, пока на дисплее не появится измеренное значение пульса. Вы заметите, что светодиод будет мигать при ударе сердца (т.е. при определении удара сердца сенсором), и по истечению 15 секунд на дисплее отобразится значение пульса.

Демонстрация работы


Следует обратить внимание на аналоговую схему формирования и согласования сигнала с ИК датчика, т.к. эта часть схемы является самой сложной в проекте.

Как было замечено в начале статьи, мы используем два идентичных активных фильтра нижних частот на базе операционных усилителей, чтобы одновременно усилить полученный от фотодиода сигнал. ИК светодиод и ИК фотодиод располагаются близко друг к другу, но прямое воздействие излучения ИК светодиода на фотодиод исключается (см. рисунок ниже).

Кроме того, вы заметили, что и светодиод и фотодиод помещены в непрозрачный корпус, что исключает влияние рассеянного света и внешнего освещения на датчик. Можно использовать готовые ИК датчики на базе светодиода и фотодиода (например, Vishay TCRT5000L).

Внешний вид ИК сеносра Vishay TCRT5000L

Резистор номиналом 150 Ом в цепи светодиода D1 (см. схему) служит для ограничения тока через светодиод и, следовательно, интенсивность ИК-излучения. Интенсивность не должна быть слишком высокой, т.к. затрудняется определение отраженного сигнала. Значение этого резистора подбирается для различных ИК светодиодов в соответствии со спецификацией.

Для тестирования и подбора резистора автор использовал следующую методику.

Автор использовал постоянный резистор 68 Ом с потенциометром 470 Ом, включенные последовательно со светодиодом. Поместив указательный палец на датчик и медленно изменяя сопротивление потенциометра, необходимо добиться четкого мигания светодиода на выходе схемы нормализации сигнала при ударах сердца. Затем необходимо измерить сопротивление эквивалентного резистора R (потенциометр + резистор 68 Ом) и заменить его одним постоянным резистором с измеренным сопротивлением. Однако, можно оставить потенциометр в схеме для дальнейшей подстройки при необходимости.

На английском языке: Heart rate measurement from fingertip. Part 3. References, notes, using the device.

Перевод: Vadim по заказу РадиоЛоцман

3 комментария