Вы находитесь на странице: 1из 16

Урок 14

Датчик пульса
с Wi-Fi

Материалы урока прикреплены к данному PDF-файлу. Для досту-


па к материалам, урок необходимо открыть в программе Adobe
Acrobat Reader.

2
Датчик пульса с Wi-Fi

Датчик пульса с Wi-Fi


Медицина не стоит на месте, и уже много лет ак-
тивно применяет передовые технологии для повыше-
ния эффективности различных процессов. Современ-
ное оборудование, используемое врачами, уже давно
автоматизировано с помощью информационных тех-
нологий (рис. 1).

Рисунок 1
Сегодня мы узнаем о том, как создаются подобные
устройства и соберем на Arduino пульсометр с моду-
лем Wi-Fi для отслеживания его показателей онлайн.
Для этого нам понадобится соответствующий датчик
(рис. 2).

3
Урок 14

Рисунок 2
Соберем проект по следующей схеме (рис. 3):

Рисунок 3

4
Датчик пульса с Wi-Fi

Для визуализации данных мы будем использовать


сервис ThingSpeak: https://thingspeak.com/ (рис. 4).

Рисунок 4
Для начала зарегистрируемся (рис. 5).

Рисунок 5
После регистрации и подтверждения адреса элек-
тронной почты, вам нужно создать API-ключ. Перейдите
5
Урок 14

Channels — My Channel — New Channel. Введите название,


например, «Pulse Rate» и нажмите Save Channel (рис. 6).

Рисунок 6
Откройте созданный канал. Во вкладке API Keys на-
ходится необходимый Write API Key.
Перейдем к программированию микроконтроллера.
Подключим все необходимые библиотеки и объявим пе-
ременные.

#include <SoftwareSerial.h>
#define DEBUG true
SoftwareSerial esp8266(9, 10);
#include <stdlib.h>

"ssidname" — введите название вашей сети Wi-Fi.

#define SSID "ssidname"

А «ssidpass" — введите пароль от сети.


#define PASS "ssidpass"

6
Датчик пульса с Wi-Fi

Следующая строка содержит IP-адрес сервиса Thing­


Speak.
#define IP "184.106.153.149"

Ключ ниже замените на ваш Write API Key.

String msg = “GET /update?key=W86OQNB83XEQIMN4”;

float temp;
int hum;
String tempC;
int error;
int pulsePin = 0;
int blinkPin = 7;
int fadePin = 5;
int fadeRate = 0;

volatile int BPM;


volatile int Signal;
volatile int IBI = 600;
volatile boolean Pulse = false;
volatile boolean QS = false;

static boolean serialVisual = true;


volatile int rate[10];
volatile unsigned long sampleCounter = 0;
volatile unsigned long lastBeatTime = 0;
volatile int P = 512;
volatile int T = 512;
volatile int thresh = 525;
volatile int amp = 100;
volatile boolean firstBeat = true;
volatile boolean secondBeat = false;

void setup() {
Serial.begin(9600);

7
Урок 14

esp8266.begin(9600);
Serial.println(“AT”);
esp8266.println(“AT”);
delay(5000);
if (esp8266.find(“OK”)) {
connectWiFi();
}
interruptSetup();
}

void loop() {
start:
error = 0;
delay(1000);
updatebeat();
if (error == 1) {
goto start;
}

delay(1000);
}

Метод для обновления показателей пульсометра:

void updatebeat() {
String cmd = “AT+CIPSTART=\”TCP\”,\””;
cmd += IP;
cmd += “\”,80”;
Serial.println(cmd);
esp8266.println(cmd);
delay(2000);
if (esp8266.find(“Error”)) {
return;
}
cmd = msg;
cmd += “&field1=”;

8
Датчик пульса с Wi-Fi

cmd += BPM;
cmd += “\r\n”;
Serial.print(“AT+CIPSEND=”);
esp8266.print(“AT+CIPSEND=”);
Serial.println(cmd.length());
esp8266.println(cmd.length());
if (esp8266.find(“>”)) {
Serial.print(cmd);
esp8266.print(cmd);
}
else {
Serial.println(“AT+CIPCLOSE”);
esp8266.println(“AT+CIPCLOSE”);
error = 1;
}
}

Метод для подключения к Wi-Fi:

boolean connectWiFi() {
Serial.println(“AT+CWMODE=1”);
esp8266.println(“AT+CWMODE=1”);
delay(2000);
String cmd = “AT+CWJAP=\””;
cmd += SSID;
cmd += “\”,\””;
cmd += PASS;
cmd += “\””;
Serial.println(cmd);
esp8266.println(cmd);
delay(5000);
if (esp8266.find(“OK”)) {
Serial.println(“OK”);
return true;
}

9
Урок 14

else {
return false;
}
}

void interruptSetup() {
TCCR2A = 0x02;
TCCR2B = 0x06;
OCR2A = 0X7C;
TIMSK2 = 0x02;
sei();
}

ISR(TIMER2_COMPA_vect) {
cli();
Signal = analogRead(pulsePin);
sampleCounter += 2;
int N = sampleCounter - lastBeatTime;

if (Signal < thresh && N > (IBI / 5) * 3) {


if (Signal < T) {
T = Signal;
}
}

if (Signal > thresh && Signal > P) {


P = Signal;
}

if (N > 250) {
if ((Signal > thresh) &&
(Pulse == false) &&
(N > (IBI / 5) * 3)) {
Pulse = true;
digitalWrite(blinkPin, HIGH);
IBI = sampleCounter - lastBeatTime;
lastBeatTime = sampleCounter;

10
Датчик пульса с Wi-Fi

if (secondBeat) {
secondBeat = false;
for (int i = 0; i <= 9; i++) {
rate[i] = IBI;
}
}

if (firstBeat) {
firstBeat = false;
secondBeat = true;
sei();
return;
}
word runningTotal = 0;

for (int i = 0; i <= 8; i++) {


rate[i] = rate[i + 1];
runningTotal += rate[i];
}

rate[9] = IBI;
runningTotal += rate[9];
runningTotal /= 10;
BPM = 60000 / runningTotal;
QS = true;
}
}

if (Signal < thresh && Pulse == true) {


digitalWrite(blinkPin, LOW);
Pulse = false;
amp = P - T;
thresh = amp / 2 + T;
P = thresh;
T = thresh;
}

11
Урок 14

if (N > 2500) {
thresh = 512;
P = 512;
T = 512;
lastBeatTime = sampleCounter;
firstBeat = true;
secondBeat = false;
}
sei();
}

Пришло время протестировать проект! Приложите


пульсометр к пальцу (рис. 7).

Рисунок 7
Его можно закрепить с помощью обычного скотча
или липучки (рис. 8).

12
Датчик пульса с Wi-Fi

Рисунок 8
После того, как датчик начнет работать, вы увидите,
что полученные данные фиксируются на графике в акка-
унте ThingSpeak (рис. 9).

Рисунок 9

13
Урок 14

Взгляните на примеры устройств, которые помогают


следить за здоровьем.
■■ Mi Band 4, позволяет следить за качеством сна и пуль-
сом (рис. 10).

Рисунок 10
■■ Электронный тонометр для измерения артериального
давления (рис. 11).

Рисунок 11

14
Датчик пульса с Wi-Fi

15
Урок 14
Датчик пульса с Wi-Fi

© Компьютерная Академия «Шаг»


www.itstep.org

Все права на охраняемые авторским правом фото-, аудио- и видеопро-


изведения, фрагменты которых использованы в материале, принадле-
жат их законным владельцам. Фрагменты произведений используются
в иллюстративных целях в объёме, оправданном поставленной задачей,
в рамках учебного процесса и в учебных целях, в соответствии со ст. 1274
ч. 4 ГК РФ и ст. 21 и 23 Закона Украины «Про авторське право і суміжні
права». Объём и способ цитируемых произведений соответствует
принятым нормам, не наносит ущерба нормальному использованию
объектов авторского права и не ущемляет законные интересы автора
и правообладателей. Цитируемые фрагменты произведений на момент
использования не могут быть заменены альтернативными, не охраня-
емыми авторским правом аналогами, и как таковые соответствуют
критериям добросовестного использования и честного использования.
Все права защищены. Полное или частичное копирование материалов
запрещено. Согласование использования произведений или их фраг-
ментов производится с авторами и правообладателями. Согласованное
использование материалов возможно только при указании источника.
Ответственность за несанкционированное копирование и коммерческое
использование материалов определяется действующим законодатель-
ством Украины.

Оценить