毕业论文-基于三轴加速度传感器ADXL345和温湿度传感器DHT11的智能运动手环设计_第1页
毕业论文-基于三轴加速度传感器ADXL345和温湿度传感器DHT11的智能运动手环设计_第2页
毕业论文-基于三轴加速度传感器ADXL345和温湿度传感器DHT11的智能运动手环设计_第3页
毕业论文-基于三轴加速度传感器ADXL345和温湿度传感器DHT11的智能运动手环设计_第4页
毕业论文-基于三轴加速度传感器ADXL345和温湿度传感器DHT11的智能运动手环设计_第5页
已阅读5页,还剩58页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

湖南大学毕业设计(论文)第页目录1绪论 11.1课程研究目的及意义 11.2国内外智能手环的发展情况 11.2.1国内外计步器的发展情况 11.2.2国内外温湿度传感器的发展情况 31.3计步器的分类 42智能手环系统总体设计结构设计 62.1计步器模块总体设计 62.1.1计步器模块设计 62.1.2计步算法 72.2温湿度模块总体设计 122.3蓝牙模块总体设计 133智能手环硬件电路设计 133.1三轴加速度传感器电路 133.1.1加速度传感器的选择 133.1.2三轴加速度传感器的介绍 143.1.3三轴加速度传感器与STM32单片机的连接 173.2温湿度传感器电路 173.2.1DHT11简图 173.2.2温湿度模块工作原理 193.3蓝牙模块电路 213.3.1蓝牙模块简介 213.4液晶显示显示系统电路 233.4.1TFTLCD简介 233.4.2TFTLCD模块与STM32开发板的连接 253.5单片机最小系统 273.5.1STM32单片机简一开发板简要功能说明 274智能运动手环软件设计 304.1计步器流程图 304.1.1主程序流程图 304.1.2子程序流程图 314.3蓝牙主程序流程图 335智能手环的调试与结果分析 345.1实物系统调试 345.1.1实物图 345.1.2系统的调试 356总结与展望 37参考文献 37致谢 38附录 39附录A:主程序 39附录B:液晶显示模块程序 42附录C:三轴加速度传感器模块程序 43附录D:温湿度传感器模块程序: 46附录E:蓝牙模块程序: 481绪论1.1课程研究目的及意义智能化器件是现在发展最为快速的科学技术,在生产、休闲领域非常受青睐。在平常活动中,智能手环的诞生受到了越来越多人的青睐,手环最跟本的用途就是步数的测量,当你走路或者跑步时能帮你计算一共跑了多少步。其中我们探讨的以加速度传感器为根底的计步器就是利用了加速度特性来进行剖析,走路和跑步时身体的很多部位都不是静止的,会发生对应的加速度,加速度与时间成正弦曲线,而且可以在某点形成最大值,经过算法可以准确计算步数。温湿度也是本设计两个基础的数据。在人们的日常锻炼中,人们要始终关心身体状况的改变,只有很好的掌握好身体实时的状况的改变,人们才能更好的对自己的身体状况有一个了解。有特别重要的意义。总之,手环的研究对生活、健身特别重要。它是一个计步的器件,也是一个改善运动方法,与人体紧密连接的必要物品。1.2国内外智能手环的发展情况1.2.1国内外计步器的发展情况1947年,德意志人发明了全球第一个摆式陀螺加速度计。尔后的五十多年以来,非常多的新种类加速度器被开发探究,它的功能和准确度也有了更加的提升和健全。加速度器发明之后始终作为非常重要的惯性测量仪器,应用于惯性导航系统和惯性制导系统中,和各类运载体的自动行驶技术跟高技术武器的高精度制导联系在一起受到青睐。那个时候别的领域对它极少应用。现如今国内在加速度传感技术上依然使用传统的压电技术,精度仍然止步在3×10-6g水平上,并且体积略大,质量略重,对国内惯性制导技术有不良影响。这几年国内已经有不少公司对MEMS微加速度计进行了研发,然而在精度上并没有获得进步,基本上仅仅可以达到10-1g的程度。国内自从1968年开始了对微加速度技术的研发,含有硅微型压力传感器、微型电机和微型泵。十年来研究队伍一点点的壮大,2000年时候已然形成了四十多个单位的五十多个研发小组,在微加速度传感器方进行了非常多的研发试验,并得到了很大的进步。我国公开发表文献指出,我国研发地振动轮式机械陀螺的零偏稳定性可以达到80°/h,随机的噪声能到30°/。中国在不少的技术上跟国外比较发达国家相比并不在一个层面上,基本表现在大量生产时性能不能保证稳定和器件不能保证完好,很多方面急需研究。应用加速度传感器地计步器最需要解决问题是精确度问题。在精确度问题上,德国等欧洲国家研发的的计步器相对精确。然而因为机械生产的精确度低,器件集成性弱,以致与计步器的方便性不敌于国外的产品。国外现在研发相比成功的有电容式加速度传感器和压阻式加速度传感器。20世纪之后,发达国家已经将应用新型材料、新的原理、新的工艺研发出性能良好、低成可接受、可控化、简便化的传感器作为研发新型传感器的主要目标。1.2.2国内外温湿度传感器的发展情况1989年人类发明了第一个智能温度传感器。他结合了微电子技术、计算机技术和自动测试术。现如今,全世界已经研发出很多智能温度传感器器件。个别器件带有多路选择器、中央控制器、RAM、ROM。温度传感器也更加的智能化。温度传感器产品及湿度测量属于90年代兴起的行业。温度传感器的进步经过了三个阶段:老旧的独立式温度传感器、模拟集成温度传感器、智能集成温度传感器。当今国际上新形温度传感器越来越向数字式、智能化、网络化的方向发展。这些年,国内外在湿度传感器开发方面得到了巨大的进步。湿度传感器从单一的湿敏元件向集成化、智能化、多参数检测的目的快速发展。但国内的温湿度检测体系在各种行业的发展程度依然很低,即使使用已经非常普遍,同欧美等发达国家相比较,还存有着很大的距离。世界各公司的湿度传感器器件各不相同,品质经济方面都差别很大。2000年之后,我国加入世界贸易组织,商业面临巨大挑战。各种产业尤其是传统产业都迫切需要电子技术、自动控制技术进行改变和提升。像食品业,温湿度是决定食品品品质的关键因素,但食品加工公司对温湿度的检测操控手段仍很低级,很多厂家还在使用干湿球温度计,利用人工进行观测,调节阀门、风机的办法,显然控制结果并不好。1.3计步器的分类如今,计步器基本分为两种,电子式和机械式。本设计采用的是较为准确的电子式传感器。电子式传感器,能准确的测得人走路时的步态加速度信号。通过与微控制器有关算法就能获得人走路时的步数,这种速度计步器具备能量消耗耗较低,精准度较高和敏感较度高等长处。三轴加速度传感器,可依照传感器的类型分为2D计步器和3D计步器。根据用途分又可以分为单功能计步器,多功能计步器,甚至脂肪测量计步器。一般2D的电子计步器在使用的时候要垂直地面佩带才能进行数据记录,所记录的数据误差偏大。如今都是使用3D式电子计步器。3D意味着全方位感受人体震动,也就是不需要再垂直地面佩带,只要带在身边口袋中,手提包内都可以计步。2D计步器只能存储一组步数数据,用户可以复位清除记忆中的数据并重新计步。然而3D计步器可以按日期存储多天的步数,距离,时间等数据。计步器每天24点自动将前一天数据储存在记忆体中,并将当天步数等数据自动归零。用户可以回看过去几天的数据。通常存储的数据可以达到6天或者更多。计步器手表数据存储方式和3D计步器相同。单功能计步器单功能计步器也可以称作2D计步器,是最简单的计步器。只是计算你在运动走路中你所走的步数,这种计步器是最早也是最简单的,普遍采用了游丝摆锤机械式传感器。在单功能计步器中没有时间精度,无防水防尘防震,无法数据储存,无速度显示,佩戴时必需垂直,配有皮带夹,普遍是塑料材质,没有秒表时间日历等功能。图1.1单功能计步器3D计步器当前市面上主流都是使用3D式电子计步器。3D意味着全方位感受人体震动,也就是不需要再垂直地面佩带,只要带在身边口袋中,手提包内都可以计步。在3D计步器中主要是采用加速度传感器,双行显示,可以设计数据储存,显示步数,相对于2D计步器更加的精确,便携,质量好。图1.23D计步器计步器手表计步器手表也就是将3D计步器的芯片整合在手表中。这样用户可以通过佩戴计步器手表来计算步数,跑步速度,跑步距离,并且还能拥有手表的日历,闹钟,秒表,计时等等功能。图1.3计步器手表除此之外,还有些其他功能附加,或者制作出不同的佩戴方式,比如脂肪测量计步器,顾名思义,就是计步器整合了脂肪测量仪的功能。收音机计步器,计步器结合了FM调频收音机的功能。人们可以一边走路跑步计步,一边欣赏音乐和广播。计步腕带计步腕带内含3D运动传感器,本身不带显示器,需要和手机同步使用。2智能手环系统总体设计结构设计2.1计步器模块总体设计2.1.1计步器模块设计计步器总体上来说由控制器模块,输入模块,输出模块和电源模块组成。对仿真器进行编程,使单片机作为主控制设备对采集到的传感器信号进行处理,最后通过LCD显示输出。在其中控制器模块,我采用按键模块,像典型的计步器按键一样,在设计初期设定的按键有开始键,停止键,重新计数键以及单片机模块必须带有的复位键。输入模块有MMA7455加速度传感器为主,单片机为媒介,在检测出加速度变化时处理计算后输入给单片机。输入模块的关键在于加速度传感器的精度与是否有现成的模块,而不是需要传感器感触装置本身,因为在电路制作中,存在模块的传感器将大大方便PCB板的制作,只需要搞清它的封装及引脚图就可以清楚且正确的连接。输出模块中采用LCD液晶显示,它与单片机连接基本上固定的。在液晶显示中存在一个背景光调节,主要是用一个变阻器接入液晶显示屏的端口,但由于PCB板的大小在设计初期就要本着越小越好,所以该设计可以忽略。电源模块我打算采用最为简单的电池,在电池盒中放置电池,正负极以电烙铁焊住。总体方案的设计必须突出简洁,方便,便携等特点,存在集成的地方尽量集成,可以节省电路的地方图2.1计步器系统总体结构2.1.2计步算法步伐参数图2.2从一名跑步者测得的x、y和z轴加速度的典型图样

数字滤波器:首先,为使上图所示的信号波形变得平滑,需要一个数字滤波器。可以使用四个寄存器和一个求和单元,如下图所示。当然,可以使用更多寄存器以使加速度数据更加平滑,但响应时间会变慢。图2.3数字滤波器下图显示了来自一名步行者所戴计步器的最活跃轴的滤波数据。对于跑步者,峰峰值会更高。图2.4最活跃轴的滤波数据动态阈值和动态精度:系统持续更新三轴加速度的峰值和谷值,每采样50次就更新一次数据。数据的均值(Max+Min)/2被称为“动态阈值”。在下面的50次采样利用这个阈值断定个体是否在步行。因为此阈值每50次采样更新一次,所以说它是动态的。除了动态阈值之外,还利用动态精度来进行下一步滤波操作,如下图所示。图2.5动态阈值和动态精度利用一个线性移位寄存器和动态阈值判断个体是否有效地迈出一步。该线性移位寄存器含有2个寄存器:sample_new寄存器和sample_old寄存器。这些寄存器中的数据分别称为sample_new和sample_old。当新采样数据到来时,sample_new无条件移入sample_old寄存器。然而,sample_result是否移入sample_new寄存器取决于下述条件:如果加速度变化大于预定义精度,则最新的采样结果sample_result移入sample_new寄存器,否则sample_new寄存器保持不变。因此,移位寄存器组可以消除高频噪声,从而保证结果更加精确。步伐迈出的条件定义为:当加速度曲线跨过动态阈值下方时,加速度曲线的斜率为负值(sample_new<sample_old)。.峰值检测:步伐计数器根据x、y、z三轴中加速度变化最大的一个轴计算步数。如果加速度变化太小,步伐计数器将忽略。步伐计数器利用此算法可以很好地工作,但有时显得太敏感。当计步器因为步行或跑步之外的原因而非常迅速或非常缓慢地振动时,步伐计数器也会认为它是步伐。为了找到真正的有节奏的步伐,必须排除这种无效振动。利用“时间窗口”和“计数规则”可以解决这个问题。“时间窗口”用于排除无效振动。假设人们最快的跑步速度为每秒5步,最慢的步行速度为每2秒1步。这样,两个有效步伐的时间间隔在时间窗口[0.2s-2.0s]之内,时间间隔超出该时间窗口的所有步伐都应被排除。ADXL345的用户可选输出数据速率特性有助于实现时间窗口。表1列出了TA=25°C,VS=2.5V,andVDDI/O=1.8V时的可配置数据速率(以及功耗)。表2.1数据速率和功耗输出数据速率(Hz)带宽(Hz)速率代码IDD(µA)32001600111114616008001110100800400110114540020011001452001001011145100501010145502510011002512.510006512.56.250111556.253.125011040

