学生姓名:向洋
班 级:交控2018-04班
指导教师:刘建阳
毕设题目:基于STM32的智能床垫设计
一、概况
1.选题意义
随着科学技术的飞速发展,互联网技术对人们日常生活的影响越来越大,尤其是近些年来物联网在智能家居中的应用较为广泛,在物联网技术支持下,不断对智能家居进行创新,可以满足人们不断增长的新需求。本毕业设计拟研究并实现基于STM32单片机的智能床垫。在人们睡眠时,可以检测到人的心率脉搏,并能够探测到人睡眠时的压力分布以及压力值变化,并对采集数据进行处理,从而对睡眠质量有一定掌握,也可降低人们(尤其老年人)在睡眠中的发生危险的概率。同时,能以手机作为上位机,实现STM32单片机与手机的通讯与数据的传输,并在微信小程序上呈现。该设计拟以STM32F103为控制核心,同时搭配温度传感器、心率传感器、薄膜压力传感器等实现数据的采集和状态检测,并能够使用STM32多路串口等实现与上位机的通讯。当在数据监测异常时应能实现声光报警,同时应实现语音报警,将紧急情况通知到远处的紧急联系人的功能(紧急电话或者紧急短信)。在非紧急情况下,这些采集的数据经过算法处理也能作为人们的睡眠质量情况的一个参考,可以综合评估出睡眠质量,并在微信小程序以及单片机屏幕上展示,能够让使用者更加直观的了解各项数据和自身睡眠质量。
2.任务分解
(1)充分了解物联网现状,并能有自己的智能床垫实现方案;
(2)对于硬件部分,要能够熟练使用C语言以及编程烧录工具MDK5,对单片机各个部分都要学习了解并能够使用。
(3)能够熟练使用C语言进行STM32单片机的开发,能够顺利实现以上传感器数据的采集,并在终端设备得以展现;
(4)能够成功实现通讯功能,即能够使用网络(比如蓝牙、蜂窝网等)来进行数据的传输,以及紧急状况下的电话拨打或短信功能;
(5)能够完成单片机TFTLCD屏幕以及微信小程序端的用户界面设计、具体操作功能设计,设计到网页设计,前端和后端的代码,数据库;
(6)需要进行外壳封装的建模,并3D打印后用于实物组装。建的模型要符合一定强度、结构以及功能;
(7)整理资料并攥写论文,保证内容充实,前后逻辑正确,保质保量完成,并完成答辩PPT;
二、已完成工作
1.设计的整体框架:
本毕业设计是基于STM32单片机来设计开发的。以STM32作为运算核心,向外分出三个主要的功能模块,分别为串口通信、存储介质的运用,以及ADC模数转换模块。手机端我自己设计开发了一个微信小程序,通过BLE蓝牙通讯与单片机建立连接,实现了单片机的关键采集数据向小程序端传输,以及小程序端作为遥控器控制单片机的双向数据传输。具体的框图如下图图一所示:
如上图图一所示:按键、语音、红外、手机控制是作为控制模块,可以对该单片机进行控制。手机蓝牙、智能语音、以及蜂窝网(SIM900A)都是通过串口来实现与STM32单片机的通信的,这是一个“网”的概念,建立了通信才能实现数据在不同设备间的传输,远距离传输等功能。微信小程序端,主要任务是接收到单片机发来的一个个数据包,利用全局缓存或者上传到云端数据库,数据经过处理后会在小程序页面对应位置进行显示。单片机端的实物照片如图二所示:
2.毕设开题时已完成工作:
(1)掌握了stm32单片机,能够使用其进行开发
(2)完成了心率,压力,温度等多种数据的多路采集与数据处理
(3)实现了各种通信,能够用蓝牙连接到手机,能够语音、按键、红外控制等
(4)掌握了各种存储介质的使用,fatfs文件管理系统的移植
以上四点内容属于毕业设计的前期基础部分,在这里不再进行详细介绍。
3.最新完成工作内容:
(1)完善了单片机端的UI
在旧版本的UI设计中,整个页面的切换逻辑都只有一层,这样的控制逻辑过于简单,内容呈现也过于单调,所以在新设计的UI中,我加入了“子页面”,页面循环不再是单层逻辑,而是两层循环,单片机端可以进入子页面进行循环,也可以在第一层页面循环,并且内容更加丰富了。单片机端的框图见图三:
要实现以上功能,相比之前,新的技术要点是:对于按键,要有长按和短按的区分,且实现松手检测,不放手不能重复扫描,我完善了按键扫描的代码,以满足以上要求。具体的UI界面实物组图如下图图四:
(2)单片机端节能方案
在本毕业设计中,加入了对节能方案的考虑。我在单片机端主要加入了两种节能模式,分别为待机模式和熄屏模式:
待机模式:在该模式中,最低只需要2微安电流,此时整个供电区将会掉电,也会关闭电压调节器,振荡器,并且SRAM以及寄存器的内容都会丢失。
熄屏模式:单片机关闭屏幕背光,适用于不看屏幕时,较节能。在该模式下,单片机整体是在运行的,只是屏幕不再点亮。该模式适用于夜间进行睡眠监测而不需要看屏幕时开启。屏幕驱动自带的关闭显示效果并不好,背光无法关闭,在黑暗条件下很明显。我自己编写了相关代码,成功关闭了背光,效果很好,达到了节能的目的。实际效果如下图五图六。
(3)大量数据流的保存
单片机端有多路传感器在不断地采集数据,在短时间内就可以采集到大量的数据流,,这些数据流在很多时候不能得到有效保存,只是作为过程量。为了能够保存这些数据流以供后续作为数据集研究,我做了一个可以保存大量数据流的系统,用户只需要简单的开启操作,其他的都由程序自己实现。实现该自动保存数据流的系统用到了FATFS文件管理系统,TF卡存储介质,EEPROM掉电存储,IIC协议,RTC及spi-flash等多种配置。按下保存按钮后,系统会进行数据流的保存,会将数据自动保存在.txt文本文件中,保存的数据写入,新建文件等一系列操作都是自动完成,如图七所示:
(4)微信小程序端UI设计及功能实现
对于微信小程序端的UI设计以及功能实现,我主要是在微信开发者平台中完全自主编写代码实现相应功能。在编写过程中,主要用到的编程语言及文件格式有JavaScript、json对象、WXML、WXSS等。对于数据的存储,我采用了云端数据库,将收到的数据进行分类储存起来。如下图图八:
该微信小程序可以实现多种功能,包括上传数据到数据库,从数据库中拉取数据;与单片机通过BLE蓝牙设置建立通讯;获取单片机传过来的传感器的实时数据并显示在相应界面;个人中心界面以及配套的各种小功能,历史查询,床位绑定,客服,地图查看等;亮度调节,图片查看,视频查看,发送弹幕4等;查看当日睡眠报告,查看周报等;蓝牙控制单片机等。除了以上的导航栏主页面,在每一个页面下还有很多子页面,在这里展示部分子页面,组图如下图图九:
(5)BLE蓝牙连接
微信小程序端与STM32单片机端的蓝牙通讯使用的是BLE低功耗蓝牙通讯,并且目前微信小程序开发的连接能力也只能是BLE蓝牙。实现连接的代码流程主要是调用相应的API,获取到蓝牙特定的UUID以及各种服务的特征值,并订阅相关时间,并开启监听,记录下传输过来的数据,如图十:
(6)小程序端的实时数据查看
要实现小程序端的实时数据查看,首先考虑数据怎么获取?数据获取是采用BLE蓝牙接收数据,又因为MTU限制为20字节,只能分包发送,所以对于实时心率,温度,压力数据,我用了三个数据包来存储它们。因为这是实时数据,不需要保存到云端数据库,我用的方法是使用全局缓存,新数据会自然覆盖老数据。好存好取,且具有全局存储的效果,解决了页面间的数据传递问题。如图十一:
对于数据库的操作,可概括为“增删查改”,用于数据管理。程序中用到数据库,主要是“增,查,改”的功能。“增”就是写入数据到数据库对应集合,写入的数据就是“字段”。“查”用的更为广泛,小程序页面显示的数据库相关内容都是从数据库中获取的,该过程就是“查”。“改”操作不会新增字段,只会在原有数据上进行更改。下图十二是运用到数据库的相关界面:
三、下一步工作计划
1.完善周报、日报的具体展示:对于微信小程序端的周报界面以及日报界面,我将改进之前的UI设计,并采用合理的数据评估方式。
2.制作外壳并进行装配:根据相关尺寸进行外壳设计,并考虑到实际使用中的一些操作设置外形,并预留相关接口、空间。
问题一:怎么实现微信小程序与STM32单片机之间的数据传输的?
回答:我使用的是BLE4.0蓝牙,微信小程序端连接硬件能力有限,只支持蓝牙低功耗 (BLE)。数据传输受限于MTU(20字节),所有数据我才用了分包发送,再根据每个包的“头尾”归类区分,一部分全局缓存在本地,一部分上传数据库。
问题二:在开发设计过程中,有遇到哪些困难吗?
回答:有的。比如说:串口通信协议不正确,无法进行数据传输;多路AD传感器怎么设置;微信小程序怎么调用蓝牙相关API;云端数据库怎么操作,增删查改;算法的实现,文件系统移植,文件创建管理等等很多问题,不过在刘老师的指导下,通过视频学习和查资料,这些问题都解决了。
在完成毕业设计的过程中,我学到了很多知识与技能。我认为知识和技能是需要积累的,毕业设计所需要的知识比较广泛,这也锻炼了我的自主学习能力。在假期,我就开始学习STM32相关知识,并跟着网课学习微信小程序的开发实战,并注重将理论知识同实际操作相结合。同时,也锻炼了我的表达能力和文字攥写能力,只有好的表达才能让对方清楚你的痛点和难点,并给到你帮助。
在这过程中,刘建阳老师给了我极大的帮助和指导。特别是在方向上,功能实现上都给了我很多启发和建议。毕业设计不是一蹴而就的,需要在交流中不断修改,不断完善。
毕业设计工作接近尾声,我将继续努力钻研,按计划完成设计任务,圆满完成毕业设计,交出一份令人满意的答卷。