需要原理图工程,源码,PCB工程的朋友收藏,这篇文章关注我,私我吧!!!
基于STM32的智能手环设计与实现
- 摘要
- 一、研究背景及意义
- 二、实现功能
- 三、系统方案设计
- 系统方案设计框图
- 3.1 单片机芯片选择
- 3.2 显示器方案设计
- 3.3 倾角传感器设计
- 3.4心率检测传感器设计
- 3.5 温度传感器设计
- 3.6 无线数据传输设计
- 3.7 时钟模块设计
- 四、硬件电路设计
- 4.1 STM32单片机介绍
- 4.2 主要功能模块电路设计
- 4.2.1 电源电路设计
- 4.2.2 ADXL345倾角传感器电路设计
- 4.2.3 心率传感器电路设计
- 4.2.4 OLED显示屏电路设计
- 4.2.5 DS18B20温度电路设计
- 4.2.6 DS1302时钟电路设计
- 4.2.7 按键电路设计
- 4.2.8 蜂鸣器报警电路设计
- 4.2.9 GPS定位模块电路设计
- 4.2.10 蓝牙模块电路设计
- 五、软件编程设计
- 5.1软件整体流程图设计
- 5.2 心率程序设计
- 5.3 液晶显示程序设计
- 5.4 按键程序设计
- 5.5 DS18B20温度采集程序设计
- 5.6 DS1302时钟程序设计
- 5.7 蜂鸣器报警程序设计
- 5.8 ADXL345三轴传感器程序设计
- 5.9 GPS程序设计流程图
- 5.10 蓝牙程序流程图设计
- 六、实物视频及图片
摘要
本次设计主要组成是STM32单片机电路、ADXL345加速度传感器、心率检测电路、OLED液晶显示电路、电源电路、时钟DS1302和DS18B20温度传感器组成。通过ADXL345测量重力加速度,是用来判断人体状态,根据状态的数值变化进行计步功能。通过心率传感器测试,通过手指脉动放大经过比较器处理后发送给单片机进行心率采集。并将步数、心率,温度、时间等信息显示在液晶OLED上,当跌倒或者数据异常时蜂鸣器报警并且我们也可以通过蓝牙模块把当前的数据发生到手机端进行提醒,通过gps定位模块把当前位置也发送到手机端进行显示。本次设计功能比较全面,具有良好的市场前景。
一、研究背景及意义
随着科技与时代不断进步,电子感应与加速计技术出现,取代了以前的技术,因此电子计步器随之而来。电子计数器,振动传感器是目前电子计步器比较重要的两大组成部分。心率是指一般人心脏在安静状态下每分钟跳动的次数,因为年龄或则性别等因素,存在着差异性。这是检验人体健康标准的一大指标,也是本次设计较为突出的一大重点。并且我们还通过温度传感器显示当前温度和时钟芯片显示当前时间便于训练。
在这个大环境的发展格局下,想设计一款集合计步功能和心率体温计时跌倒报警定位检测功能于一身的智能运动手环。
从而达到以下目的:
(1) 有利于社会公共交通安全;
(2) 提高人们法律意识;
(3) 使之便捷、安全、准确、高效,便于提高人体日常红外运动的普及化;
二、实现功能
- 以STM32单片机为数据处理中心,通过DS18B20采集当前温度,MAX30102传感器采集当前人体心率值;
- 通过DS1302时钟芯片可以方便时刻观察时间;
- 通过ADXL345进行计步里程,并且通过OLED液晶显示屏显示当前信息;
- 采用按键可以进行修改非常方便快捷;
- 通过GPS对当前运动者进行定位如果发生意外情况通过蓝牙模块发送蓝牙进行提醒;
- 时钟具有掉电行走功能,重新上电后无需校准;
三、系统方案设计
系统方案设计框图
3.1 单片机芯片选择
方案一:选择ST公司的STC89C52单片机作为主控制器,STC89S52主要是低功耗、高性能器件,具有良好的存储功能。该单片机价格低,功能比较全面, 功耗小,但它是个8位存储器,不能达到实现本次设计的需求,故而因此放弃。
方案二:STM32单片机是一款超低功耗的32位器件,功能性比较丰富,模电数电集中到一个芯片上,可以较好地解决很多问题,实用性比较强。STM32F103C8T6是该系列应用较为广泛的一款控制芯片,该芯片运行在32位系统、支持精简指令集、超低功耗的混合型单片机,具有高可靠性、低功耗、易扩展、体积小、性价比高、电路简单等优势,在精密仪器上被广泛应用,以及很多智能化产品中,提高产品质量,提升经济价值,已成为众多单片机系列中一颗耀眼的新星。因此选择方案二。
3.2 显示器方案设计
方案一 :LED数码管,这种数码管的最大优势是价格较低,性能稳定,可以非常简便的和单片机相连。主要是用于数字显示上,实用性较高。但是数码管显示的数字有限,本次设计涉及数字较多,因此达不到设计的要求,此方案放弃。
方案二: 选择OLED液晶显示,常和单片机配合使用,他可以显示大量的数据,文字等等,显示的位数也比较多,外观较好,清晰,并且它的程序编写起来比较简单。经济方面价格也比较低廉,其中OLED液晶显示屏随是比较有特色的一款,很适用于本次设计,综合下来选择此方案。 故选择方案二。
3.3 倾角传感器设计
方案一 :选用陀螺仪来检测位置的信息,功能比较强,精度准确,稳定性强,但是此器件精度要求高,控制起来较为复杂,不适用于本次设计。
方案二:选用ADI公司的倾角传感器ADXL345模块来检测位置的信息,ADXL345功能比较全面,有很多存储空间,其成本预算较低,便于控制。因此选择方案二。
3.4心率检测传感器设计
方案一 :选用压力传感器收集心率血氧数据,但其抗干扰能力较差,会对设计测量产生偏差,且测量的难度相对较大,很难达到本次设计的预期目的,所以排除此方案。
方案二 :选用MAX30102红外模块采集心率信号,此模块对管心率信号采集较为稳定,其抗干扰能力较强,测量的数值比较准确,波形稳定,相对于本次设计是一个很好的选择。故选择方案二。
3.5 温度传感器设计
DS18B20温度传感器是美国达拉斯(DALLAS)半导体公司推出的应用单总线技术的数字温度传感器。该器件将半导体温敏器件、A/D转换器、存储器等做在一个很小的集成电路芯片上。温度传感器之所以选择单线数字器件DS18B20,是在经过多方面比较和考虑后决定的,此传感器不但可以防水温度检测的范围比较广,价格低廉而且使用起来也比较方便。
3.6 无线数据传输设计
方案一 :选择采用NRF24L01模块进行传输,但是传输过程中需要只是2快板子分为主从才可以进行无线通信。
方案二: 选用HC05蓝牙模块,我们只需要通过此模块进行串口通信在手机端下载厂家提供的APP就可以完成数据的传输和显示,价格也比较便宜传输数据稳定。故选择方案二。
3.7 时钟模块设计
方案一 :选择单片机内部时钟,通过程序来显示当前的信息和参数,不需要外接传感器,但是内部时钟精度较差,非常容易产生积累误差并且无法掉电行走。
方案二 :选用DS1302时钟芯片,此芯片价格便宜,是专门用来处理万年历方面的信息,精准度较高,并且数据可以通过电子进行掉电行走,上电后无需重新设置。故选择方案二。
四、硬件电路设计
4.1 STM32单片机介绍
单片机的最小系统应能让单片机正常工作并且能够正常的发挥其功能的一个集成在一块芯片上的完整计算机系统。它是一个小型的电脑设备所具有的那样拥有者明显的大脑,也就是控制的核心。同时,也具有一些输出设备,还有就是定时器,能够作为时间的控制中心,具有作为通讯的接口,把所有需要用到的都集中在一个小小的芯片之上,这就是单片机。当然单片机现在的发展已经比较先进,我们来看一下作为最基本的存在它是怎样的。如下图:
STM32F103是STM32f101的增强型单片机,在32位的MCU中性能最强;具有出众的控制和通讯,非常适合低电压/低功耗的应用场合。下图为STM32内核:
对于本次设计,我们选择的单片机是STM32F103C8T6单片机。此单片机和51系列相比多了很多功能,不但运行速度比51单片机要快很多,自带2个AD转换,方便我们在设计烟雾和CO的时候免去了需要加外部ADC进行转换,非常方便;
STM32实物图如下图所示:
4.2 主要功能模块电路设计
4.2.1 电源电路设计
单片机的电源采用直流5V供电,电源模块包括一个3脚的电源座子和6脚的电源开关。电源座子用于连接外部的电源插头,电源开关用于控制整个单片机的电路开和关。原理图如下:
4.2.2 ADXL345倾角传感器电路设计
ADXL345的内部功能结构如下图所示,X、Y、Z三个相互正交的的方向上的加速度由 G-Cell传感器感知,经过容压变换器、增益放大、滤波器和电压信号输出。然后我们就可以得到步数,我们设置步数距离后可以通过步数在计算里程,ADXL345内部功能图如下:
ADXL345的三个相互正交的测量方向如下图,固定在人体上后,这三个方向上的数据意义也就随之确定了。
引脚配置(顶视图):
ADXL345是一款小而薄的超低功耗3轴加速度计,分辨率高(13位),测量范围达±16g。数字输出数据为16位二进制补码格式,可通过SPI(3线或4线)或I2C数字接口访问。ADXL345非常适合移动设备应用。它可以在倾斜检测应用中测量静态重力加速度,还可以测量运动或冲击导致的动态加速度。其高分辨率(3.9mg/LSB),能够测量不到1.0°的倾斜角度变化。
4.2.3 心率传感器电路设计
测心率实际上也在同时检测血氧,只是基于本模块我们只用到心率检测,把血氧检测到的数据不显示,所以实际在运用的时候我们也在同时测血氧饱和度。
MAX30102 是一个集成的脉搏血氧仪和心率监测仪生物传感器的模块。它集成了一个红光 LED 和一个红外光 LED、光电检测器、光器件,以及带环境光抑制的低噪声电子电路。
原理说明:
传统的脉搏测量方法主要有三种:一是从心电信号中提取;二是从测量血压时压力传感器测到的波动来计算脉率;三是光电容积法。前两种方法提取信号都会限制病人的活动,如果长时间使用会增加病人生理和心理上的不舒适感。而光电容积法脉搏测量作为监护测量中最普遍的方法之一,其具有方法简单、佩戴方便、可靠性高等特点。
4.2.4 OLED显示屏电路设计
有机发光显示器(Organic Light Emitting Display,OLED)是一种新型发光和显示器件。OLED实质上是一个薄膜器件,即在阳极和阴极之间夹多层有机薄膜组成的稳定的绿色有机薄膜电致发光器件。当有电流通过时,这些有机材料就会发光。OLED使用普通的矩阵交叉屏,OLED位于交叉排列的阳极和阴极中间,通过对阳极和阴极组合的选通,可以控制每一个OLED的点亮。
液晶显示模块电路如图所示,P5是一个4孔的排针,专门供OLED液晶显示屏使用,5V是指接的5V电压;显示屏的SCL引脚连接的是单片机的B6引脚,通过SCL引脚传输串行时钟数据;SDA引脚连接的是单片机的B7引脚,通过SDA引脚传输串行数据。
4.2.5 DS18B20温度电路设计
DS18B20 是美国 DALLAS 半导体公司推出的应用单总线技术的数字温度传感器。它的主要技术特性如下:
① 具有独特的单线接口方式,即微处理器与其接口时仅需占用 1 位I/O 端口;
② 支持多节点,使分布式多点测温系统的线路结构设计和硬件开销大为简化;
③ 测温时无需任何外部元件:
④ 可以通过数据线供电,具有超低功耗工作方式:
⑤ 测温范围为-55~+125℃,测温精度为±0.5℃:
⑥ 温度转换精度 9-12 位可编程,能够直接将温度转换值以 16 位二进制数码的方式串行输出。12 位精度转换的最大时间为 750ms。
DS18B20温度传感器结构图:
4.2.6 DS1302时钟电路设计
DS1302是一款专门处理时钟的芯片,晶振为32.768,
1、由美国DALLAS公司推出。
2、它是一种高性能、低功耗、带RAM的实时时钟电路。
3、DS1302使用方便,接线简单,适合此电子时钟的设计制作。
4、DS1302可以对年月日时分秒等进行计时,并且带有闰年补偿功能。
5、它可以一次传送多个字节的时钟信号。并且内部有存放数据的RAM寄存器
6、DS1302的 工作电压宽达2.5~5.5V。同时还提供了对后备电源的引脚。
1引脚:VCC2为主电源引脚。
8引脚:VCC1备用电源引脚。
备注:DS1302由Vcc1或Vcc2两者中的较大者供电。当Vcc2大Vcc1+0.2V时,Vcc2给DS1302供电。当Vcc2小于Vcc1时,DS1302由Vcc1供电。由于本设计未引用备用电源,只引用了1引脚,主电源引脚。
2和3引脚:X1、X2外接晶振引脚。(外接32.768kHz晶振)
4引脚:GND为接地引脚。
5引脚:CE/RST为复位/片选线。通过把RST输入驱动置高电平来启动所有的数据传送。
RST接通控制逻辑,允许地址/命令序列送入移位寄存器;
RST提供终止单字节或多字节数据的传送手段。
6引脚:I/O为数据输入输出口。在控制指令字输入后的下一个SCLK时钟的上升沿时,数据被写入DS1302,数据输入从低位即位0开始。同样,在紧跟8位的控制指令字后的下一个SCLK脉冲的下降沿读出DS1302的数据,读出数据时从低位0位到高位7。
7引脚:SCLK为串行时钟,输入。
4.2.7 按键电路设计
本设计一共设置有5个控制命令按键:参数设置;设置加;设置减;清除当前步数里程。我们采用的是独立式的按键,独立式按键就是每单个的按键就会有一条单独的I/O线,他们之间互不影响,按键一端接地,采用的是低电平有效,按下按键就会连接该条线路。键盘抖动的消除采用的是软件消除,因为硬件需要外接器件成本高也比较麻烦,软件消除的原理是线建立一个子程序,在检测到按键闭合时先执行子程序延时功能,按键断开时也执行数毫秒的功能从而达到消除抖动的目的。电路图设计:
4.2.8 蜂鸣器报警电路设计
按键我们可以用于设置心率体温上限,血氧下限,当参数不在范围内蜂鸣器进行声光报警提醒。
蜂鸣器是一种蜂鸣元器件,供电时就进行蜂鸣,操作非常简单。市场上有很多蜂鸣器,我们选择提供5V电源的蜂鸣器被认为是实用的。当我们使用蜂鸣器时,我们有一个小技巧。如果我们觉得蜂鸣器不够响,我们可以把蜂鸣器顶部的纸去掉。在本次设计中,当检测到温度或者烟雾浓度高于报警上限时,蜂鸣器报警。蜂鸣器电路如图3.6所示,由3部分组成,一部分是一个1k的电阻,第二部分是一个PNP三极管,最后一部分就是蜂鸣器。三极管采用NPN三极管,其主要功能是放大电流和电平特性,因为单片机电路的电路非常小,无法提供蜂鸣器所需的电流,经过三极管放大驱动电流后,电流放大200倍,驱动蜂鸣器报警。
4.2.9 GPS定位模块电路设计
GPS接收模块通过它的接收天线获取卫星信号,经过变频、放大、滤波、相关、混频等一系列处理,可以实现对天线视界内卫星的跟踪、锁定和测量。在获取了卫星的位置信息和测算出卫星信号传播时间之后,即可计算出天线位置。用户通过输入输出接口,与GPS接收模块进行信息交换,实现功能。GPS接收模块内部结构如图所示。
该设计中GPS信号接收模块所选用的是VK2828U7接收模块,该模块是由美国瑟孚科技有限公司所生产。主要使用到的引脚如下图所示。该模块具有12通道并行接收能力,所接收的GPS信号属于民用频段的L1信号(1575.42MHz),在没有SA干扰的情况下平均定位误差为10米,动态速度误差为0.1米/秒,信号灵敏度达到-142dBm,冷启动定位时间为42秒,热启动时间为38秒,重新定位时间仅仅需要8秒。
4.2.10 蓝牙模块电路设计
本次设计采用的无线通信模块为HC05。HC05模块是主从一体的,而且性能较高,可以与PDA、手机、电脑等具有蓝牙功能的设备实现配对,该模块所支持的波特率范围非常大,为4800~1382400,而且该模块和3.3V或5V的单片机系统相兼容,极其方便、灵活。
五、软件编程设计
完整的控制系统由硬件系统和软件系统组成,前一章主要阐述了系统的硬件电路的设计方案,若要充分发挥系统的设计功能,则需要支持硬件平台的软件程序,即烧写到单片机内部的程序。本设计利用STM32为控制中心,采用的的是STM32F103C8T6芯片,开发环境是Keil uVision5 by ARM软件,这款开发环境是目前STM32单片机系统的主流软件,使用的非常频繁。程序的烧录使用的是STLINKV2下载器进行烧录程序。
5.1软件整体流程图设计
主程序模块:系统上电后,我们需要配置个个传感器的引脚,然后初始化IIC 让oled进行液晶显示和ADXL345进行数据采集,采集完成后蓝牙串口初始化等待发送数据,DS18B20进行温度采集,心率传感器通过获取当前心率值,时钟显示当前的时间,最后把数据通过蓝牙发送到手机端,控制OLED显示当前采集到的数据,最后进入按键扫描判断按键是否按下如果按下则处理按键扫描函数。
如下图所示,是整个系统的主程序流程图:
5.2 心率程序设计
本次设计采用的是MAX30102芯片对人体心率或者血氧进行采集,我们此次是用来做心率采集,MAX30102我们采用的是IIC进行通信首先我们需要在程序里面配置IIC数据传输的引脚分别进行配置,然后对IIC进行初始化bsp_InitI2C()
; MAX30102写寄存器函数maxim_max30102_write_reg(uint8_t uch_addr, uint8_t uch_data);
MAX30102读寄存器函数maxim_max30102_read_reg(uint8_t uch_addr, uint8_t *puch_data);
MAX30102初始化maxim_max30102_init(); MAX30102读缓冲器FIFO maxim_max30102_read_fifo(uint32_t *pun_red_led, uint32_t *pun_ir_led);
计算心率,通过检测PPG (photoplethysmographic,光电容积脉搏波描记法)周期的峰值和相应的红/红外信号的AC/DC,计算出心率值
maxim_heart_rate_and_oxygen_saturation(uint32_t *pun_ir_buffer,
int32_t n_ir_buffer_length, uint32_t *pun_red_buffer,
int32_t *pn_spo2, int8_t *pch_spo2_valid,
int32_t *pn_heart_rate, int8_t *pch_hr_valid);
5.3 液晶显示程序设计
要让液晶显示屏正常工作,首先写入命令控制字,然后在写入需要显示的数据。写入命令控制字之前,必须用指令来查看液晶是否正在工作。如果正在工作,那就必须等待,直到液晶发出工作完成的信号时,才能够写入控制字和数据。液晶显示模块程序流程图如下图所示。
5.4 按键程序设计
按键电路有四个引脚。其中两两相同。我们在连接电路的时候只需要连接2个引脚就可以了。工作原理其实就是一个对信号的高低电平检测。在我们按键被按下时,单片机引脚的IO口就会检测为低电平。这些IO口电平特性的改变就会程执行相应的功能操作。判断按键是否按下if(K10){while(K10)去延时,数值加;if(K20){delay_key()延迟,然后while(K20);是否按下如果按下,数值减。单独按第三个按键就是清零流程图如下图所示:
5.5 DS18B20温度采集程序设计
从DS18B20中读取温度的过程是:首先获取DS18B20中的温度值,该温度值为BCD码形式,然后通过转换,以十进制形式输出温度值,且此时输出的温度值含有两位小数,但输出时没有小数点,输出的温度值是实际温度的一百倍。它的步骤如下:
(1)初始化函数
(2)读取温度传感器的温度
(3)计算实际温度值
如果测得的温度大于0,只要将测到的数值乘以0.0625即可得到实际温度;如果温度小于0,测到的数值需要取反加1再乘以0.0625才能得到实际温度。
5.6 DS1302时钟程序设计
5.7 蜂鸣器报警程序设计
蜂鸣器的正极性的一端联接到三极管上,为了防止三极管直接被导通我们加一个1K的限流电阻,通过单片机iO口来输出高点电平,当管脚为高电平时,三极管导通,这样蜂鸣器的电流形成回路,发出声音。当管脚为低电平时,三极管截至,蜂鸣器不发出声音。其电路如图所示。
流程图如下:
5.8 ADXL345三轴传感器程序设计
本次设计采用的是ADXL345三轴传感器来检测当前行走的步数,ADXL345有2种通信方式,我们采用的是IIC进行数据传输。首先我们需要在程序里面配置IIC数据传输的引脚分别为SCL对应A6 ,SDL对应A7,然后对ADXL345进行初始化Init_ADXL345();
写入开始信号和停止信号。void ADXL345_Start();void ADXL345_Stop();
接收应答信号:bit ADXL345_RecvACK(),
ADXL345开始读取采集到的数据BYTE ADXL345_RecvByte();
读取ADXL345的加速度值,从而判断是否发生位移void Multiple_read_ADXL345(void);
如果读取到的数据为0XE5表示发生位移行走。devid=Single_Read_ADXL345(0X00); if(devid!=0XE5)
5.9 GPS程序设计流程图
先是STM32单片机对串口的引脚进行配置,配置完成后我们选择需要用到的串口引脚进行初始化,引脚初始化完成后我们选择相对应的波特率来进行串口通信,延迟一段时间后开始获取采集信息,本次设计使用了串口3,4G模块 – USART1,GPS – USART2,BLE – USART3,DEBUG – UART4GPS
。接下来进行串口时钟使能,RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);
然后是GPIO端口模式设置,GPS数据采集部分流程图如下图所示:
5.10 蓝牙程序流程图设计
本次设计使用HC-05蓝牙模块作为单片机和手机间的的通信工具。首先给蓝牙透传模块上电,此时led闪烁。单片机上的蓝牙模块也上电工作,蓝牙主要是通过串口进行数据传输,初始化显示内容为uchar code Init1[]="WELCOME: ";延迟void HC-05 delay(uint z);
写入命令void RART_com(uchar com);
写数据void write_data(uchar date);
初始化void HC-05(void)读取字节for(i=0;i<8;i++) {write_data(Init1[i]);}
最后我们通过手机点击“搜索位于有效范围内的设备”,系统将搜索蓝牙设备,默认设备名称“CH-05”,双击或者点击右键选择“添加蓝牙设备”, 输入配对密码(默认为“1234”)。点击“下一步”,如果密码正确,则单片机和手机之间则建立通信,在手机选择波特率9600,在手机上显示经纬度信息和时间。下图是HC-05蓝牙通信模块流程图:
六、实物视频及图片
这里经纬度和手机指南针做一下对比,手机经纬度如下:
测试结果还是比较准确的。
手机APP设计:
视频如下:
基于STM32的智能手环设计