此算法使用50Hz数据速率(20ms)。采用interval的寄存器记录两步之间的数据更新次数。如果间隔值在10与100之间,则说明两步之间的时间在有效窗口之内;否则,时间间隔在时间窗口之外,步伐无效。“计数规则”用于确定步伐是否是一个节奏模式的一部分。计步器有两个工作状态:搜索状态和确认状态。计步器以搜索模式开始工作。如果连续经过四个可计入步伐之后,发现存在某种规则(inregulation),之后计步器就会刷新并且显示结果,并且进入“确认状态”工作模式。当在这种状态下进行工作时,每检测到一个可计入步伐,计步器就会刷新一次。但是,如果发现哪怕一个无效步伐,步伐计数器就会返回搜索规则模式,重新搜索四个连续有效步伐。下图显示了步伐参数的算法流程图。距离=步数×每步距离(1)图2.6步伐参数算法流程图距离参数

根据上述算法计算步伐参数之后,我们可以使用公式1获得距离参数。每步距离取决于用户的速度和身高。如果用户身材较高或以较快速度跑步,步长就会较长。设计中设置的是每3秒刷新一次长度、速度参数。所以,我们应用每3秒测量到的步数来断定当前跨步的长度。下表显示了断定跨步距离的实验数据。跨步长度与速度(每2秒步数)和身高的关系表2.2每2秒步数跨步(m/s)0~2身高/52~3身高/43~4身高/34~5身高/25~6身高/1.26~8身高>=81.2×身高两秒的间隔能用所测到数准确的计算。以50Hz数据速率为例,处理器可以每100次采样发送一次相应的指令。处理器利用一个名为m_nLastPedometer的变量记录每个2秒间隔开始时的步数,并利用一个名为m_nPedometerValue的变量记录每个2秒间隔结束时的步数。这样,每2秒步数等于m_nPedometerValue与m_nLastPedometer之差。

速度=每2秒步数×跨步/2s(2)虽然数据速率为50Hz,但ADXL345的片内FIFO使得处理器无需每20ms读取一次数据,极大地减轻了主处理器的负担。该缓冲器支持四种工作模式:旁路、FIFO、流和触发。在FIFO模式下,x、y、z轴的测量数据存储在FIFO中。当FIFO中的采样数与FIFO_CTL寄存器采样数位规定的数量相等时,水印中断置1。如前所述,人们的跑步速度最快可达每秒5步,因此每0.2秒刷新一次结果即可保证实时显示,从而处理器只需每0.2秒通过水印中断唤醒一次并从ADXL345读取数据。FIFO的其它功能也都非常有用。利用触发模式,FIFO可以告诉我们中断之前发生了什么。由于所述解决方案没有使用FIFO的其它功能,因此笔者将不展开讨论。2.2温湿度模块总体设计

系统要完成的设计功能如下:(1)实现对环境温湿度参数的实时采集,由单片机对数据进行循环检测、数据处理、显示,实现温湿度的连续测量;(2)现场检测设备应具有较高的灵敏度、可靠性、抗干扰能力;(3)可以通过LCD显示屏显示出来所测量温湿度;(4)可以将数据通过蓝牙发送到手机上面。设计要达到的技术指标:(1)测量范围:湿度20-90%RH,温度0-50℃;(2)测量精度:湿度±5%RH,温度±2℃;(3)分辨率:湿度1%RH,温度1℃。该设计的总体方案是数据采集用的是DHT11温湿度传感器,他是一种含有已校准数字信号输出的温度湿度复合传感器,传感器包含一个电阻式感湿元件还有一个NTC测温元件。温度湿度信号通过温湿度传感器进行信号的采集并转换成数字信号,再运用单片机进行数据的分析和处理,并在LCD液晶显示器上显示当前温湿度。外加复位电路、时钟电路、键盘电路。系统程序包括数据采集程序。2.3蓝牙模块总体设计系统要完成的设计功能如下:(1)实现通过单片机供电,与手机端实现蓝牙连接。(2)实现对单片机所测量数据的接收。(3)将单片机接收到的来自三轴加速度传感器和温湿度传感器的数据通过蓝牙模块发送到手机上面。设计要达到的技术指标:实现手机与单片机之间的数据的实时传输。该设计应用的蓝牙模块是HC-05,HC-05是主从一体化的蓝牙串口模块,主从可指令切换,指令少于HC-06,使用简单。(供电电压3.3V~3.6V)3智能手环硬件电路设计3.1三轴加速度传感器电路因为计步器控制系统需要传感器提供电信号,而由加速度传感器模块省略了调理电路和滤波电路,所以在电路设计与制作时较为方便。本身我们也可以选择振动传感器,而考虑到精确问题,最后选择了加速度传感器。理论上加速度传感器如果被测物处于匀加速直线运动中应该是加速度传感器有测量值而振动传感器没有,不过实际中基本可以用加速度传感器只要读值不为0即可认为有震动。3.1.1加速度传感器的选择由于加速度传感器是电路的核心部分,所以它的选择格外重要,在选择传感器时我们应该注重以下几点。(1)灵敏度的选择灵敏度原则上来说是越灵敏越好,最小加速度测得的值也称为最小分辨率,因为后级放大电路的噪声原因,应尽可能的偏离最小可用值,来保证最佳信噪比。最大测量的极限需要考虑加速度器自己的非线性影响和后续仪器的最大输出电压。计算方法:最大被测加速度乘传感器的电荷或者电压灵敏度,上面数值如果大于配套仪器的最大输入电荷或者电压值,如果已知被测量的加速度范围能保证在传感器指标中的“参考量程范围”之内,在频率响应、重量通过的情况下,敏感度可以提高一点,来提高后续仪器的输入信号,增加信噪比。在兼顾频响、重量的同时,可参照以下范围选择传感器灵敏度:土木工程原型和超大型机械结构的振动在0.1g~10g左右,可选3000pC/g~300pC/g的加速度计,机械设备的振动在10g~100g左右,可选择20pC/g~200pC/g的加速度计,冲击可选0.1pC/g~20pC/g左右的加速度计。(2)频率选择所选择加速度器的频率要大于被测物体自身的振动频率。就例如土木是低频,加速度器就能选择0.2Hz~1kHz左右,而机械设备则是中频段,可以根据设备的转速、设备的刚度等综合因素估计频率,选择更高频率的加速度器。加速度器的质量、敏感度和用的频率成反比,敏感度越高,质量越大,使用频率就越低。3.1.2三轴加速度传感器的介绍根据以上的特点,本设计采用了ADXL345三轴加速度传感器。ADXL345是ADI公司的一款3轴、数字输出的加速度传感器。ADXL345是ADI公司推出的基于iMEMS技术的3轴、数字输出加速度传感器。该加速度传感器的特点有:

