【雕爷学编程】Arduino动手做(100)---MAX30102手腕心率模块3

37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来—小小的进步或是搞不掂的问题,希望能够抛砖引玉。

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验一百:MAX30102血氧仪手腕心率脉搏检测心跳传感器模块

程序二:与心跳同步点亮的LED灯
实验开源图形编程(Mind+、编玩边学)

实验串口返回情况

Arduino实验场景图

程序三:通过红外读数感知存在
Arduino参考开源代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
/*
  【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  程序三:通过红外读数感知存在
*/
 
#include <Wire.h>
#include "MAX30105.h"
 
MAX30105 particleSensor;
 
long samplesTaken = 0; //用于计算 Hz 或读取速率的计数器
long unblockedValue; //通电时的平均 IR
long startTime; //用于计算测量率
 
void setup() {
  Serial.begin(9600);
  Serial.println("MAX30105 存在感测示例");
 
  //初始化传感器
  if (particleSensor.begin(Wire, I2C_SPEED_FAST) == false) //使用默认 I2C 端口,400kHz 速度
  {
    Serial.println("没有找到MAX30105,请检查接线/电源。 ");
    while (1);
  }
 
  //设置感应最大 18 英寸,最大 LED 亮度
  byte ledBrightness = 0xFF; //选项:0=关到 255=50mA
  byte sampleAverage = 4; //样本平均值选项:1、2、4、8、16、32
  byte ledMode = 2;  //工作选项:1 = 仅红色,2 = 红色 + IR,3 = 红色 + IR + 绿色
  int sampleRate = 400; //采样率选项:50、100、200、400、800、1000、1600、3200
  int pulseWidth = 411; //脉宽选项:69、118、215、411
  int adcRange = 2048; //选项:2048、4096、8192、16384
 
  //使用这些设置来配置传感器
  particleSensor.setup(ledBrightness, sampleAverage, ledMode, sampleRate, pulseWidth, adcRange);
 
  particleSensor.setPulseAmplitudeRed(0); //关闭红色 LED
  particleSensor.setPulseAmplitudeGreen(0); //关闭绿色 LED
 
  //上电时取平均 IR 读数
  unblockedValue = 0;
  for (byte x = 0 ; x < 32 ; x++)
  {
    unblockedValue += particleSensor.getIR(); //读取 IR 值
  }
  unblockedValue /= 32;
 
  startTime = millis();
}
 
void loop() {
  samplesTaken++;
 
  Serial.print("IR[");
  Serial.print(particleSensor.getIR());
  Serial.print("] 赫兹[");
  Serial.print((float)samplesTaken / ((millis() - startTime) / 1000.0), 2);
  Serial.print("]");
 
  long currentDelta = particleSensor.getIR() - unblockedValue;
 
  Serial.print(" 增量[");
  Serial.print(currentDelta);
  Serial.print("]");
 
  if (currentDelta > (long)100)
  {
    Serial.print("开始测量!");
  }
 
  Serial.println();
  delay(1000);
}

  

实验串口返回情况

程序四:读取板载温度传感器
Arduino参考开源代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
/*
  【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  程序四:读取板载温度传感器
  下载库: http://librarymanager/All#SparkFun_MAX30105
*/
 
#include <Wire.h>
 
#include "MAX30105.h"
MAX30105 particleSensor;
 
void setup() {
  Serial.begin(9600);
  Serial.println("正在初始化...");
 
  // 初始化传感器
  if (particleSensor.begin(Wire, I2C_SPEED_FAST) == false) //使用默认 I2C 端口,400kHz 速度
  {
    Serial.println("没有找到MAX30105,请检查接线/电源。");
    while (1);
  }
 
  //LED 的功率非常低,不会对温度读数产生太大影响,但是
  //您可能想要关闭 LED 以避免任何局部加热
  particleSensor.setup(0); //配置传感器。关闭 LED
  //particleSensor.setup(); //配置传感器。使用 25mA 驱动 LED
 
  particleSensor.enableDIETEMPRDY(); //启用临时就绪中断,这是必需的。
}
 
void loop() {
  float temperature = particleSensor.readTemperature();
 
  Serial.print("摄氏温度=");
  Serial.print(temperature, 4);
 
  float temperatureF = particleSensor.readTemperatureF();
  Serial.print(" 华氏温度=");
  Serial.println(temperatureF, 4);
 
  Serial.println();
  delay(1000);
 
}

  实验串口返回情况

 

posted @   行者花雕  阅读(162)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
点击右上角即可分享
微信分享提示