基于加速度传感器的姿态检测及应用系统 - 图文

更新时间:2024-05-16 12:17:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

毕业设计(论文)

基于加速度传感器的姿态监测

及应用系统

姓 名 Jermaine Pen

学 号 29010103023

专业班级 通信工程09C

所在学院 电子信息学院

指导教师 JianGuo.Shi 副教授

完成时间 2013年5月10日

电子科技大学中山学院教务处制发

基于加速度传感器 的姿态监测

及应用系统

摘 要

本课题的主要任务是设计一种由一对无线传感器终端、一套三轴加速度传感器、LCD显示屏组成的系统,系统中所有设备均通过单片机进行指令控制和协调操作。无线传感器终端发出的X、Y、Z轴加速度数值传送到监控主机,并利用主机进行数据处理、数据储存、数据显示等。系统充分利用了nRF905无线传感器网络所具有的通信质量高、通信距离远、连通性好、可扩展性强、功耗低、便于开发等优点,提高了加速度变化规律检测的效率和质量,并且为人体姿态检测提供有效的依据,将为未来动物姿态研究引入新的技术支持。系统工作在915MHz ISM频段,数据传输率为50Kbps,节点设备的工作电压为1.9-3.6V,工作电流则与设备类型和工作状态有关,其中,无线传感器的静态电流仅仅12.5μA,节能设计更方便。

关键词:nRF905;无线传感器网络;ADXL345;姿态检测;三轴加速度

I

Position Monitoring And Application Systems Based on the Acceleration

Sensor

Abstract

This main task of this project is to design a system composed of a pair of wireless sensor terminal,a set of three axis acceleration sensor, LCD display,system all equipment through the MCU control commands and coordinated operation. Wireless sensor terminal sends a X,Y,Z axis acceleration value is transmitted to the monitoring computer,and data processing,data storage,data display by host MCU.The system makes full use of the communication quality of nRF905 wireless sensor network which has high, long communication distance, connectivity is good, strong scalability, low power consumption, easy development advantages, improve the efficiency and quality detection of variation of acceleration, and provide effective basis for human posture detection, for the future of research into animal posture a new technical support.

The system works in 915MHz ISM band, the data transmission rate is 50Kbps, the working voltage is 1.9-3.6V, working current is related to the type of equipment and working state.The static current is only 12.5μA.

Keywords: nRF905; wireless sensor network; ADXL345; attitude detection; three axis

accelerometer

II

目 录

1 绪论 ............................................................................................................................................. 1 1.1 项目背景 .............................................................................................................................. 1 1.2 项目的主要任务 .................................................................................................................. 1 2 总体设计方案 ............................................................................................................................. 2 3 主要芯片简介 ............................................................................................................................. 3 3.1 NRF905 .................................................................................................................................. 3 3.2 ADXL345 .............................................................................................................................. 4 4 硬件设计 ..................................................................................................................................... 9 4.1 无线主机 .............................................................................................................................. 9 4.2无线从机 ............................................................................................................................. 11 4.3 监控主机 ............................................................................................................................ 13 5 软件设计 ................................................................................................................................... 14 5.1 ICCAVR与Keil集成开发环境 ...................................................................................... 14 5.2 主机程序流程 .................................................................................................................... 14 5.3 从机程序流程 .................................................................................................................... 15 6 系统调试 ................................................................................................................................... 17 7 结论 ........................................................................................................................................... 19 参考文献 ....................................................................................................................................... 20 附 录 ............................................................................................................................................. 21 附录A 系统样机实物图 .......................................................................................................... 21 附录B 源程序清单 .................................................................................................................. 22 致 谢 ............................................................................................................................................. 36

III

1 绪论

1.1 项目背景

在日趋成熟的科学界,人们对生活的追求越来越高,然而,健康的追求是人们永恒不变的话题。在医学科技发达的今天,60岁以上的老年人所占的比例越来越大,人口老龄化促使人们更加关注老年人的健康和生活质量。据统计,国外约30%老年人每年跌倒一次,并造成不同程度的损害。而70岁以上的老年人跌倒年发生率高达50%,跌倒后常常会造成严重的损害,而这些损害往往因为没有及时处理而被无限扩大,例如失血过多、疼痛过度至休克、伤口感染等二次伤害。跌倒不但给老年的心灵上的摧残,更极大地影响了老年人的生活,在病床上的医疗时间足以消耗老年人本来就不旺盛的意志。

因此,本文设计一种基于三轴加速度传感器的人体姿态平衡检测系统,通过读取并分析三轴向加速度的数值,进行对老年人人体姿态实时检测,并预知老年人行进趋势,并通过无线通信网络等多种方式实现手段,进行声光报警,通知周边的人,对跌倒老人进行扶助,可以大大减少老年人跌倒的二次伤害。

无线通信网络可以有多种实现手段,其中,基于Bluetooth协议的系统数据传输率较高,但作用距离短,功耗大,组网能力弱;而ZigBee作为建立在IEEE802.15.4通信标准之上的低速无线个域网(LR-WPAN)协议规范,基于该技术的系统具有功耗小、可靠性高、组网能力强等优点,但数据速率低、传输距离近;NRF905采用Nordic公司的VLSI ShockBurst技术,ShockBurst技术使nRF905能够提供高速的数据传输,而不需要昂贵的高速MCU来进行数据处理/时钟覆盖,极大降低成本,并拥有较高数据传输速率,同时传输距离较远,理论可达1000米,开发难度低,可靠性高等综合起来,成为本设计选择的无线通信网络核心组成部分。