分辨率高。最高13位分辨率。

量程可变。具有+/-2g,+/-4g,+/-8g,+/-16g可变的测量范围。

灵敏度高。最高达3.9mg/LSB,能测量不到1.0°的倾斜角度变化。

功耗低。40~145uA的超低功耗,待机模式只有0.1uA。

尺寸小。整个IC尺寸只有3mm*5mm*1mm,LGA封装。ADXL支持标准的I2C或SPI数字接口,自带32级FIFO存储,并且内部有多种运动状态检测和灵活的中断方式等特性。ADXL345传感器的检测轴如下图所示:

图3.1ADXL345传感器的检测轴当ADXL345沿检测轴正向加速时,它对正加速度进行检测。在检测重力时用户需要注意,当检测轴的方向与重力的方向相反时检测到的是正加速度。下图所示为输出对重力的感应。图3.2输出对重力的感应上图列出了ADXL345在不同摆放方式时的输出,以便后续分析。接下来我们看看ADXL345的引脚图,如下图所示:图3.3ADXL345的引脚图ADXL345支持SPI和IIC两种通信方式,为了节省IO口,STM32单片机采用的是IIC方式连接,官方推荐的IIC连接电路如下图所示:图3.4IIC连接电路硬件设计本实验采用STM32的3个普通IO连接ADXL345,本章实验功能简介:主函数不停的查询ADXL345的转换结果,得到x、y和z三个方向的加速度值(读数值),然后将其转换为与自然系坐标的角度,并将结果在LCD模块上显示出来。DS0来指示程序正在运行,通过按下WK_UP按键,可以进行ADXL345的自动校准(DS1用于提示正在校准)。所要用到的硬件资源如下:

1)指示灯DS0、DS1

2)WK_UP按键

3)TFTLCD模块

4)ADXL345

前3个,在之前的实例已经介绍过了,这里我们仅介绍ADXL345与战舰STM32开发板的连接。该接口与MCU的连接原理图如下所示。从下图可以看出,ADXL345通过三根线与STM32开发板连接,其中IIC总线时和24C02以及RDA5820共用,接在PB10和PB11上面。ADXL345的两个中断输出,这里我们只用了一个,连接在STM32的PF11脚,另外这里的地址线是接3.3V,所以ADXL345的地址是0X1D,转换为0X3A写入,0X3B读取。图3.5与MCU的连接原理图3.1.3三轴加速度传感器与STM32单片机的连接IN1--PA11,SCL--PC12,SDA--PC113.2温湿度传感器电路温湿度是生活生产中的重要的参数。本设计为基于单片机的温湿度检测与控制系统,采用模块化、层次化设计。用新型的智能温湿度传感器DHT11主要实现对温度、湿度的检测,将温度湿度信号通过传感器进行信号的采集并转换成数字信号,再运用单片机进行数据的分析和处理,为显示电路提供信号。显示部分采用LCD液晶显示所测温湿度值。系统电路简单、集成度高、工作稳定、调试方便、检测精度高,具有一定的实用价值。3.2.1DHT11简图图3.6DHT11实物如图DHT11是一个于湿温度一起的数字化传感器。这种传感器含有一个电阻式测湿元件和一个NTC测温元件,并与一个高性能8位单片机相连接。通过单片机与这些微处理器简单的连接才可以实时的搜集湿温度。DHT11与单片机之间可以用简单的单总线进行通信,只要一个I/O口。传感器里面湿温度数据40Bit的数据全部统一传给单片机,数据还需要校验,保证数据输送的精准度。DHT11能量消耗很低,在5V电压下,传感器工作平均最大电流0.5mA。图3.7DHT11的管脚排列如下图(1)引脚介绍:Pin1:(VDD),电源引脚,供电电压为3-5.5V。Pin2:(DATA),串行数据,单总线。Pin3:(NC),空脚,请悬浮。Pin4(VDD),接地端,电源负极。(2)接口说明:建议连接线长度短于20米时用5K上拉电阻,大于20米时根据实际情况使用合适的上拉电阻。DHT11接口图如下图所示。单片机P3.2口用来发收串行数据,即数据口。连接传感器的Pin2(单总线,串行数据)。图3.8DHT11接口图传感器的第一脚是电源脚,接电路板的电源。第二脚是数据端,接单片机的I/O口P3.2,把数据传输到单片机。第三脚是空管脚,悬空。第四脚是接地端,接电路板的地。3.2.2温湿度模块工作原理DHT11数字湿温度传感器应用用数据格式为单总线数据格式。它的数据包含有5Byte(40Bit)。数据划分为小数部分和整数部分,数据传输过程中,位高的先输出。DHT11的数据格式为:8bit湿度整数数据+8bit湿度小数数据+8bit温度整数数据+8bit温度小数数据+8bit校验和。传感器输出的数据是没有进行编码过的数据。各个数据之间应该分开进行处理。例如,某次从DHT11读到的数据如下所示:byte4byte3byte2byte1byte00010110100000000000111000000000001001001整数小数整数小数校验和湿度温度校验和由以上数据就可得到湿度和温度的值,计算方法:

