Arduino之个人健康助理——简易智能药盒系列2
OLED显示
1.所需硬件
脉搏传感器
OLED模块
Arduino主板
2.连接方式
脉搏传感器与主板连接
s — A0
+— 5V
-— GND
OLED模块与主板连接
GND—GND
VCC—3.3V或5V
SCL—A5
SDA—A4
3.基本思路
脉搏传感器原理
首先,需要简要了解一下脉搏传感器大致原理。
脉搏传感器能把脉搏跳动压力转化为电信号输出(以电压形式)。基于这种原理,就可以利用电压值的变化计算脉搏跳动数。
计算脉搏数的思路
如图,跳离直线y=v0的点A1,A2,A3可表示为脉搏跳动的点(脉搏跳动,输出电压增大),而直线y=v0上的其余点则为脉搏平静时的点。如果可以获得每次跳动时的时刻点t1,t2,t3,从而求得Δt,就可利用 跳动次数=总时间/时间间隔 的公式求得每段Δt上的平均脉搏数。
绘制心率图的思路
因为脉搏的跳动导致电压的变化,于是就可以利用电压的变化来绘制折线图(先绘点,再连线)。将某一点的电压值以一定比例缩放为合适的值,作为该点的纵坐标,对应该点的横坐标(横坐标对应时刻点)。随着时间变化,点的横坐标向前推移,纵坐标随之变化。此时再将点与点之间连上直线,即可绘制出心率折线图。
4.代码
声明
#include <Adafruit_SSD1306.h> //调用一个库文件#define OLED_Address 0x3C //用OLED_Address取代0x3C//0x3C——16进制数(通讯地址)
#define UpperThreshold 550 //用UpperThreshold取代550
#define LowerThreshold 500 //用LowerThreshold取代500
//UpperThreshold,LowerThreshold为引脚输出模拟电压值的阈值
Adafruit_SSD1306 oled; //定义变量名为oled
定义变量
//定义变量
int x=0; //当前点的横坐标
int lastx=0; //上一个点的横坐标
int lasty=0; //上一个点的纵坐标
int LastTime=0; //上一次测量的毫秒数
bool BPMTiming=false; //LastTime是否为正确的脉搏起始计时点
bool BeatComplete=false; //一次跳动是否完成=是否可以开始计算下一次跳动(取决于起始计时点是否正确和是否为跳动间隔期)
int BPM=0; //脉搏跳动数
setup函数
void setup() {oled.begin(SSD1306_SWITCHCAPVCC, OLED_Address); //初始化oled屏幕的通讯地址为OLED_Address(也就是0x3C)oled.clearDisplay(); //oled清空显示oled.setTextSize(2); //设置oled显示字体为2号字体
}
loop函数
void loop()
{if(x>127) //若屏幕显示已满,清空再来{oled.clearDisplay(); //oled清空显示x=0; //当前点横坐标赋值为0lastx=x; //上一个点横坐标也为赋值为0}int value=analogRead(0); //analogRead函数用于读取引脚的模拟电压值,参数0表示所有获取电压值的引脚为A0,返回值为引脚的模拟量电压值oled.setTextColor(WHITE); //oled显示字体为白色int y=20-(value/45); //当前点的纵坐标(取决于引脚获取的电压值)oled.writeLine(lastx,lasty,x,y,WHITE); //从上一个点到当前点画线lasty=y; //将当前点坐标赋给上一个点,当前点变成上一个点lastx=x;//计算BMP if(value>UpperThreshold) //如果跳动{if(BeatComplete) //如果上一次跳动完成,可以开始计算下一次跳动{ BPM=millis()-LastTime; //millis函数返回的Arduino板开始运行当前程序时的毫秒数,两次测量中间间隔的毫秒数BPM=int(60/(float(BPM)/1000)); //计算BPM(跳动数=总时间/跳动时间间隔)BPMTiming=false; //该次跳动的BPM值已经计算,要进入下一次BPM计算,而起始计时点还为原来的起始计时点BeatComplete=false; //起始计时点错误,跳动未完成}if(BPMTiming==false) //将起始计时点变为正确起始计时点{LastTime=millis(); //将现在的毫秒数赋变为上一次的毫秒数 BPMTiming=true; }}if((value<LowerThreshold)&(BPMTiming)) //如果起始计时点正确且进入跳动间隔期BeatComplete=true; //一次跳动完成//显示BMP值oled.writeFillRect(0,19,128,20,BLACK); //画一个填充矩形 oled.setCursor(0,19); //设置oled内容显示的位置oled.print(BPM); //设置oled显示的内容oled.print(" BPM");oled.display(); //设置完成,更新显示内容x++; //横坐标+1,进入下一个循环
}
5.最终效果
最终OLED模块上显示出心率折线图和脉搏数(BPM)。
PS: 代码小白初次尝试,还请大佬们多多包涵,多多指点。
Arduino之个人健康助理——简易智能药盒系列2相关推荐
- arduino智能浇花系统_解放双手!自己动手做一个简易智能浇花系统
原标题:解放双手!自己动手做一个简易智能浇花系统 面对疫情,宅在家的我们可以以各种方式为战"疫"一线的医护工作者.紧急研究病毒的科研人员.口罩厂日夜工作的人们......加油打气. ...
- matlab智能小车避障,Arduino智能小车系列教程4——超声波避障
Arduino智能小车系列教程4--超声波避障 Arduino智能小车系列教程 准备材料 超声波模块HC-SR04 舵机固定架 舵机安装 超声波接线 代码测试 代码详解 int getDistance ...
- 嵌入式单片机智能药盒设计(含代码)
目录 前言 设计的内容 (1)显示 (2)定时时间与用药量的设定 (3)实时时间调节 (4)报警功能 时钟模块 蓝牙模块 系统软件设计 系统主程序 按键函数 中断服务函数 作品展示 测试药定时提醒功能 ...
- 基于Wio Terminal的简易智能家居中控系统(初代版本)
经过不断地踩坑(学习),初代的简易智能家居中控系统已经做好了,在申请项目时填写的功能都做出来了,但是有些功能不是用Wio Terminal实现的(一方面是因为代码量太大,会给Wio Terminal的 ...
- 简易智能手环制作教程
前言: 为了方便查看博客,特意申请了一个公众号,附上二维码,有兴趣的朋友可以关注,和我一起讨论学习,一起享受技术,一起成长. 转载地址:简易智能手环制作教程 1.智能手环简介 智能手环是一种穿戴式智能 ...
- mmse评估量表_简易智能精神状态评价量表(MMSE
<简易智能精神状态评价量表(MMSE>由会员分享,可在线阅读,更多相关<简易智能精神状态评价量表(MMSE(3页珍藏版)>请在人人文库网上搜索. 1.Xxxxx医院简易智能/精 ...
- 特别提醒蓝牙语音智能药盒的设计思路(二)TTS技术应用篇,附手机小程序界面
全文3000字,阅读时间约8分钟,建议收藏后慢慢看 目录 引言 蓝牙TTS智能药盒方案系统图 智能药盒是什么 智能药盒为什么需要语音提醒 语音提醒功能为什么要用TTS技术 TTS语音提醒的应用场景 1 ...
- 基于51单片机简易智能家居
基于51单片机的智能家居的设计 前言 一.项目简介 二.开发环境/工具: 1.Keil 5/Keil 4 2.STC-ISP 3.蓝牙串口助手 4.手机app 三.硬件设计: 1.单片机与蓝牙模块连接 ...
- 基于arduino uno 开发板制作的 智能书包项目
基于arduino uno 开发板制作的智能书包,当时收短视频启发,集合自动售货机的代码和RC522 读卡模块代码结合制作,现基本功能可以实现 ,目前代码部分尚不稳定需要继续改进 //一个智能书包小发 ...
最新文章
- windows 下搭建Web服务器
- matplotlib的下载和安装方法
- java定义一个盒子类box_定义一个Box(盒子)类,在该类定义中包括数据成员: length(长),width(宽)和height(...
- Linux之脚本执行
- android socket io和服务器_Java socket通讯服务器和客户端教学版
- Effective Java之对可恢复的情况使用受检异常,对编程错误使用运行时异常(五十八)
- win7下mongodb 2.6安装方法
- linux下解压.tar.bz2文件
- php use闭包参数,php 闭包use的使用
- 将Windows文件挂在到Linux上
- java 继承重写_java 封装 继承 重写 多态
- win7(64,32)下JDK的安装和配置
- Canvas beginPath()、moveTo()、 lineTo() 、stroke() 绘制直线路径,fillText() 绘制填色的文本
- FlasCC例子研究之bitmapdata
- 《沸腾十五年》 豆瓣评分[8.20]覆雨翻云的中国网事; 荡气回肠的产业传奇;虚拟世界的真实讲述;万象网络的还原走笔。...
- [GIS笔记] 闾国年:地理全息与全息GIS(未来的GIS)
- 向日葵公主与驴的爱情故事
- 不只是技术!成为IT经理必备的十大软技能
- 【Java 8 新特性】Java 8 Collectors:joining()使用示例
- MySQL实现7种 SQL JOINS