- Необхідні компоненти
- Датчик імпульсів SEN-11574
- Принципова схема для взаємодії датчика імпульсів з мікроконтролером PIC
- Пояснення коду PIC16F877A для монітора серцебиття
Частота серцевих скорочень є найважливішим параметром у спостереженні за станом здоров'я будь-якої людини. У сучасну еру пристроїв, що носяться, є безліч приладів, які можуть вимірювати серцебиття, артеріальний тиск, кроки, спалені калорії та багато іншого. Ці пристрої мають датчик імпульсу всередині них для визначення частоти пульсу. Сьогодні ми також будемо використовувати імпульсний датчик з мікроконтролером PIC для підрахунку серцебиття в хвилину та інтервалу між ударами, ці значення будуть додатково відображатися на РК-дисплеї 16x2 символів. У цьому проекті ми використовуватимемо мікроконтролер PIC16F877A PIC. Ми вже зв’язали датчик пульсу з Arduino для системи моніторингу пацієнтів.
Необхідні компоненти
- Мікроконтролер PIC16F877A
- Кристал 20 МГц
- Конденсатор 33pF 2 шт
- 4.7k резистор 1 шт
- РК-дисплей із символами 16x2
- 10 тисяч банок для контролю контрастності РК-дисплея
- SEN-11574 Датчик імпульсу
- Ремінець на липучках
- Адаптер живлення 5 В
- Макет і дроти для підключення
Датчик імпульсів SEN-11574
Для вимірювання серцебиття нам потрібен датчик пульсу. Тут ми обрали імпульсний датчик SEN-11574, який легко доступний в Інтернет-магазинах або поза ними. Ми використовували цей датчик, оскільки є зразки кодів, надані виробником, але це код Arduino. Ми перетворили цей код для нашого мікроконтролера PIC.
Датчик дуже маленький і ідеально підходить для читання серцебиття через мочку вуха або на кінчику пальця. Він має діаметр 0,625 ”і товщину 0,125” з круглої сторони друкованої плати.
Цей датчик забезпечує аналоговий сигнал, і датчик може працювати від 3 В або 5 В, поточне споживання датчика становить 4 мА, що чудово підходить для мобільних додатків. Датчик постачається з трьома проводами з 24-дюймовим кабелем підключення та штепсельною вилкою berg на кінці. Крім того, датчик оснащений ремінцем на липучках, щоб носити його через кінчик пальця.
Схема датчика пульсу також надається виробником, а також доступна на sparkfun.com.
Схема датчика складається з оптичного датчика серцевого ритму, схеми RC шумопоглинання або фільтрів, які можна побачити на принциповій схемі. R2, C2, C1, C3 та операційний підсилювач MCP6001 використовуються для надійного посиленого аналогового виходу.
Існує небагато інших датчиків для моніторингу серцебиття, але імпульсний датчик SEN-11574 широко використовується в проектах з електроніки.
Принципова схема для взаємодії датчика імпульсів з мікроконтролером PIC
Тут ми підключили датчик імпульсів через 2- й штифт блоку мікроконтролера. Оскільки датчик забезпечує аналогові дані, нам потрібно перетворити аналогові дані в цифровий сигнал, виконавши необхідні розрахунки.
Кристал осцилятор 20Mhz з'єднаний через два OSC штифтів блоку мікроконтролера з двома керамічними конденсаторами 33pF. LCD підключений через RB порт мікроконтролера.
Пояснення коду PIC16F877A для монітора серцебиття
Код трохи складний для початківців. Виробник надав зразки кодів для датчика SEN-11574, але він був написаний для платформи Arduino. Нам потрібно перетворити розрахунок для нашого мікрочіпа, PIC16F877A. Повний код подано в кінці цього проекту з демонстраційним відео. А допоміжні файли C можна завантажити звідси.
Наш потік коду є відносно простим, і ми зробили кроки, використовуючи корпус комутатора . Відповідно до виробника, нам потрібно отримувати дані від датчика кожні 2 мілісекунди. Отже, ми використовували процедуру переривання таймера, яка запускатиме функцію через кожні 2 мілісекунди.
Наш потік коду в операторі switch буде виглядати так:
Випадок 1: Прочитайте АЦП
Випадок 2: Обчисліть серцебиття та IBI
Випадок 3: Покажіть серцебиття та IBI на РК-дисплеї
Випадок 4: ПРОСТО
Усередині функції переривання таймера ми змінюємо стан програми на Випадок 1: читаємо АЦП кожні 2 мілісекунди.
Отже, в основній функції ми визначили стан програми та всі випадки комутатора .
void main () { system_init (); main_state = READ_ADC; while (1) { switch (main_state) { case READ_ADC: { adc_value = ADC_Read (0); // 0 - номер каналу main_state = CALCULATE_HEART_BEAT; перерву; } випадок CALCULATE_HEART_BEAT: { обчислити_ серце_биття (adc_value); main_state = SHOW_HEART_BEAT; перерву; } case SHOW_HEART_BEAT: { if (QS == true) {// Було знайдено серцебиття // Визначено BPM та IBI // Кількісне значення "QS" true, коли Arduino виявляє серцебиття QS = false; // скинути прапорець кількісного значення для наступного разу // 0.9, що використовується для отримання кращих даних. насправді не слід використовувати BPM = BPM * 0,9; IBI = IBI / 0,9; lcd_com (0x80); lcd_puts ("BPM: -"); lcd_print_number (BPM); lcd_com (0xC0); lcd_puts ("IBI: -"); номер_друку_друку (IBI); } } main_state = IDLE; перерву; НЕАКТИВНА справа: { перерва; } за замовчуванням: { } } } }
Ми використовуємо дві апаратні периферійні пристрої PIC16F877A: Timer0 та ADC.
Усередині файлу timer0.c, TMR0 = (uint8_t) (tmr0_mask & (256 - (((2 * _XTAL_FREQ) / (256 * 4)) / 1000)));
Цей розрахунок забезпечує переривання таймера на 2 мілісекунди. Формула розрахунку
// TimerCountMax - (((затримка (мс) * Фокуси (гц)) / (PreScale_Val * 4)) / 1000)
Якщо ми бачимо функцію timer_isr , це -
void timer_isr () { main_state = READ_ADC; }
У цій функції стан програми змінюється на READ_ADC кожні 2 мс.
Тоді функція CALCULATE_HEART_BEAT береться з прикладу коду Arduino.
порожнеча calcu_heart_beat (int adc_value) { Signal = adc_value; sampleCounter + = 2; // відстежуємо час у мС за допомогою цієї змінної int N = sampleCounter - lastBeatTime; // відстежуємо час з моменту останнього удару, щоб уникнути шуму // знаходимо пік і западину пульсової хвилі, якщо (Signal <thresh && N> (IBI / 5) * 3) {// уникаємо дихротичного шуму, чекаючи 3/5 останнього IBI, якщо (Signal <T) {// T - жолоб T = Signal; // відстежувати найнижчу точку в пульсовій хвилі } } …………. ………………………..
Далі, повний код наведено нижче і добре пояснено коментарями. Ці дані датчика серцебиття можна додатково завантажувати в хмару та відстежувати через Інтернет з будь-якого місця, що, таким чином, робить систему моніторингу серцебиття на основі IoT, перейшовши за посиланням, щоб дізнатись більше.
Завантажте допоміжні файли C для цього проекту датчика імпульсів PIC звідси.