湿度=byte4.byte3=45.0(%RH)

温度=byte2.byte1=28.0(℃)

校验=byte4+byte3+byte2+byte1=73(=湿度+温度)(校验正确)

可以看出,DHT11的数据格式是十分简单的,DHT11和MCU的一次通信最大为3ms左右,建议主机连续读取时间间隔不要小于100ms。

下面,我们介绍一下DHT11的传输时序。DHT11的数据发送流程如下图所示:图3.9DHT11的数据发送流程首先主机发送开始信号,即:拉低数据线,保持t1(至少18ms)时间,然后拉高数据线t2(20~40us)时间,然后读取DHT11的响应,正常的话,DHT11会拉低数据线,保持t3(40~50us)时间,作为响应信号,然后DHT11拉高数据线,保持t4(40~50us)时间后,开始输出数据。DHT11输出数字‘0’的时序如下图所示:图3.10DHT11输出数字‘0’的时序图3.11DHT11输出数字‘1’的时序如通过以上了解,我们就可以通过STM32来实现对DHT11的读取了。3.3蓝牙模块电路本设计采用的是HC-05蓝牙模块,主要负责对单片机所测量到的数据进行发送,然后通过手机进行连接。并在手机上面显示接收到的数据。3.3.1蓝牙模块简介ATK-HC05模块,是ALIENTEK研发的一个高性能主从为一体蓝牙串口模块,能配对各种带蓝牙功能的电脑、手机、微电子器件等智能终端,这个模块可以在非常宽的波特率范围内使用:4800~1382400,并且模块也可以在5V或3.3V单片机系统里面使用,与产品进行连接简单。使用灵活、方便。图3.12蓝牙模块的实体图蓝牙模块的引脚定义:1LED配对状态输出;配对成功则输出高电平,未配对成功则输出低电平。

2KEY进入AT状态;高电平有效(悬空则为低电平)。

3RXD模块串口接收信号脚(TTL电平,不能直接接RS232电平!),接单片机的TXD引脚

4TXD模块串口发送信号脚(TTL电平,不能直接接RS232电平!),接单片机的RXD引脚

5GND接地

6VCC电源(3.3V至5.0V)图3.12蓝牙与单片机之间进行数据传输的原理图图3.13HC05蓝牙串口模块的原理图如下图3.14ATK-HC05蓝牙串口模块同ALIENTEKSTM32开发板的连接关系3.4液晶显示显示系统电路我们将介绍ALIENTEK2.8寸TFTLCD模块,该模块采用TFTLCD面板,可以显示16位色的真彩图片。在本章中,我们将利用战舰STM32开发板上的LCD接口,来点亮TFTLCD,并实现ASCII字符和彩色的显示等功能,并在串口打印LCD控制器ID,同时在LCD上面显示。3.4.1TFTLCD简介TFT-LCD就是液晶显示器(ThinFilmTransistor-LiquidCrystalDisplay),液晶显示屏上的每一个象素里面都设有一个薄膜晶体管(TFT),能有效地控制非选通时的串扰,所以能大大提高图像的质量。TFT-LCD也被称为真彩液晶显示器。上一章介绍了OLED模块,本章,我们给大家介绍ALIENTEKTFTLCD模块,该模块有如下特点:

1,2.4’/2.8’/3.5’3种大小的屏幕可选。

2,320×240的分辨率(3.5’分辨率为:320*480)。

3,16位真彩显示。

4,自带触摸屏,可以用来作为控制输入。

本章,我们以2.8寸的ALIENTEKTFTLCD模块为例介绍,该模块支持65K色显示,显示分辨率为320×240,接口为16位的80并口,自带触摸屏。该模块的外观图如下图所示:图3.15液晶显示模块外观图图3.16模块原理图图3.17接口定义图3.4.2TFTLCD模块与STM32开发板的连接阿斯顿看不见TFTLCD模块的电路见图,这里我们介绍TFTLCD模块与ALIETEK战舰STM32开发板的连接,战舰STM32开发板底板的LCD接口和ALIENTEKTFTLCD模块直接可以对插,连接关系如下图所示:图3.18液晶屏与单片机的连接关系图上图中圈出来的部分就是连接TFTLCD模块的接口,板上的接口比液晶模块的插针要多2个口,液晶模块在这里是靠右插的。多出的2个口是给OLED用的,所以OLED模块在接这里的时候,是靠左插的,这个请大家注意一下。在硬件上,TFTLCD模块与战舰STM32开发板的IO口对应关系如下:

LCD_BL(背光控制)对应PB0;

LCD_CS对应PG12即FSMC_NE4;

LCD_RS对应PG0即FSMC_A10;

LCD_WR对应PD5即FSMC_NWE;

LCD_RD对应PD4即FSMC_NOE;

LCD_D[15:0]则直接连接在FSMC_D15~FSMC_D0;