1.2 项目的主要任务

本项目的主要任务就是通过三轴加速度传感器检测三轴加速度,并将模拟信号传送到单片机进行数据处理, 分析数据后判断人体是否平衡, 并在人体跌倒时给出声光报警。在满足以上功能的前提下进一步将声光报警用短信通知替代。性能要求如下:平衡检测反应在3.0秒以内, 信号传输距离要大于3.0米。

1

2 总体设计方案

系统的主要任务是利用加速度传感器实现姿态检测及跌倒判定。对于传感器模块的数据采集,要根据数据情况实行三级检测,通过检测方式尽可能抵消误判的情况。系统总体上看是以Atmega128为主控器,并连接NRF905、ADXL345等模块。NRF905模块为三轴加速度数据无线传输端,ADXL345为加速度数据来源端。由ADXL345采集三轴加速度,Atmega128单片机进行处理和分析,然后由发送端将数据送到433Mhz开放ISM频段,通过无线的方式将数据送到接收端单片机,接收端单片机对数据进行简单应用,如声光警报和数据显示。以上是本设计的设计思路和总体设计方案。如图1-1所示。

图1-1 整体设计框图

本设计关键部分是数据算法处理,这部分在Atmega128单片机内进行。主要是对ADXL345数据进行处理。人体运动的加速度值,会随人体动作不断变化,而且ADXL345是先接收模拟值数据再进行AD转换,所以,要得到有用的数据,必须进行三级检测。第一级检测,采用SVM算法,对传感器传出的数据进行简单的筛选,该算法具有自我学习能力,把大多类似跌倒的情况积累起来,进行统计。第二级,对第一级算法的进一步分析,通过比较软件自身设定的阈值来确定该动作是否跌倒、行走、坐下等,阈值更是根据用户的身高、体重、性别、年龄等信息设置。第三级,是在第二级处理之后,判断加速度值是否有变化,如果变化,则抛弃前面两级数据,如果没变化,再判断人体倾角状态,从而判断剧烈动作人体是否躺下,进一步确定老人是否已经跌倒。

2

3主要芯片简介

3.1 NRF905

nRF905是挪威Nordic公司推出的单片射频式Transmitter Chip,工作电压为1.9-3.6V,32引脚方形扁平无引脚封装(5mm×5mm)。符合国家Radio Management Committee标准,无需申请频点,工作于433/868/915MHz3个ISM频道(工业、科学和医学)。本设计选择的无线传感器可以自动完成处理字头和CRC(循环冗余码校验)的工作,可由片内硬件自动完成Manchester编码/解码,使用SPI接口和I2C接口与微控制器通信,配置非常方便,其功率消耗是非常的低,以-10dBm的输出功率发射时电流只有11mA,在器件开始接收模式时电流为12.5mA。 nRF905单片无线收发器工作由一个完全集成的频率调制器,一个带解调器的接收器,一个功放器,一个晶体和一个全自动调节器组成。ShockBurst工作模式的特点是自动产生前导码和CRC,可以很容易通过SPI接口和I2C接口进行内部寄存器配置。图3-1为NRF905模块的硬件结构框图。

图3-1 NRF905硬件结构

GFSK滤波 曼切斯特编码 SHOCKBURST SPI接口 TX地址 TX寄存器 RX寄存器 配置寄存器 电源管理 晶体振荡器 中频BBF 解调处理 数据处理 CRC处理 地址处理 以下是NRF905的主要特色和技术指标: ? 真正的单片

? 低功耗ShockBurst工作模式帧长:协议规定不超过128B,实际有效数据载荷最大85B ? 工作电源电压范围1.9—3.6V ? 多通道工作—ETSI/FCC兼容 ? 通道切换时间<650us ? 极少的材料消耗

3

? 微功率发射:最大发射功率为10mW、高接收灵敏度,外围元件最少(仅10个),基本无需调试

? 高抗干扰能力和低误码率:基于GFSK的调制方式,采用高效前向纠错信道编码技术,提高了数据抗突发干 扰和随机干扰的能力,在信道误码率为10-2时,可得到实际误码率10-5~10-6.)

? 采用DSS+PLL频率合成技术,频率稳定性极好 ? 无需外部SAW滤波器 ? 输出功率可调至10dBm ? 传输前监听的载波检测协议

? 当正确的数据包被接收或发送时有数据准备就绪信号输出 ? 侦测接收的数据包当地址正确输出地址匹配信号

图3-2为NRF905模块的外形及引脚排列图,为提高电磁兼容性,模块正面采用了金属屏蔽罩。根据天线形式、发射功率以及内置协议的不同,共有10多种可选的模块产品。

图3-2 NRF905模块外形及引脚图

3.2 ADXL345

加速度传感器是能够测量物体运动物理量的电子设备。加速度,实际上就是物体在加速过程中所受外力的合力,更像是地球万有引力。在当今世界上,通过速度传感器测量物体外力引起的加速度,可以计算出设备相对于水平面的倾斜角度。通过计算动态加速度,可以分析出设备运行情况和动作趋势。现今工控技术的领域中,加速度传感器很多用在分析高速运作的发动机振动上,用来做减震设备,最大程度保护机器运转的稳定性。另一方面,电脑硬盘也应用了加速度传感器,当硬盘不慎跌落时,加速度会大于自由落体时的数

4

值,可以此来及时进行数据紧急备份。

加速度传感器可分为压电式加速度传感器、压阻式速度传感器、电容式速度传感器、伺服速度传感器。在电子设备上较为常用的两种型号分别为ADXL345和MMA7455。表1-1为此两种型号速度传感器的参数。

表1-1 ADXL345与MMA7455技术指标的对比

指标 是否有抗噪声 输出信号 电压范围 板载电源芯片 功耗 模块成本 尺寸 通信协议 有 16位数字/模拟 3.3V-5V RT9161 低(一次性电池长期供电) 12.50元 28(mm)×14(mm) SPI/IIC ADXL345 无 10位数字/模拟 3.3V-5V RT9161 一般 13.00元 24.9(mm)×12.7(mm) SPI MMA7455 由表1-1不难看出,ADXL在数据输出方面有更出色的能力。ADXL支持模拟和数字输出,在精度细分高的环境下,模拟输出通过16位AD转换可以得到1024个分级的数字信号,比直接的数字输出有更详细的数字信息。ADXL模块和MMA7455模块都支持SPI通信协议,而ADXL345更支持双线制的IIC通信协议,给主控机腾出更多的I/O接口,并可以为一些只有一个SPI模块驱动的单片机腾出更多的操作资源。

根据以上的资料,本设计主要针对ADXL345性能分析和技术应用。ADXL345用途相当广泛,小至单电源数据采集系统、仪器仪表,大至电池供电系统和医疗仪器,甚至在过程控制中也会应用到ADXL345。ADXL345有多种特殊的检测功能。可以根据活跃和非活跃的检测功能通过比较X、Y、Z任意方向的轴的加速度和用户的设置来检测设备之运动模式。图3-3为输出响应与重力方向的关系。

图3-3 输出响应与重力方向的关系图

5

ADXL345加速度传感器可以通过IIC或者SPI的方式与单片机进行数据交互,简单来说就是通信。根据Datasheet的介绍,本设计可以采取SPI通信模式和IIC通信模式。图3-4为数据手册推荐的4线式SPI模式的连接图,图3-5为数据手册推荐的IIC模式下的连接模式。

图3-4 推荐的SPI电气连接

图3-5 推荐的IIC电气连接

ADXL345还提供两个中断引脚,INT1和INT2,均是输出引脚,是推挽低阻抗引脚。这两个中断引脚可以控制双击事件、加速度大于指定数值事件、加速度小于指定数值事件、产生新数据中断等多种中断事件。下表1-2为中断引脚输出规格。

表1-2 中断引脚输出规格

ADXL345是一款小而薄的超低功耗3轴加速度计,分辨率高(13位),测量范围达±

6

16g。数字输出数据为16位二进制补码格式,可通过SPI(3线或4线)或I2C接口访问。ADXL345非常适合移动设备应用。它可以在倾斜检测应用中测量静态重力加速度,还可以测量运动或冲击导致的动态加速度。其高分辨率(3.9mg/LSB),能够测量不到1.0°的倾斜角度变化。 该器件提供多种特殊检测功能。活动和非活动检测功能通过比较任意轴上的加速度与用户设置的阈值来检测有无运动发生。敲击检测功能可以检测任意方向的单振和双振动作。自由落体检测功能可以检测器件是否正在掉落。这些功能可以独立映射到两个中断输出引脚中的一个。正在申请专利的集成式存储器管理系统采用一个32级先进先出(FIFO)缓冲器,可用于存储数据,从而将主机处理器负荷降至最低,并降低整体系统功耗。 低功耗模式支持基于运动的智能电源管理,从而以极低的功耗进行阈值感测和运动加速度测量。 ADXL345采用3 mm × 5 mm × 1 mm,14引脚小型超薄塑料封装。功能框图如3-6所示。

● 超低功耗:VS = 2.5 V时(典型值),测量模式下低至23μA,待机模式下为0.1μA。 ● 功耗随带宽自动按比例变化

● 用户可选的分辨率:10位固定分辨率,全分辨率,分辨率随g范围提高而提高,±16g

时高达13位(在所有g范围内保持4 mg/LSB的比例系数)

● 正在申请专利的嵌入式存储器管理系统采用FIFO技术,可将主机处理器负荷降至最低。 ● 单振/双振检测 ● 活动/非活动监控 ● 自由落体检测

● 电源电压范围:2.0V至3.6 ● SPI(3线和4线)和IIC数字接口 ● 灵活的中断模式,可映射到任一中断引脚 ● 通过串行命令可选测量范围 ● 通过串行命令可选带宽 ● 宽温度范围(-40°C至+85℃) ● 抗冲击能力:10,000g

● 小而薄:3mm×5mm×1mm,LGA封装

7

图3-6 ADXL345的内部结构

ADXL345的外形及引脚排列如图3-7所示,其中VDD和GND分别为电源正极和负极接入脚,SDA/SDI/SDIO、SDO/ALT ADDRESS、SCL/SCLK组成SPI或者IIC。

图3-7 ADXL345外形引脚图

8

4硬件设计

NRF905模块集成了构成典型无线网络通信设备所需的主要部件,而ADXL345模块是数字信号输出,应用系统硬件设计只需在此基础上增加主控芯片Atmega128、89C51和部分整合电路即可。

4.1 无线主机

主机控制芯片采用8位高速单片机Atmega128。Atmega128是基于AVR RISC架构的高速8位低功耗CMOS微处理器。AVR单片机在无线高速传输环境下起到举足轻重的作用。Atmega128单片机有丰富的内部资源,如实时时钟RTC能提供程序校时、4个灵活多功能计时器能丰富多线流程设计、两个USART、面向字节的两线接口TWI、8通道AD转换、SPI通信协议端口等等。丰富的I/O接口也为外部器件减少压力。Atmega128主要的工作是数据分析、数据处理、数据存储、数据发送等。本设计以Atmega128开发板为基础,在此开发板上合理分配I/O单元,其电气电路如图4-1、4-2、4-3、4-4、4-5、4-6所示。

图4-1 Atmega128外形引脚图

9

图4-2 复位电路 图4-3晶振电路 图4-4SPI接口

图4-5 无线主机原理图

10

图4-6 ADXL345原理图

通过数据处理,将收集的数据发送到NRF905,再经过无线方式发送到接收端的NRF905。而接收端由STC89C52单片机为基准,接上NRF905,、显示器LCD12854,。这样,一个基于加速度传感器的姿态检测系统就基本就位。首先,ADXL时刻进行数据变化监测,一旦人体发生失衡跌倒状态触发,使休眠位复位,同时自动跳出休眠模式,并在寄存器0x32读出X轴数据0、寄存器0x33读出X轴数据1、0x34读出Y轴数据0、0x35读出Y轴数据1、0x36读出Z轴数据0、0x37读出Z轴数据1。通过2线IIC的通信协议接口,将以上数据传送到Atmega128单片机内,ATmega128单片机在内部将接受到的16位AD转换数据进行处理,将其换算为十进制数据。由ADXL345产生数据到Atmega128换算数据这一过程,称其为单次加速度数据。而人体一个完整的动作,需要多次采集单次加速度数据,并在一定时间范围内进行数据检查和判断。如果多个单次加速度数据在一定时间内有突然的正向加速度和反向加速度,则可以判定这个数据为跌倒数据,然后Atmega128单片机直接将跌倒的代码传到NRF905的寄存器中,然后通过控制NRF905的寄存器触发无线模块发送端发送数据,也就是跌倒这一事件对应的代码。直接发送代码的好处是把程序的轻重分工得到优化,把复杂的任务交给更灵活和敏捷的AVR单片机,而反应相对慢、数据存储量少的STC89C51则做简单处理,如数据显示、声光报警等。

4.2无线从机

从机控制芯片采用的是STC89C51。89C51(STC12C5A08S2)是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—Falsh Programmable and Erasable Read Only Memory)的低电压、高性能CMOS8位微处理器,俗称单片机。单片机的可擦除只读存储器可以反复擦除1000次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片

11

中,ATMEL的89C51是一种高效微控制器,89C2051是它的一种精简版本。89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。采用89C51主要是用来做数据显示的作用和数据接收。数据显示采用的是LCD屏,分辨率为128×64,内置汉字字符,内置DC-DC转换电路,免除了外加负压。当主机代码发到NRF905接收模块时,会将代码存储到相应的寄存器并保存。STC89C51则在不断显示数据的同时不断检测NRF905是否新数据录入,所以当有新数据录入时,STC89C51能马上读取数据并做简单处理送到LCD12864模块接口,进行数据显示,如果代码为跌倒警报,则进行相关声光警报演示。其资源详细分布如下图4-6、4-7、4-8所示。

图4-6 89C51连接图

图4-7 复位电路图

12

图4-8 无线从机原理图

13

4. 控主机

5软件设计

人体姿态检测系统的软件设计主要分为三大部分。第一部分,数据处理部分。这部分由无线主机控制芯片做软件处理,例如数据读取、数据转移、数据存储等操作。第二部分,无线数据传送。由主从机配合实现,要做到数据稳定、数据交互效率高、程序代码便于维护等要求。第三部分,数据显示并进行声光警报。此部分由从机进行处理,数据要求稳定即可。

5.1 ICCAVR与Keil集成开发环境

自ATMEL公司所研发的AVR系列单片机诞生以来,有很多第三方提供AVR单片机的集成开发软件,在本设计中,采用ICCAVR提供集成开发环境。ICCAVR是一种符合ANSI标准的C语言来开发单片机程序的一个工具,功能合适、适用方便、技术支持完善。ICCAVR提供了强大的函数库,字符类型函数、标准输入输出函数、编制库和内存分配函数、数学函数、字符串函数、BCD转换函数、存储器访问函数、延时函数、LCD函数、4×40字符型LCD函数、以8位外部存储器模式接口的LCD显示函数、IIC总线函数、LM75温度传感器函数、DS1621温度计函数、PCF8583实时时钟函数、DS1302实时时钟函数、DS1307实时时钟函数、单线通讯协议函数、DS1820/1822温度传感器函数、SPI函数、电源管理函数、格雷码转换函数。

C51的集成开发环境由ARM Germany GmbH和ARM Inc公司共同发布的KeilμVision4

提供。Keil集成了各类广泛的工具,包括、ANSI C编译器、宏汇编程序、调试器、连接器、库管理器、固件和实时操作系统核心(real-time kernel)。而且有丰富的程序算法技术支持。与汇编相比,C语言在功能上、结构性、可读性、可维护性上都有明显的优势,大大提高了工作效率和减少项目开发周期。利用这些现成的函数库和集成开发环境的优势,界面如图5-1。

图5-1 Keil与ICCAVR界面图

5.2 主机程序流程

主机控制芯片Atmega128主要任务是与ADXL345以及NRF905进行基于指定通信协

14

议的命令读写。NRF905的通信方式只能采用SPI通信协议,ADXL345可以选择TWI通信协议和SPI通信协议,在此设计中,对于只有一个SPI模块的Atmega128单片机,需要把SPI通信模块的资源分配给NRF905,而ADXL345则使用TWI通信方式,这样的分配既能保证无线通讯的及时性和稳定性,也能使加速度数据在一定的速率要求下完整读取,降低了开发难度和开发周期。图5-2为Atmega128软件设计程序流程框图。

NRF905 传送数据 图5-2 主机软件流程图 加速度与数据分析 ADXL是否有新数据 存储数据 ADXL345 初始化 NRF905 初始化 Atmega128 初始化 开始 5.3 从机程序流程

从机由89C51单片机来控制,作为无线通信的末端设备。从机控制器主要任务是接收数据,然后把数据传送到LCD12864上做显示,同时写入控制命令,并根据显示的数据进行声光报警。NRF905与89C51的通信协议和Atmega128一样,都是使用SPI协议,但89C51采用的是模拟形式去实现SPI协议,分配的端口为P1。从机还要做显示工作,使用显示屏幕LCD12864需要单片机分配Port 1和Port 2共16个端口。在此基础上,同过模拟IIC协议把收到的数据存储到24C02d的EEPROM里面,进行数据掉电保存。图5-3为51单片机与LCD显示器的程序流程。

15

开始 单片机端口初始化 NRF905 初始化 LCD12864 初始化 是否接受 新数据 数据传送 新数据是否触发警报 声光警报 数据显示 图5-3 从机软件流程图

16

6 系统调试

系统调试就是在完成硬件构造的情况下,载入应用程序使其实现相应的功能,并且程序一般具有快速响应性、易读性、易转移性,代码优化性、检测便捷性、稳定性等。系统调试是电子设计过程中占比重相当大的环节,通过有效的调试,可以在验证硬件的过程中不断寻找出以存在的系统错误、漏洞、瑕疵、警告等。并检查出硬件设计中是否存在故障以及人为错误。接下来介绍基于加速度传感器的姿态检测设计应用的系统调试。

无线传感器和加速度传感器安装好以后,首先要用万能表检测一下电源的正负极是否存在短路的情况,检测每个节点是否接触良好,检测芯片插脚是否牢固并且没有短接,硬件一切妥当的话,可以先尝试下载一小段程序进行调试。用以检查外部设备,如LED发光灯、蜂鸣器等。若此段程序不能达到预期效果,则要寻找问题。期间可以通过万能表检测硬件电路,通过示波器分析输出输入信号,观察信号的编码、频率、峰值等,再加上自己的经验分析,一般能在短时间内寻找问题所在,有时候也需要反复推敲测试程序本身的逻辑问题,一旦发生错误要进行修改,知道程序能跑通并且能实现想要的效果为止,不然没法往下做。

在测试程序可以顺利实现目的效果的时候,就要顺着步骤往下调试,把程序慢慢扩充至完整化。在编写无线通信程序的时候,要写配置NRF905的头文件,在这里,可以按照数据手册上的参数进行配置,按照官方的配置参数,一般能取得较好的效果。本设计先采取简单的触发方式去调试无线通信,也就是通过发送置位信息使接收端的89C51单片机的某个LED点亮,简单的置位程序能去除测试程序的复杂性、错误发生随机性、错误发生不确定性等。这样做的目的是为了直观地检验无线通信是否可行,而且避免因为所发送的数据复杂而出现错误,而且这样的错误相对来说比较难定位。当出现错误的时候,只要对NRF905部分进行调试即可。无线通信确定无误以后,便可以开始修改无线通信参数配置文档,并在51单片机接收端加入LCD显示器。修改无线通信参数配置是为了增加数据位给加速度传感器传输数据,而LCD显示器的调试显然是为了方便后面加速度传感器的调试,数据的变化可以及时在LCD显示屏展现出来,直观的数据效果可以为调试提供方便。系统调试到本阶段,已经完成了无线通信硬件测试、LCD显示测试、数据传送测试。

随后就要进行最重要最核心的ADXL345调试,对ADXL345数据进行处理。人体运动的加速度值,会随人体动作不断变化,而且ADXL345是先接收模拟值数据再进行AD转换,所以,要得到有用的数据,必须进行三级检测。第一级检测,采用SVM算法,对传感器传出的数据进行简单的筛选,该算法具有自我学习能力,把大多类似跌倒的情况积累起来,进行统计。第二级,对第一级算法的进一步分析,通过比较软件自身设定的阀值来确定该动作是否跌倒、行走、坐下等,阈值更是根据用户的身高、体重、性别、年龄等信息设置。第三级,是在第二级处理之后,判断加速度值是否有变化,如果变化,则抛弃前

17

面两级数据,如果没变化,再判断人体倾角状态,从而判断剧烈动作人体是否躺下,进一步确定老人是否已经跌倒。

经反复调试,由1台监控主机、1台从机和2个无线收发器组成的基于加速度姿态检测系统已经完成调试。上述设备能在1117芯片的支持下,得到3.3V电源供电,进行持久的运作。ADXL345也按照原计划,按所设定的频率,将加速度数值一次一次读取。将测得数据传送到LCD显示,并处理数据进行声光警报。

实测结果,整个系统最大工作电流为39mA,休眠状态下电流为0.25mA。 平衡检测反应在3.0秒以内, 信号传输距离最大为5.3米 。

18

7 结论

本项目所研制的基于加速度传感器的人体姿态检测由数据收集主机、数据接收从机、无线通信模块、数据显示模块构成,由ADXL345采集三轴加速度,Atmega128单片机进行整修和数据分析,然后由发送端将数据送到433Mhz开放ISM频段,通过无线的方式将数据送到接收端单片机,接收端单片机对数据进行简单应用,如声光警报和数据显示。最后,由无线环境、单片机、传感器、交互器件组成的人体姿态监测系统的完整过程完成。

该项目中核心部分是Atmega128单片机,其拥有的驱动能力和片上资源在单片机家族里名列前茅,正因其强大的数据处理能力、多种多样寄存器、丰富的I/O接口,提高了整个应用系统的软、硬件设计效率,并最大限度地满足了数据传送的可靠性、纠错性、安全性、稳定性和低功耗等苛刻要求。

本项目还有很多可以扩展的地方,例如,可以应用到蓝牙技术,在接收端绑定一个蓝牙发射器,讲数据转送到蓝牙端传到带有蓝牙接收功能的手机,并激活手机对应的软件,向指定的手机号码拨号或者短信提醒。这项功能的延伸使整个系统更人性化和完善,并使救护机制更多样化。

伴随日新月异的科技革新,相信不久的将来,对老年人的关注度会越来越高,这方面的项目研究会越来越多,更希望项目中提及的技术能得到更广泛的普及

19

参考文献

[1] 张鑫,王培勇,时永乐.基于nRF9E5的运动20心率采集和无线发送处理系统[J].北京生物医学工

程,2008,27(1):78-81.

[2] 侯文生,戴加满,郑小林.基于加速度传感器的前臂运动姿态检测[J].传感器与微系统,2009,28

(1):106-108.

[3] Krco S, Delic V. Personal wireless sensor network for mobile health care

monitoring[C]//Proc of Telecommunications in Modern Satellite, Cable and Broadcasting Service,2003:471-474.

[4] 吴翔.人体位姿跟踪算法研究及应用[D].武汉:武汉理工大学,2006:7-8.

[5] 石建国,马云辉.基于JN5139的无线传感器网络体温脉搏监测系统[J].单片机与嵌入式系统应

用,2010(8):57-60.

[6] 刘蓉,刘明.基于三轴加速度传感器的手势识别[J].计算机工程,2011,037(3):7-9.

[7] 于春战,张新义,贾庆轩. 类人机器人腕用六维加速度传感器的理论研究 [J].仪表仪器学

报,2011,32(8):46-52.

[8] 徐礼胜,林海叶,杨飞飞. 一种无线老年人伴护系统中3D加速度传感器的校准.第十二届全国医药

信息学大会[A];第十二届全国医药信息学大会论文集[C];2011.

[9] 才海南,周兆英.加速度传感器的动态特性软件补偿方法研究[J].仪器表学报,1998,3(3):263-267. [10] 候向锋,刘蓉,周兆丰.加速度传感器MMA7260在步态特征提取中的应用[J].传感技术学报,2007,

20(3):507-511.

[11] 郝妍娜,洪志良.基于MCU和nRF905的低功耗远距离无线传输系统[J].电子技术应用,2007,33

(8):60-66.

[12] 马金祥,何一鸣.基于nRF905模块的AT89S单片机无线收发系统设计[J].通信技术,2009,24(2):

23-26.

[13] 候海岭, 姚年春.无线收发芯片nRF905的原理及其单片机系统中的应用[J].仪器表用户,2006,35

(3):70-71.

[14] 赵学军.基于多级SPI协议的多级通信[J].单片机与嵌入式系统应用,2006(7):67-68.

20

附 录

附录A 系统样机实物图

21

附录B 源程序清单

/***************************************/

/*程序名称:温度湿度时间人体加火焰串口加按键 版本号:Vol.001 /*程序应用PCB:Vol.P001

/*设备设置:晶振11.0529Mhz,单片机为STC89C51RC /*硬件设置:NRF905配置3.3V电压. /*

NRF905的接线方式参照程序中的设置

/*程序特点:在59的基础上加入键盘控制时间设置. /* /*

/* /*仍未解决问题: /*后置计划: /*

/*作者:Jermaine.Pen ____2012.5.31早上调试_____2012.5.31午饭前完成 /* /* /* /* /*

#include #include #define uint unsigned int #define uchar unsigned char #define LCD_data P0

/********************************/ /*函数名称:端口配置, /*函数功能: /*输入量: /*输出量:

/********************************/

22

经测试:成功____

效果:接收发送板发来的11位数值并在12864显示并发送串口数据

时间按键有效

018ATmega128_LastAttack_AirCheck_Text1.c

配套程序:017ATmega128_TemputerAirWetText2.c

/***************************************/

sbit TX_EN= P1^0; sbit TRX_CE=P1^1; sbit PWR_UP=P1^2; sbit CD=P3^3; sbit AM=P3^4; sbit DR=P3^2; sbit MISO=P1^3; sbit MOSI=P1^4; sbit SCK=P3^6; sbit CSN=P3^5;

sbit LCD_RS=P2^1; sbit LCD_RW=P2^2; sbit LCD_EN=P2^3;

sbit sda=P2^7;//原来是P1^6,现在改为P2^7 sbit scl=P2^6;//原来是P1^5,现在改为P2^6 //sbit BEEP=P3^7;

