Arduino:Примеры/Genuino101CurieBLEHeartRateMonitor
Содержание | Знакомство с Arduino | Продукты | Основы | Справочник языка Arduino | Примеры | Библиотеки | Хакинг | Изменения | Сравнение языков Arduino и Processing |
Отслеживание пульса[1]
Этот пример демонстрирует встроенные BLE-возможности платы Arduino/Genuino 101, и в нем используется стандартный BLE-сервис «Heart Rate Monitor» (т.е. «пульсометр»). Этот сервис принимает значения от датчика сердцебиения (в этом примере он эмулируется аналоговым датчиком), а затем отсылает их через BLE на ваш смартфон или другое устройство, где эти значения используются приложением nRF Toolbox for BLE для создания соответствующего графика.
Необходимое оборудование
- Плата Arduino/Genuino 101
- Устройство на Android или iOS, на котором запущено приложение nRF Toolbox for BLE
- Потенциометр или другой аналоговый датчик
Цепь

Инструкции
- Настройте IDE Arduino согласно инструкциям в этой статье.
- Загрузите приложение nRF Toolbox for BLE (это бесплатно). Версия для Anrdoid – здесь, для iOS – здесь.
- Подсоедините к Arduino 101 потенциометр (или другой аналоговый датчик), как показано в разделе «Цепь» выше.
- Подключите Arduino 101 к компьютеру.
- Запустите на компьютере IDE Arduino и выберите там пункт Инструменты > Плата > Arduino/Genuino 101 (Tools > Board > Arduino/Genuino 101).
- Загрузите в IDE Arduino скетч CurieBLEHeartRateMonitor. Он находится в Файл > Примеры > CurieIMU (File > Examples > CurieIMU). Полную версию этого скетча можно также найти в разделе «Код» ниже.
- Запустите приложение. Перед вами должен появиться домашний экран, как на картинке ниже.

- Кликните по иконке с сердечком в центре экрана. Откроется график «Beats per Minute over Time» (т.е. «динамика сердцебиения»). Пока вы не подключитесь к Arduino, он не будет показывать никаких данных.
- Нажмите кнопку «Connect», расположенную под графиком, и вы увидите устройство «HeartRateSketch» (или какое-то другое, если вы его переименовали).
- Кликните по названию вашего устройства и данные от потенциометра должны сразу же появиться на графике, изображенном на картинке ниже. Конечно, потенциометр лишь эмулирует сердцебиение – чтобы продемонстрировать, как работает этот сервис.

Код
/*
Правообладатель – Intel Corporation (2015). Все права защищены.
Эта библиотека является бесплатной; ее можно распространять
и/или модифицировать согласно условиям Стандартной общественной
лицензии ограниченного применения GNU (т.к. она выпущена Фондом
свободного ПО) – либо версии 2.1 этой лицензии, либо более поздней
версии (на ваш выбор).
Эта библиотека распространяется в надежде на то, что будет
полезна кому-либо, но БЕЗО ВСЯКИХ ГАРАНТИЙ – даже без гарантий на
коммерческое качество и пригодность применения для конкретных
целей. Более подробно читайте в Стандартной общественной лицензии
ограниченного применения GNU.
Вы должны получить копию Стандартной общественной лицензии
ограниченного применения вместе с этой библиотекой. Если не
получили, напишите в Фонд бесплатного ПО на адрес: Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
MA 02110-1301 USA
*/
/*
Этот скетч частично использует стандартный BLE-сервис «Heart Rate».
Подробнее читайте на
https://developer.bluetooth.org/gatt/services/Pages/ServicesHome.aspx
*/
#include <CurieBle.h>
BLEPeripheral blePeripheral; // периферийное BLE-устройство (программируемая вами плата)
BLEService heartRateService("180D"); // BLE-сервис для измерения пульса
// BLE-характеристика для измерения пульса:
BLECharacteristic heartRateChar("2A37", // стандартный 16-битный UUID характеристики;
BLERead | BLENotify, 2); // клиенты будут получать уведомления, если эта характеристика изменится;
// длина этой характеристики составляет два байта, т.е. первое поле отведено под «Flags» (согласно спецификациям BLE)
// https://developer.bluetooth.org/gatt/characteristics/Pages/CharacteristicViewer.aspx?u=org.bluetooth.characteristic.heart_rate_measurement.xml
int oldHeartRate = 0; // значение, последний раз считанное с аналогового датчика
long previousMillis = 0; // время, когда сердцебиение проверялось в последний раз (в миллисекундах)
void setup() {
Serial.begin(9600); // инициализируем последовательную коммуникацию
pinMode(13, OUTPUT); // инициализируем светодиод на 13-ом контакте, чтобы он сигнализировал о подключении центрального устройства
/* Задаем локальное название для BLE-устройства. Это название будет
в пакетах-объявлениях и может быть использовано удаленными
устройствами для идентификации этого BLE-устройства. Кроме того,
это название можно поменять, но оно может быть обрезано из-за
нехватки места в пакете-объявлении. */
blePeripheral.setLocalName("HeartRateSketch");
blePeripheral.setAdvertisedServiceUuid(heartRateService.uuid()); // добавляем UUID сервиса
blePeripheral.addAttribute(heartRateService); // добавляем BLE-сервис для измерения сердцебиения
blePeripheral.addAttribute(heartRateChar); // добавляем характеристику для измерения сердцебиения
/* Теперь включаем периферийное BLE-устройство. Оно начнет в
постоянном режиме рассылать пакеты-объявления и станет видимым
для находящихся рядом центральных BLE-устройств, пока не получит
новое подключение. */
blePeripheral.begin();
Serial.println("Bluetooth device active, waiting for connections..."); // "Bluetooth-устройство активно, ждем подключений..."
}
void loop() {
// начинаем прослушку периферийных BLE-устройств, к которым можно подключиться:
BLECentral central = blePeripheral.central();
// если центральное устройство подключилось к периферийному:
if (central) {
Serial.print("Connected to central: "); // "Подключились к центральному устройству: "
// показываем MAC-адрес центрального устройства:
Serial.println(central.address());
// включаем светодиод, сигнализируя о факте подключения:
digitalWrite(13, HIGH);
// проверяем сердцебиение каждые 200 миллисекунд,
// пока подключено центральное устройство:
while (central.connected()) {
long currentMillis = millis();
// если 200 миллисекунд прошли, снова проверяем сердцебиение:
if (currentMillis - previousMillis >= 200) {
previousMillis = currentMillis;
updateHeartRate();
}
}
// если центральное устройство отключилось, выключаем светодиод:
digitalWrite(13, LOW);
Serial.print("Disconnected from central: "); // "Отключились от центрального устройства: "
Serial.println(central.address());
}
}
void updateHeartRate() {
/* Считываем уровень напряжения на 0-ом входном аналоговом контакте.
Это используется для эмуляции датчика сердцебиения.
*/
int heartRateMeasurement = analogRead(A0);
int heartRate = map(heartRateMeasurement, 0, 1023, 0, 100);
if (heartRate != oldHeartRate) { // если пульс изменился
Serial.print("Heart Rate is now: "); // "Пульс сейчас: " сообщаем об этом
Serial.println(heartRate);
const unsigned char heartRateCharArray[2] = { 0, (char)heartRate };
heartRateChar.setValue(heartRateCharArray, 2); // и обновляем характеристику для измерения сердцебиения
oldHeartRate = heartRate; // сохраняем считанное значение для сравнения при следующем проходе через цикл
}
}
Что дальше
Протокол Bluetooth Low Energy включает в себя и другие сервисы, к примеру, Alert Notification Service (для уведомлениях о текстовых сообщениях), Environmental Sensing (для отображения информации о состоянии окружающей среды: скорости и направлении ветра, точки росы, влажности и т.д.), AutomationIO (для отображения данных от модулей ввода-вывода) и т.д. Все эти сервисы тоже можно использовать с платой Arduino, управляя и считывая данные с подключенных к ней компонентов.
Данный пример использует nRF Toolbox, но это приложение работает только с девятью сервисами. Если вы хотите использовать другие сервисы (как в примерах для библиотеки CurieIMU), мы рекомендуем использовать приложения LightBlue (для iOS) и nRF Control Panel (для Android).
См.также
- Heart Rate Monitor
- Battery Monitor
- Button LED
- Callback LED
- LED
Внешние ссылки
развернутьПартнерские ресурсы |
---|
развернутьСправочник языка Arduino |
---|
развернутьБиблиотеки Arduino |
---|
развернутьArduino продукты |
---|
развернутьПримеры Arduino |
---|
- Страницы, использующие повторяющиеся аргументы в вызовах шаблонов
- Справочник языка Arduino
- Arduino
- Перевод от Сubewriter
- Проверка:myagkij
- Оформление:myagkij
- Редактирование:myagkij
- Страницы, где используется шаблон "Навигационная таблица/Телепорт"
- Страницы с телепортом
- Пример
- Примеры
- Пример программирования Arduino
- Примеры программирования Arduino