这些线的连接,战舰STM32开发板的内部已经连接好了,我们只需要将TFTLCD模块插上去就好了。实物连接如下图所示:图3.19实物连接图3.5单片机最小系统随着电子技术的发展,单片机的功能将会更加的完善,因而单片机的应用将更加普及。单片机在家电,电子,军工等控制方面得到更加广泛的应用。单片机将是智能仪器应用最多的。单片机的最小系统是由组成单片机系统必需的一些元件构成的,除了单片机之外,还需要包括电源供电电路、时钟电路、复位电路。3.5.1STM32单片机简一开发板简要功能说明1、标准ARMJTAG20PIN仿真接口座(方便连接JLINK,ULINK2等主流仿真器)2、USB供电,最大提供800mA电流3、支持串口1下载,将图中短路帽取下即可进入串口ISP下载4、可调晶振圆孔插座32.768KHZ时钟晶振5、USB通讯引脚通过单排插针引出,方做USB通讯实验(需要用杜邦线自己连接)6、所有IO和3.3V电源接口均引出,方便接外部电路做实验7、外扩2路5V,GND电源,方便连接外部电路做实验。8、上电复位(蓝色电源开关)与按键复位(黑色按键)。9、电源指示灯(红色)与程序运行指示灯(绿色)10、ISP下载接口专门引出,方便外接本店串口小板下载程序和通讯使用。图3.20stm32最小系统设计原理图(a)供电(b)usb接口(c)芯片(d)键盘(e)串行flash4智能运动手环软件设计4.1计步器流程图4.1.1主程序流程图开始传感器模块是加速度传感器对人走路时的加速度信号进行测量,其三轴可以分别对人体走路时在水平前向、侧向和垂直方向上产生的加速度信号进行测量,可以增加对人体走路时加速度信号的测量精确度,还可以在模拟输出脚上连接电容和电阻形成低通滤波器,过滤高频噪音和干扰信号,来减小测量的误差。单片机的PA0~PA2分别连接到与三轴XYZ的输出端口,再通过微控制器计算得出人走路时的步数,之后将这个步数信号显示在显示屏上面。开始单片机端口初始化单片机端口初始化LCD初始化检测按键检测按键读取按键值Yes读取按键值执行按键操作执行按键操作NoLCD显示,清零等获取采样LCD显示,清零等获取采样结束结束图4.1主程序流程图4.1.2子程序流程图得到加速度信号时,要选择正确采样频率。若采样频率太低,则不能精确反映数据的变化。如若采样频率太高,就会引入许多没用的信息,还增加了系统的运算量。要选择合适的采样频率,才能得到准确的加速度信号。人走路时的频率约为每秒两步(即2Hz),跑步时一般也不超过5Hz,所以本设计设定采样频率为10Hz。开始开始端口初始化端口初始化对加速度值进行采样对加速度值进行采样采样频率《10HZ》采样频率《10HZ》NoYes传送加速度信号传送加速度信号图4.2检测加速度信号流程图4.2温湿度传感器主程序流程图本系统的整个程序流程是首先上电,系统各部分进行初始化,单片机初始化,液晶显示器初始化等。初始化完成后进行键盘扫描,然后再进行延时一段时间,供传感器采集数据,延时完成后就进行数据的采集并传输到单片机,单片机处理之后传输到液晶显示器,液晶显示器显示温湿度值。之后再通过蓝牙将数据发送出去。主程序流程图如下图所示。开始开始端口初始化键盘扫描 键盘扫描延时延时温湿度检测并传递数据回单片机温湿度检测并传递数据回单片机显示数据显示数据开始开始图4.3温湿度传感器主程序流程图4.3蓝牙主程序流程图本系统的整个程序流程是首先上电,系统各部分进行初始化,单片机初始化,蓝牙设备始化等。初始化完成后进行三轴加速度传感器和温湿度传感器的数据采集,然后再进行各个数据的预处理。之后再通过蓝牙将数据发送出去。主程序流程图如下图所示。开始开始初始化初始化单片机资源初始化蓝牙设备No初始化蓝牙设备Yes传感器数据采集数据预处理传感器数据采集数据预处理结束传送数据结束传送数据图4.4蓝牙模块主程序流程图5智能手环的调试与结果分析5.1实物系统调试5.1.1实物图图5.1三轴加速度传感器图5.2温湿度传感器图5.3液晶显示器图5.4STM32单片机5.1.2系统的调试图5.5计步模块程序的运行图5.6温湿度模块程序的运行图5.7蓝牙模块程序的运行6总结与展望本论文基于STM单片机设计了计步器和温湿度传感器以及蓝牙发射模块及其外围电路。对于智能手环进行了实物调试,在整个控制系统中主要完成了以下任务。完成了智能及其外围电路的总体设计方案。完成了系统软件设计,选择了合适的加速度传感器,温湿度传感器及蓝牙发射器,简化了显示装置较为经济、实用。并且进行了实物仿真,实现了手环的计步功能,和温湿度检测功能,并且可以将检测到的数据通过蓝牙发送到手机上面进行显示。在手环系统及其软件的设计中,基本实现了预期设计目标。对于设计过程遇到了很多问题,有些问题通过自己的努力与他人和老师的帮助解决了一些。但是还有一些问题仍然需要进一步研究:有时候会存在走10步但只显示8到9步的情况,初步估计是计步的算法不够精确,应该可以通过更精确的算法来改正,但由于时间有限,目前只能精确到这个程度。还有电源电路的问题,手环本身的优点就是便于携带,在日常训练中起到辅助作用,但是如果要实现整个功能需要的硬件相比之下太,不善于携带,甚至奔跑。要改进这个需要更小的芯片和单片机以及传感器。在以后的设计中不仅要注重功能性还要注重实用性。希望以后有机会可以继续本次的设计,使设计更加完善。参考文献[1]王毓银.数字电路逻辑设计(第三版).高等教育出版社.1999[2]谢自美.电子线路设计实验测试.华中科技大学出版社.2000[3]李朝青.单片机原理及接口技术[M].北京:电子工业出版社,2004[4]岳怡.数字电路与数字电子技术.西北工业大学出版社.2004[5]赵保终.中国集成电路大全.国防工业出版社.2003[6]卿太全,郭明琼.常用数字集成电路原理与应用.人民邮电出版社.2006[7]杨颂华,孙万蓉.数字电子技术基础.西安电子科技大学出版社2000[8]孙良彦.国外湿度传感器发展动态[J],传感器技术,1996,38(5):2-3[9]刘志强,罗庆生.一种智能化温度检测系统的设计[J].中国测试技术,2003,29(3):95-98[10]高光天.传感器与信号调理器件应用技术[M].北京:科学技术出版社,2002,84-85[11]付晓光.单片机原理与应用技术[M].北京:清华大学出版社,2004.[12]秦永和.湿度传感器测试系统[D].哈尔滨:哈尔滨工程大学,2002[13]MichaelJohnSebastianSmith著.专用集成电路.电子工业出版社2009[14]Accelerometrybasedassessmentofgaitparametersinchildren.-2006[15]J.Kramar,J.Jun.TheMoleeularMeasuringMaehine.Proceedingsofthe1998InternationalConfereneeonMeehatronieTeehnology,1998,Page:477~487[16]E·ClaytonTeague.Metrologyandprecisionengineeringdesign,J.Vac.Sci.Technol.B[C].1989,No6,Page:89~103[17]R.L.GeigerP.E.AllenN.R.Strader.VLSI.Design

Techniques

for

Analog

And

Digitial

Ciruits,McGraw-Hill

Inc.1990.

[18]ANALOG

DEVICES.The

technology

of

AT89C51[EB/OL].White

Paper,Spe.28.2000.致谢毕业论文暂告收尾,这也意味着我在湖南大学的四年的学习生活既将结束。回首既往,自己这四年最宝贵的时光能在这样的校园之中,能在众多学富五车、才华横溢的老师们的熏陶下度过,实是荣幸之极。在这四年的时间里,我在学习上和思想上都受益非浅。这除了自身努力外,与各位老师、同学和朋友的关心、支持和鼓励是分不开的。在此,我要特别感谢湖南大学及湖南大学电气与信息工程学院对我的培养,感谢院里面提供给我这么多的学习资源,这么多的学习设备,也要感谢各位恩师对我的倾囊相授,传道授业解惑给我。其次,要感谢导师黄文清老师,本论文的研究设计与写作工作是在老师的悉心指导下完成的。在实验及论文期间,不仅学到了丰富的专业知识,而且培养了自己进行科学研究工作的能力,导师的言传身教使我受益匪浅,并且老师在我的论文工作中给与了极大的鼓励和支持,提出了很多宝贵的意见。感谢黄老师在我遇到困难的时候,拨云见雾,让我重新找出一个清晰的思路。还要感谢实验室朝夕相处的同学和学长,在整个毕业设计期间大家融洽相处,相互帮助,使每个人都有良好的心情去完成毕业设计。又不懂的问题去请教都会耐心的给我解释。我也懂得了一个道理,团结的力量,只有更好得与他人,进行沟通与交流,吸取别人的建议,工作才会更加的顺利。时间的仓促及自身专业水平的不足,整篇论文肯定存在尚未发现的缺点和错误。恳请阅读此篇论文的老师、同学,多予指正,不胜感激!附录附录A:主程序#include"led.h"#include"delay.h"#include"sys.h"#include"usart.h"#include"lcd.h"#include"dht11.h"#include"adxl345.h"#include"key.h"voidAdxl_Show_Num(u16x,u16y,shortnum,u8mode){ if(mode==0) { if(num<0) { LCD_ShowChar(x,y,'-',16,0); num=-num; }elseLCD_ShowChar(x,y,'',16,0); LCD_ShowNum(x+8,y,num,4,16); }else { if(num<0) { LCD_ShowChar(x,y,'-',16,0); num=-num; }elseLCD_ShowChar(x,y,'',16,0); LCD_ShowNum(x+8,y,num/10,2,16); LCD_ShowChar(x+24,y,'.',16,0); LCD_ShowNum(x+32,y,num%10,1,16); }} intmain(void){ u8t=0; u8key; u8temperature,humidity; shortx,y,z; shortangx,angy,angz; delay_init(); uart_init(9600); LED_Init(); LCD_Init(); POINT_COLOR=RED; LCD_ShowString(60,50,200,16,16,"MiniSTM32"); LCD_ShowString(60,70,200,16,16,"DS18B20TEST"); LCD_ShowString(60,90,200,16,16,"ATOM@ALIENTEK"); LCD_ShowString(60,110,200,16,16,"2014/3/12"); while(DHT11_Init()) { LCD_ShowString(60,130,200,16,16,"DHT11Error"); delay_ms(200); LCD_Fill(60,130,239,130+16,WHITE); delay_ms(200); } while(ADXL345_Init()) { LCD_ShowString(60,150,200,16,16,"ADXL345Error"); delay_ms(200); LCD_Fill(60,130,239,130+16,WHITE); delay_ms(200); } LCD_ShowString(60,130,200,16,16,"DHT11ANDADXL345OK"); POINT_COLOR=BLUE; LCD_ShowString(60,150,200,16,16,"Temp:C"); LCD_ShowString(60,170,200,16,16,"Humi:%"); LCD_ShowString(60,190,200,16,16,"XVAL:"); LCD_ShowString(60,210,200,16,16,"YVAL:"); LCD_ShowString(60,230,200,16,16,"ZVAL:");LCD_ShowString(60,250,200,16,16,"XANG:"); LCD_ShowString(60,270,200,16,16,"YANG:"); LCD_ShowString(60,290,200,16,16,"ZANG:"); while(1) { if(t%10==0)//?100ms???? { ADXL345_Read_Average(&x,&y,&z,10); Adxl_Show_Num(60+48,190,x,0); Adxl_Show_Num(60+48,210,y,0); Adxl_Show_Num(60+48,230,z,0); angx=ADXL345_Get_Angle(x,y,z,1); angy=ADXL345_Get_Angle(x,y,z,2); angz=ADXL345_Get_Angle(x,y,z,0); Adxl_Show_Num(60+48,250,angx,1); Adxl_Show_Num(60+48,270,angy,1); Adxl_Show_Num(60+48,290,angz,1); DHT11_Read_Data(&temperature,&humidity); LCD_ShowNum(60+40,150,temperature,2,16); LCD_ShowNum(60+40,170,humidity,2,16); } key=KEY_Scan(0); if(key==KEY_UP) { LED1=0; ADXL345_AUTO_Adjust((char*)&x,(char*)&y,(char*)&z); LED1=1; } delay_ms(10); t++; if(t==20) {t=0; LED0=!LED0; } }附录B:液晶显示模块程序#include"led.h"#include"delay.h"#include"sys.h"#include"usart.h"#include"lcd.h"intmain(void){ u8x=0; u8lcd_id[12]; delay_init(); uart_init(9600); LED_Init(); LCD_Init(); POINT_COLOR=RED; sprintf((char*)lcd_id,"LCDID:%04X",lcddev.id); while(1) { switch(x) { case0:LCD_Clear(WHITE);break; case1:LCD_Clear(BLACK);break; case2:LCD_Clear(BLUE);break; case3:LCD_Clear(RED);break; case4:LCD_Clear(MAGENTA);break; case5:LCD_Clear(GREEN);break; case6:LCD_Clear(CYAN);break; case7:LCD_Clear(YELLOW);break; case8:LCD_Clear(BRRED);break; case9:LCD_Clear(GRAY);break; case10:LCD_Clear(LGRAY);break; case11:LCD_Clear(BROWN);break; } POINT_COLOR=RED; LCD_ShowString(30,40,200,24,24,"MiniSTM32^_^"); LCD_ShowString(30,70,200,16,16,"TFTLCDTEST"); LCD_ShowString(30,90,200,16,16,"ATOM@ALIENTEK"); LCD_ShowString(30,110,200,16,16,lcd_id); LCD_ShowString(30,130,200,12,12,"2014/3/7"); x++; if(x==12)x=0; LED0=!LED0; delay_ms(1000); }}附录C:三轴加速度传感器模块程序#include"led.h"#include"delay.h"#include"key.h"#include"sys.h"#include"lcd.h"#include"usart.h" #include"adxl345.h" voidAdxl_Show_Num(u16x,u16y,shortnum,u8mode){ if(mode==0) { if(num<0) { LCD_ShowChar(x,y,'-',16,0); num=-num; }elseLCD_ShowChar(x,y,'',16,0); LCD_ShowNum(x+8,y,num,4,16); }else { if(num<0) { LCD_ShowChar(x,y,'-',16,0); num=-num; }elseLCD_ShowChar(x,y,'',16,0); LCD_ShowNum(x+8,y,num/10,2,16); LCD_ShowChar(x+24,y,'.',16,0); LCD_ShowNum(x+32,y,num%10,1,16); }} intmain(void){ u8key; u8t=0; shortx,y,z; shortangx,angy,angz; delay_init(); NVIC_Configuration(); uart_init(9600); LED_Init(); LCD_Init(); KEY_Init(); POINT_COLOR=RED; LCD_ShowString(60,50,200,16,16,"WarShipSTM32"); LCD_ShowString(60,70,200,16,16,"3DTEST"); LCD_ShowString(60,90,200,16,16,"ATOM@ALIENTEK"); LCD_ShowString(60,110,200,16,16,"2012/9/12"); LCD_ShowString(60,130,200,16,16,"KEY0:AutoAdjust"); while(ADXL345_Init()) { LCD_ShowString(60,150,200,16,16,"ADXL345Error"); delay_ms(200); LCD_Fill(60,150,239,150+16,WHITE); delay_ms(200); } LCD_ShowString(60,150,200,16,16,"ADXL345OK"); LCD_ShowString(60,170,200,16,16,"XVAL:"); LCD_ShowString(60,190,200,16,16,"YVAL:"); LCD_ShowString(60,210,200,16,16,"ZVAL:"); LCD_ShowString(60,230,200,16,16,"XANG:"); LCD_ShowString(60,250,200,16,16,"YANG:"); LCD_ShowString(60,270,200,16,16,"ZANG:"); POINT_COLOR=BLUE; while(1) { if(t%10==0) {ADXL345_Read_Average(&x,&y,&z,10); Adxl_Show_Num(60+48,170,x,0); Adxl_Show_Num(60+48,190,y,0); Adxl_Show_Num(60+48,210,z,0); angx=ADXL345_Get_Angle(x,y,z,1); angy=ADXL345_Get_Angle(x,y,z,2); angz=ADXL345_Get_Angle(x,y,z,0); Adxl_Show_Num(60+48,230,angx,1); Adxl_Show_Num(60+48,250,angy,1); Adxl_Show_Num(60+48,270,angz,1); } key=KEY_Scan(0); if(key==KEY_UP) { LED1=0; ADXL345_AUTO_Adjust((char*)&x,(char*)&y,(char*)&z); LED1=1; } delay_ms(10); t++; if(t==20) { t=0; LED0=!LED0; } }}附录D:温湿度传感器模块程序:#include"led.h"#include"delay.h"#include"key.h"#include"sys.h"#include"lcd.h"#include"usart.h" #include"dht11.h" intmain(void){ u8t=0; u8temperature; u8humidity; delay_init(); NVIC_Configuration(); uart_init(9600); LED_Init(); LCD_Init(); KEY_Init(); POINT_COLOR=RED; LCD_ShowString(60,50,200,16,16,"WarShipSTM32"); LCD_ShowString(60,70,200,16,16,"DS18B20TEST"); LCD_ShowString(60,90,200,16,16,"ATOM@ALIENTEK"); LCD_ShowString(60,110,200,16,16,"2012/9/12"); while(DHT11_Init()) { LCD_ShowString(60,130,200,16,16,"DHT11Error"); delay_ms(200); LCD_Fill(60,130,239,130+16,WHITE); delay_ms(200); } LCD_ShowString(60,130,200,16,16,"DHT11OK"); POINT_COLOR=BLUE; LCD_ShowString(60,150,200,16,16,"Temp:

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论