sbit KEYshi=P1^5; sbit KEYge=P1^6;

uchar TxRxBuffer[11]; //11字节数据/11个两位16进制数据 bit success_flag=0; uint temputer,data1;

char data2,data3,data4,data5,data6,data7,data8,minhit; uchar min,hour,sco;

uchar dis1[]={\轴: \//www.txmuc.com uchar dis2[]={\轴: \ 的任意一位赋值,下面都一样. uchar dis3[]={\轴: %uchar dis4[]={\身体情况: \

/**************************************/ /*函数名称:毫秒级延时函数,微秒级延时函数

23

//此处若用uchar code dis1[]=的话则无法对dis1[i]

/*函数功能:延时/等待 /*输入量:延时时间ms /*输出量:无

/**************************************/ void delay_nms(uchar ms) {

uchar i,j; for(i=ms;i>0;i--)

for(j=113;j>0;j--);

}

void Delay(uint x) {

uint i;

for(i=0;i

}

void delay() { ; ; }

/********************************/ /*函数名称:SPI写命令或数据 /*函数功能: /*输入量:数据或命令 /*输出量:

/********************************/ void SpiWrite(uchar date) {

uchar i=8; while (i--) {

Delay(10);

MOSI=(bit)(date&0x80); date<<=1 ; Delay(10);

24

SCK=1; Delay(10); SCK=0; } }

/********************************/ /*函数名称:SPI读数据 /*函数功能: /*输入量: /*输出量:

/********************************/ uchar SpiRead() {

uchar i=8,date1=0;; while (i--) {

date1<<=1 ; date1|=MISO; SCK=1 ; Delay(10); SCK=0 ; Delay(10);

//from 905 read data

}

return date1; }

/********************************/ /*函数名称:SPI初始化 /*函数功能: /*输入量: /*输出量:

/********************************/

void Ini_System(void) /*初始化配置寄存器*/ { CSN=1; SCK=0; PWR_UP=1; TRX_CE=0; TX_EN=0; Delay(2);

25

CSN=0;

SpiWrite(0x00); //配置命令//

SpiWrite(0x6C); //CH_NO,配置频段在433.2MHZ

SpiWrite(0x0C); //输出功率为10db,不重发,节电为正常模式 SpiWrite(0x44); //地址宽度设置,为4字节

SpiWrite(0x0C);SpiWrite(0x0C); //接收发送有效数据长度为11字节 SpiWrite(0xE7);SpiWrite(0xE7);SpiWrite(0xE7);SpiWrite(0xE7); //接收地址 SpiWrite(0xDE); CSN=1; PWR_UP=1; TRX_CE=1; TX_EN=0; Delay(1000); }

/********************************/ /*函数名称:SPI等接收 /*函数功能: /*输入量: /*输出量:

/********************************/ void Wait_Rec_Packet(void) {

if(DR) {

TRX_CE=0;//如果数据准备好,则进入待机模式,以便SPI口操作 CSN=0;

SpiWrite(0x24);//接收数据包

TxRxBuffer[0] = SpiRead(); TxRxBuffer[1] = SpiRead(); TxRxBuffer[2] = SpiRead(); TxRxBuffer[3] = SpiRead(); TxRxBuffer[4] = SpiRead(); TxRxBuffer[5] = SpiRead(); TxRxBuffer[6] = SpiRead(); TxRxBuffer[7] = SpiRead(); TxRxBuffer[8] = SpiRead(); TxRxBuffer[9] = SpiRead(); TxRxBuffer[10] = SpiRead();

26

TxRxBuffer[11] = SpiRead(); while(DR); TRX_CE=1;

if((TxRxBuffer[0]==0x01)&&(TxRxBuffer[1]==0x02)) CSN=1;

{ TxRxBuffer[0]=0xff; TxRxBuffer[1]=0xff; success_flag=1; data1=TxRxBuffer[2]; data2=TxRxBuffer[3]; data3=TxRxBuffer[4]; data4=TxRxBuffer[5]; data5=TxRxBuffer[6]; data6=TxRxBuffer[7]; data7=TxRxBuffer[8]; data8=TxRxBuffer[9]; minhit=TxRxBuffer[10]; if(minhit==1)sco++; minhit=0;

Ini_System();

}

}

}

/********************************/ /*函数名称:LCD写命令

/*函数功能:写命令到LCD寄存器 /*输入量:command /*输出量:无

/********************************/ void write_command(uchar command) {

LCD_RS=0;

27

}

LCD_RW=0; LCD_EN=0; P0=command; delay_nms(5); LCD_EN=1; delay_nms(5); LCD_EN=0;

/********************************/ /*函数名称:LCD写数据 /*函数功能: /*输入量:data /*输出量:无

/*说 明:其实也起到驱动显示的作用,只要一写数据,LCD就会立刻显示 /*

并在写数据显示之前一定要设置好位置.LCD_posit

/********************************/ void write_data(uchar message) {

LCD_RS=1; }

/********************************/ /*函数名称:LCD显示位置设置

/*函数功能:设置字符要显示的位置并立即显示

/*输入量:坐标x和y,00代表第一行第一个字符, 01代表第一行第二个字符,31代表第四行第二个字符 /*输出量:无

/********************************/ void LCD_posit(uchar x,uchar y) {

uchar posit;

28

LCD_RW=0; LCD_EN=0; P0=message; delay_nms(5); LCD_EN=1; delay_nms(5); LCD_EN=0;

if(x==0)

{x=0x80;} else if(x==1) {x=0x90;} else if(x==2) {x=0x88;} else if(x==3) {x=0x98;} posit=x+y;

write_command(posit);

}

/********************************/ /*函数名称:LCD初始化

/*函数功能:开显示,关光标,并口方式,清屏/*输入量: /*输出量:

/********************************/ void LCD_init() {

write_command(0x03); delay_nms(5); write_command(0x0c); delay_nms(5); write_command(0x01); delay_nms(5);

}

/********************************/ /*函数名称:LCD显示准备 /*函数功能:显示LCD静态字符 /*输入量: /*输出量:

29

/********************************/ void LCD_ready() { uchar i; LCD_posit(0,0); i=0;

while(dis1[i]!='\\0') {

write_data(dis1[i]); i++;

} LCD_posit(1,0);

i=0;

while(dis2[i]!='\\0') {

write_data(dis2[i]); i++; }

LCD_posit(2,0); i=0;

while(dis3[i]!='\\0') {

write_data(dis3[i]); i++; }

LCD_posit(3,0); i=0;

while(dis4[i]!='\\0') {

write_data(dis4[i]); i++; }

}

/********************************/ /*函数名称:LCD显示

/*函数功能:显示LCD动态变化字符 /*输入量: /*输出量:

30

/********************************/ void LCD_display() { uchar i;

uchar airtemp[]={\

dis1[6]=data1/1000+0x30; dis1[7]=data100/100+0x30; dis1[8]=data1000/10+0x30; dis1[9]=data1000+0x30; //

dis1[10]=sco/10+0x30; dis1[15]=sco+0x30; LCD_posit(0,3); i=6;

while(dis1[i]!='\\0') {

write_data(dis1[i]); i++;

}

i=0;

dis2[6]=data2/1000+0x30; dis2[7]=data200/100+0x30; dis2[8]=data2000/10+0x30; dis2[9]=data2000+0x30; LCD_posit(1,3);

i=6;

while(dis2[i]!='\\0') {

write_data(dis2[i]); i++; }

i=0;

31

dis3[6]=data3/1000+0x30; dis3[7]=data300/100+0x30; dis3[8]=data3000/10+0x30; dis3[9]=data3000+0x30; LCD_posit(2,3);

i=6;

while(dis3[i]!='\\0') {

write_data(dis3[i]); i++; }

i=0;

if(data8==4)

{ dis4[10]=airtemp[4];} else if(data8==3) { dis4[10]=airtemp[4];} else if(data8==2) { dis4[10]=airtemp[4];} else if(data8==1) { dis4[10]=airtemp[4];} else //if(data8==0) { dis4[10]=airtemp[4];} LCD_posit(3,5);

i=10;

while(dis4[i]!='\\0') {

write_data(dis4[i]); i++; } i=0;

32

}

/********************************/ /*函数名称:时间计算

/*函数功能:主要处理时间加减以及判断是否加min /*输入量: /*输出量:

/********************************/ void time_count() { if(sco==2) { sco=0; min++; if(min==99) {

min=0; hour++; if(hour==24) {

min=0; hour=0; sco=0;

}

}

}

}

void TXRX_init(void) {

33

EA=1; //开总中断 ES=1; //允许串口中断 ET1=1; //允许定时器T1的中断

TMOD=0x20; //定时器T1,在方式2中断产生波特率 PCON=0x00; //SMOD=0

SCON=0x50; // 方式1 由定时器控制 TH1=0xfd; //波特率设置为9600 TL1=0xfd;

TR1=1; //开定时器T1运行控制位 }

void main(void) {

// uchar turnmum; Ini_System();

PWR_UP=0; DR=1;

success_flag=0;

TRX_CE=0; Delay(1000);

TX_EN=0; TRX_CE=1; PWR_UP=1;

TXRX_init(); LCD_init(); LCD_ready();

while(1) {

if(success_flag)

TX_EN=0;

34

Wait_Rec_Packet(); //等待接收完成 time_count(); LCD_display();

{

TRX_CE=1; PWR_UP=1;

另外配套的Atmega128的程序在http://wenku.http://www.wodefanwen.com//view/5ce8f8b931126edb6e1a106e 或者搜索018ATmega128_LastAttack_AirCheck_Text1即可,或者加微信号 PenloveFan1314 咨询。

}

delay_nms(25); Delay(5000); success_flag=0;

//

delay_nms(25); }

35

致 谢

本项目的系统硬件研制和论文撰写都得到石建国老师的精心指导、多次指正和切身支持。首先,在这里要衷心地对JianGuo.Shi老师多日以来的辛勤付出和认真负责的态度表示最深沉的感谢!

大学四年,在学习、生活、思想、德育、情感各方面,老师们和同学们都给予我无私的关怀、支持和鼓励,让我在大学四年不但修得知识,更是修得恩情,友情。在即将完成大学学业,离开母校走向社会之际,心中充满了对母校老师和同学们的感激和依恋之情,母校4年的培养使我的知识水平和思想境界有了非常明显的提高,母校浓郁的学术、文化氛围使我的大学生活充实而快乐。在这里,向各位道声,谢谢!

还要谢谢父母亲,他们给予我无私的爱,他们给予我无条件的支持,还有时时刻刻的鼓励,这一切是我在浩瀚人生中最明亮的灯塔,引着我走向更好的未来。

36

本文来源:https://www.bwwdw.com/article/uqn7.html

Top