2019-3-12 15:17:34 [显示全部楼层]
4754浏览
查看: 4754|回复: 2

[教程] Arduino 101模拟心率监测

[复制链接]
本帖最后由 szjuliet 于 2019-3-13 23:41 编辑

本贴写于2016-8-13,由QQ日志迁移过来。

话说有了BLE,物联网对于我们普通人来说更加具体也更加触手可及,我们也可以开发自己的物联网应用了。今天我们使用Arduino官网上的教程来实现模拟心率监测。后面会再发上来使用App  Inventor开发的应用。

教程链接:https://www.arduino.cc/en/Tutorial/Genuino101CurieBLEHeartRateMonitor

需要的硬件:
-  Arduino/Genuino 101板
-  Android手机
-  模拟传感器(光敏,声音,温度,电位计等均可),用于模拟心率值。我用的是光敏传感器。
- LED灯。用于判断连接状态。灯亮已连接,灯灭未连接。

电路图:

Arduino 101模拟心率监测图1

步骤:
1.  下载nRF Toolbox for BLE app: Android版  iOS版。并安装到手机。
Arduino 101模拟心率监测图2
2.  将LED灯接到13脚,接好地线。
3.  将模拟传感器接到A0脚,接好正负极。注意正极接在3.3V的位置。
Arduino 101模拟心率监测图3
4. 源代码: [mw_shl_code=applescript,true]/*
Copyright (c) 2015 Intel Corporation. All rights reserved.

This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.

This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/

/*
This sketch example partially implements the standard Bluetooth Low-Energy Heart Rate service.
For more information: https://developer.bluetooth.org/ ... s/ServicesHome.aspx
*/

#include <CurieBLE.h>

BLEPeripheral blePeripheral; // BLE Peripheral Device (the board you're programming)
BLEService heartRateService("180D"); // BLE Heart Rate Service

// BLE Heart Rate Measurement Characteristic"
BLECharacteristic heartRateChar("2A37", // standard 16-bit characteristic UUID
BLERead | BLENotify, 2); // remote clients will be able to get notifications if this characteristic changes
// the characteristic is 2 bytes long as the first field needs to be "Flags" as per BLE specifications
// https://developer.bluetooth.org/ ... ate_measurement.xml

int oldHeartRate = 0; // last heart rate reading from analog input
long previousMillis = 0; // last time the heart rate was checked, in ms

void setup() {
Serial.begin(9600); // initialize serial communication
pinMode(13, OUTPUT); // initialize the LED on pin 13 to indicate when a central is connected

/* Set a local name for the BLE device
This name will appear in advertising packets
and can be used by remote devices to identify this BLE device
The name can be changed but maybe be truncated based on space left in advertisement packet */
blePeripheral.setLocalName("HeartRateSketch");
blePeripheral.setAdvertisedServiceUuid(heartRateService.uuid()); // add the service UUID
blePeripheral.addAttribute(heartRateService); // Add the BLE Heart Rate service
blePeripheral.addAttribute(heartRateChar); // add the Heart Rate Measurement characteristic

/* Now activate the BLE device. It will start continuously transmitting BLE
advertising packets and will be visible to remote BLE central devices
until it receives a new connection */
blePeripheral.begin();
Serial.println("Bluetooth device active, waiting for connections...");
}

void loop() {
// listen for BLE peripherals to connect:
BLECentral central = blePeripheral.central();

// if a central is connected to peripheral:
if (central) {
Serial.print("Connected to central: ");
// print the central's MAC address:
Serial.println(central.address());
// turn on the LED to indicate the connection:
digitalWrite(13, HIGH);

// check the heart rate measurement every 200ms
// as long as the central is still connected:
while (central.connected()) {
long currentMillis = millis();
// if 200ms have passed, check the heart rate measurement:
if (currentMillis - previousMillis >= 200) {
previousMillis = currentMillis;
updateHeartRate();
}
}
// when the central disconnects, turn off the LED:
digitalWrite(13, LOW);
Serial.print("Disconnected from central: ");
Serial.println(central.address());
}
}

void updateHeartRate() {
/* Read the current voltage level on the A0 analog input pin.
This is used here to simulate the heart rate's measurement.
*/
int heartRateMeasurement = analogRead(A0);
int heartRate = map(heartRateMeasurement, 0, 1023, 0, 100);
if (heartRate != oldHeartRate) { // if the heart rate has changed
Serial.print("Heart Rate is now: "); // print it
Serial.println(heartRate);
const unsigned char heartRateCharArray[2] = { 0, (char)heartRate };
heartRateChar.setValue(heartRateCharArray, 2); // and update the heart rate measurement characteristic
oldHeartRate = heartRate; // save the level for next comparison
}
}[/mw_shl_code]
5. 启动Arduino IDE。注意,Arduino有cc和org,板子不同,开发平台是不同的,需要安装驱动才能找到板子。Arduino 101板的驱动在arduino.cc上下载(见前篇日志)。启动后选择101板和对应的端口。将源代码加载并上传到101板。
Arduino 101模拟心率监测图4
6.  点击nRF Toolbox中的HRM,点击CONNECT,在弹出的蓝牙列表中选择HeartRateSketch(也可以是任何你自己给代码取的名字)。可以看到显示了心率值。当我们遮住或不遮光敏电阻时,可以看到值在不停地变化。

点击CONNECT后灯亮,点击DISCONNECT灯灭。


中二点  高级技师

发表于 2019-3-14 18:44:13

抱紧大腿
回复

使用道具 举报

gckulo  高级技师

发表于 2019-3-14 18:45:04

虽然看不懂 但是还是很厉害的
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail