基于STM32智能拐杖Proteus仿真
基于STM32智能拐杖设计
摘要
随着人口老龄化加剧及视障人群出行需求的提升,传统拐杖功能单一,难以满足使用者对安全出行、紧急求助等多元化需求。本文设计了一款基于STM32系列单片机的智能拐杖,整合超声波测距模块、OLED显示模块、光敏电阻、滑动变阻器(模拟水位)、MPU6050陀螺仪(按键模拟摔倒)、GPS定位模块、GSM模块、NB-IoT模块及声光报警模块,实现环境参数检测、障碍物避障、危险预警、紧急求助、摔倒检测、定位追踪及云端数据监控等功能。通过Proteus软件搭建仿真电路,编写相应控制程序,结合虚拟终端模拟GPS、GSM、NB-IoT模块功能,经仿真测试验证,该智能拐杖能实时检测光照强度、水位、GPS定位及障碍物距离,准确触发分级报警、自动开灯、紧急求助及摔倒预警,数据可上传至腾讯云供远程查看,响应迅速、性能稳定,能有效提升视障及老年使用者的出行安全性与便捷性,具有结构简单、成本低廉、实用性强等特点,可广泛应用于视障人群及老年人的日常出行辅助。
关键词:STM32;智能拐杖;Proteus仿真;障碍物检测;紧急求助;腾讯云监控

1 绪论
1.1 研究背景与意义
当前,全球人口老龄化趋势日益明显,我国老年人口数量持续增长,同时视障人群也面临着出行不便、安全隐患突出等问题。传统拐杖仅能提供支撑功能,无法应对出行过程中的障碍物、水坑、光线昏暗、突发疾病、摔倒等突发情况,导致使用者出行风险较高,极易发生意外事故。
智能拐杖作为一种新型出行辅助设备,融合了嵌入式技术、传感器技术、无线通信技术及云端技术,能够实时感知周围环境,提供障碍物预警、危险提示、紧急求助、定位追踪等功能,有效弥补传统拐杖的不足,降低使用者出行风险,提升出行安全性与独立性。因此,设计一款功能完善、性能可靠、操作便捷的基于STM32的智能拐杖,不仅能解决视障人群及老年人的出行难题,还能响应智慧养老、无障碍出行的社会需求,具有重要的现实意义和应用价值。

1.2 国内外研究现状
国外对智能拐杖的研究起步较早,技术较为成熟,产品多集成GPS定位、摔倒检测、无线通信等功能,部分高端产品还具备语音交互、健康监测等功能,如美国、日本推出的智能拐杖,可通过GSM模块发送求助信息,结合GPS定位实现家人实时追踪,但这类产品结构复杂、成本较高,难以在发展中国家普及。
国内对智能拐杖的研究近年来逐渐增多,多以单片机为核心,搭配基础传感器实现简单的避障、报警功能,但存在功能单一、响应速度慢、数据传输不稳定、缺乏云端监控等问题。随着STM32系列单片机的普及,其高性能、低功耗、高性价比的优势逐渐凸显,越来越多的研究者将其应用于智能拐杖设计中,结合NB-IoT、腾讯云等技术,实现数据实时上传与远程监控,进一步提升了智能拐杖的智能化水平。
1.3 研究内容与目标
本文的核心研究内容是设计一款基于STM32的智能拐杖,完成硬件电路设计、软件程序编写及Proteus仿真测试,整合各类传感器与通信模块,实现预设的全部功能,具体研究内容如下:
- 确定系统整体方案,明确各模块的功能及接口关系,完成硬件电路的设计与绘制;
- 选择合适的元器件,搭建Proteus仿真电路,利用虚拟终端模拟GPS、GSM、NB-IoT模块功能,滑动变阻器模拟水位传感器,按键模拟MPU6050摔倒检测;
- 编写主控程序、传感器检测程序、OLED显示程序、声光报警程序、无线通信程序、紧急求助程序及云端数据上传程序;
- 进行仿真测试,验证系统各功能的稳定性和准确性,优化程序参数,解决测试中出现的问题,确保系统满足实际使用需求。
研究目标:实现光照强度、GPS定位、水位的实时检测与OLED显示;通过水位检测实现水坑预警,超声波检测实现障碍物避障,光敏电阻实现自动开灯;通过按键实现紧急求助,MPU6050(按键模拟)实现摔倒检测并发送求助信息;实现数据上传至腾讯云,支持远程查看;确保系统响应迅速、检测准确、运行稳定,操作便捷,满足视障及老年使用者的出行辅助需求。
1.4 论文结构安排
本文共分为6章,具体结构安排如下:
- 第1章:绪论,阐述研究背景与意义、国内外研究现状、研究内容与目标及论文结构安排;
- 第2章:系统总体方案设计,确定系统核心功能、总体架构及各模块的选型;
- 第3章:系统硬件电路设计,详细设计各模块的硬件电路,绘制电路原理图;
- 第4章:系统软件程序设计,编写各模块的控制程序,梳理程序流程,实现云端数据上传;
- 第5章:Proteus仿真测试,搭建仿真电路,进行功能测试与结果分析;
- 第6章:总结与展望,总结本文的研究成果,分析系统存在的不足,并对未来的改进方向进行展望。
2 系统总体方案设计
2.1 系统核心功能分析
根据题目要求,本系统需实现以下核心功能,全面保障使用者出行安全与便捷:
- 实时检测功能:通过光敏电阻检测周围环境光照强度,滑动变阻器模拟水位传感器检测拐杖底部水位,超声波模块检测前方障碍物距离,GPS模块(虚拟终端)获取定位信息,实时采集各类环境及位置数据;
- 数据显示功能:将光照强度、水位高度、障碍物距离、GPS定位信息等数据,实时显示在OLED屏幕上,方便使用者查看(视障使用者可结合语音提示,本次仿真重点实现显示功能);
- 水位预警功能:当水位传感器(滑动变阻器)检测到的水位超过设定高度时,触发声光报警,提醒使用者前方有水坑,避免踏入危险区域;
- 障碍物避障功能:超声波模块实时检测前方障碍物距离,当距离小于预设安全值时,蜂鸣器发出警报,提醒使用者避开障碍物;
- 自动开灯功能:光敏电阻检测到光照强度低于安全阈值时,自动开启白灯LED,提高使用者可见度,同时警示周围行人和车辆;
- 紧急求助功能:设计紧急求助按键,使用者遇到紧急情况时,按下按键,系统通过GSM模块(虚拟终端)向预设联系人发送求助短信及GPS定位信息;
- 摔倒检测功能:通过MPU6050陀螺仪(按键模拟)检测使用者是否摔倒,一旦检测到摔倒行为,立即通过GSM模块发送求助短信及GPS定位信息,同时触发声光报警;
- 云端监控功能:通过NB-IoT模块(虚拟终端+串口调试工具)将各类检测数据上传至腾讯云,支持家人或监护人事先远程查看相关数据,实时掌握使用者状态。
2.2 系统总体架构设计
本系统以STM32系列单片机作为主控核心,采用模块化设计思想,将整个系统分为9个功能模块,分别是:主控模块、超声波测距模块、OLED显示模块、光敏电阻模块、水位检测模块(滑动变阻器模拟)、摔倒检测模块(MPU6050+按键模拟)、GPS定位模块(虚拟终端)、GSM通信模块(虚拟终端)、NB-IoT通信模块(虚拟终端+串口调试工具)、声光报警模块、LED灯光模块、紧急求助按键模块。系统总体架构如图2-1所示(此处为仿真论文,可在Proteus中绘制架构图,文中用文字描述)。
各模块的功能分工如下:
- 主控模块:STM32单片机,负责接收各模块的输入信号,处理数据,发送控制指令,协调各模块协同工作,实现数据上传至腾讯云;
- 超声波测距模块:负责发射超声波信号,接收反射信号,计算与前方障碍物的距离,并将距离数据传输给主控模块;
- OLED显示模块:接收主控模块发送的各类数据,实时显示光照强度、水位、障碍物距离、GPS定位信息等,提供直观的数据展示;
- 光敏电阻模块:检测周围环境的光照强度,将模拟信号转换为数字信号,传输给主控模块,用于控制LED灯光的开启与关闭;
- 水位检测模块:采用滑动变阻器模拟水位传感器,通过改变滑动变阻器阻值模拟水位变化,将模拟信号传输给主控模块,实现水位预警;
- 摔倒检测模块:以MPU6050陀螺仪为核心,搭配按键模拟摔倒动作(仿真中通过按键触发摔倒信号),检测使用者是否摔倒,将摔倒信号传输给主控模块;
- GPS定位模块:通过虚拟终端模拟,获取使用者实时定位信息,传输给主控模块,用于求助时发送定位及云端数据上传;
- GSM通信模块:通过虚拟终端模拟,接收主控模块的求助指令,向预设联系人发送求助短信及GPS定位信息;
- NB-IoT通信模块:通过虚拟终端+串口调试工具模拟,将主控模块处理后的各类数据上传至腾讯云,实现云端监控;
- 声光报警模块:由蜂鸣器和LED报警灯组成,接收主控模块的报警指令,启动声光提醒,用于水位预警、障碍物避障、摔倒报警及紧急求助;
- LED灯光模块:由白灯LED组成,接收主控模块的控制指令,当光照不足时自动开启,提高使用者可见度;
- 紧急求助按键模块:由独立按键组成,使用者按下按键后,向主控模块发送紧急求助信号,触发后续求助流程。
2.3 核心元器件选型
为保证系统性能稳定、成本可控,结合题目要求及仿真需求,对各模块的核心元器件进行选型,具体如下:
2.3.1 主控芯片选型
选用STM32F103C8T6单片机作为主控芯片,该芯片是ST公司推出的32位ARM Cortex-M3内核单片机,主频最高可达72MHz,具有128KB Flash、20KB SRAM,支持多种外设接口(GPIO、UART、ADC、I2C等),能够满足各模块的控制、数据处理及通信需求,且成本低廉、功耗低、编程灵活,适合小型嵌入式智能设备的设计,完全适配本智能拐杖系统。
2.3.2 超声波测距模块选型
选用HC-SR04超声波测距模块,该模块体积小、功耗低、测量精度高,测量距离范围为2cm~400cm,测量误差≤3mm,无需复杂的电路设计,通过GPIO口与主控芯片连接,即可实现障碍物距离检测,完全满足本系统的避障需求,且适配Proteus仿真环境。
2.3.3 OLED显示模块选型
选用0.96英寸I2C接口的OLED显示模块,分辨率为128×64,具有自发光、对比度高、响应速度快、功耗低等优点,无需背光,可清晰显示各类检测数据,且接口简单,占用主控芯片的I2C接口,不占用过多的IO资源,适合集成在体积小巧的智能拐杖中。
2.3.4 光敏电阻与水位检测模块选型
光敏电阻选用GL5516型,该光敏电阻灵敏度高,光照强度变化时阻值变化明显,可将光照强度转换为模拟电压信号,通过ADC接口传输给主控芯片,适配仿真环境;水位检测模块采用滑动变阻器模拟,通过改变滑动变阻器的阻值,模拟水位高度变化,将模拟信号通过ADC接口传输给主控芯片,无需额外添加专用水位传感器,简化电路设计,降低仿真难度。
2.3.5 摔倒检测模块选型
摔倒检测模块选用MPU6050陀螺仪传感器,该传感器集成了加速度计和陀螺仪,可检测物体的姿态变化,能够准确判断使用者是否摔倒,通过I2C接口与主控芯片连接;仿真中,搭配独立按键模拟摔倒动作,当按键按下时,向主控芯片发送摔倒触发信号,简化仿真操作,同时保留实际硬件的功能逻辑。
2.3.6 通信模块选型
GPS定位模块、GSM通信模块、NB-IoT通信模块均采用Proteus虚拟终端模拟,无需添加实际硬件模块:
- GPS模块:通过虚拟终端模拟,设置固定的经纬度数据,模拟定位功能,将定位信息通过UART串口传输给主控芯片;
- GSM模块:通过虚拟终端模拟,接收主控芯片发送的求助指令及定位信息,模拟向预设联系人发送短信;
- NB-IoT模块:通过虚拟终端+串口调试工具模拟,将各类检测数据通过UART串口传输,模拟数据上传至腾讯云的过程。
2.3.7 声光报警、LED灯光与按键模块选型
声光报警模块:蜂鸣器选用有源蜂鸣器,无需外接驱动电路,通电即可发声,声音清晰;报警LED选用红色LED,亮度高、功耗低,与蜂鸣器配合实现声光双重报警;LED灯光模块选用白色LED,亮度适中,用于光照不足时提供照明;按键模块选用普通独立按键,分为紧急求助按键和摔倒模拟按键,结构简单、操作便捷,适合老年人和视障使用者使用。
3 系统硬件电路设计
3.1 硬件电路设计原则
本系统硬件电路设计遵循以下原则,兼顾实用性、稳定性和便捷性,适配智能拐杖的使用场景及Proteus仿真需求:
- 实用性:电路设计简洁、可靠,满足系统核心功能需求,避免冗余设计,适配智能拐杖小巧的结构特点;
- 兼容性:各模块接口与STM32F103C8T6单片机的外设接口兼容,便于连接和控制,降低仿真与实际硬件的差异;
- 稳定性:选用性能稳定的元器件,合理设计电源电路和抗干扰电路,确保系统长期稳定运行,避免误报警、数据错乱等问题;
- 低功耗:选用低功耗元器件,优化电路设计,降低系统功耗,便于后续搭配电池供电,提升续航能力;
- 低成本与易仿真:在保证性能的前提下,选用性价比高的元器件,采用虚拟终端模拟通信模块,简化电路设计,降低仿真难度。
3.2 主控模块电路设计
STM32F103C8T6单片机的最小系统电路是整个系统的核心,主要包括电源电路、复位电路和晶振电路,具体设计如下:
- 电源电路:采用5V直流电源供电,通过AMS1117-3.3V稳压芯片将5V电压稳压为3.3V,为单片机和各模块提供稳定的3.3V电源,电源输入端添加电容滤波,减少电源干扰,确保各模块稳定工作;
- 复位电路:采用上电复位和手动复位相结合的方式,复位引脚(NRST)通过电阻连接到3.3V电源,通过电容接地,手动复位按键并联在电容两端,按下按键即可实现手动复位,确保系统出现异常时能够及时复位;
- 晶振电路:选用8MHz外部晶振,搭配两个22pF电容接地,为单片机提供稳定的时钟信号,通过倍频电路将主频提升至72MHz,满足系统的运算、数据处理和通信需求。
主控模块核心引脚分配(适配仿真及功能需求):PA0~PA1连接ADC接口(分别连接光敏电阻、滑动变阻器),PA4连接超声波模块的Trig引脚,PA5连接超声波模块的Echo引脚,PB0~PB1连接OLED显示模块的I2C接口(SDA、SCL),PB2连接蜂鸣器,PB3连接红色报警LED,PB4连接白色照明LED,PB5连接紧急求助按键,PB6连接摔倒模拟按键,PA2~PA3连接MPU6050的I2C接口(SDA、SCL),PA9~PA10作为UART1串口(连接GPS、GSM虚拟终端),PA11~PA12作为UART2串口(连接NB-IoT虚拟终端+串口调试工具)。
3.3 超声波测距模块电路设计
HC-SR04超声波测距模块的电路设计简单,其引脚包括VCC、GND、Trig(触发引脚)、Echo(接收引脚),具体连接方式如下,适配主控芯片及仿真需求:
- VCC引脚:连接5V电源,为模块供电;
- GND引脚:接地,保证模块正常工作;
- Trig引脚:连接STM32F103C8T6的PA4引脚,由主控芯片发送至少10us的高电平触发信号,触发模块发射超声波;
- Echo引脚:连接STM32F103C8T6的PA5引脚,模块接收反射信号后,通过该引脚向主控芯片发送高电平,高电平持续时间即为超声波往返的时间,主控芯片通过计算得到障碍物距离。
为提高测距精度,在Echo引脚与主控芯片之间添加一个10KΩ的上拉电阻,增强信号稳定性,避免干扰导致的测量误差,确保仿真中距离检测的准确性。
3.4 OLED显示模块电路设计
0.96英寸OLED显示模块采用I2C接口,其引脚包括VCC、GND、SDA(数据线)、SCL(时钟线),具体连接方式如下,兼顾低功耗和接口简洁性:
- VCC引脚:连接3.3V电源,为模块供电(避免5V电源烧毁模块);
- GND引脚:接地;
- SDA引脚:连接STM32F103C8T6的PB1引脚(I2C1_SDA);
- SCL引脚:连接STM32F103C8T6的PB0引脚(I2C1_SCL)。
OLED模块通过I2C接口与主控芯片通信,主控芯片发送控制指令和各类检测数据,实现光照强度、水位、障碍物距离、GPS定位信息的实时显示,电路无需额外添加驱动芯片,结构简洁,适配智能拐杖的小巧结构,同时便于Proteus仿真。
3.5 光敏电阻与水位检测模块电路设计
3.5.1 光敏电阻模块电路
光敏电阻(GL5516)采用分压电路设计,具体连接方式如下:光敏电阻的一端连接3.3V电源,另一端通过10KΩ固定电阻接地,中间节点连接STM32F103C8T6的PA0引脚(ADC1通道0)。当光照强度变化时,光敏电阻的阻值发生变化,分压节点的电压也随之变化,主控芯片通过ADC采集该电压信号,转换为数字信号,计算得到光照强度值。
3.5.2 水位检测模块电路
采用滑动变阻器模拟水位传感器,电路设计与光敏电阻模块类似,属于分压电路:滑动变阻器的一端连接3.3V电源,另一端接地,滑动端连接STM32F103C8T6的PA1引脚(ADC1通道1)。通过调节滑动变阻器的阻值,模拟水位高度变化(阻值越小,模拟水位越高),主控芯片通过ADC采集滑动端的电压信号,转换为数字信号,判断水位是否超过设定阈值。
3.6 摔倒检测模块电路设计
摔倒检测模块由MPU6050陀螺仪传感器和独立按键组成,具体电路设计如下:
- MPU6050传感器:引脚包括VCC、GND、SDA、SCL,VCC连接3.3V电源,GND接地,SDA连接STM32F103C8T6的PA2引脚(I2C2_SDA),SCL连接STM32F103C8T6的PA3引脚(I2C2_SCL),传感器实时检测姿态变化,将数据传输给主控芯片;
- 摔倒模拟按键:一端接地,另一端通过10KΩ上拉电阻连接3.3V电源,同时连接STM32F103C8T6的PB6引脚,仿真中,按下按键即模拟摔倒动作,向主控芯片发送高电平触发信号,简化仿真操作,同时保留实际硬件的功能逻辑。
3.7 通信模块电路设计(虚拟终端模拟)
GPS定位模块、GSM通信模块、NB-IoT通信模块均采用Proteus虚拟终端模拟,无需添加实际硬件,电路连接均通过UART串口实现,具体如下:
- GPS模块(虚拟终端1):RX引脚连接STM32F103C8T6的PA9引脚(USART1_TX),TX引脚连接STM32F103C8T6的PA10引脚(USART1_RX),VCC连接5V电源,GND接地,虚拟终端设置固定经纬度数据,模拟GPS定位功能,向主控芯片发送定位信息;
- GSM模块(虚拟终端2):RX引脚连接STM32F103C8T6的PA9引脚(USART1_TX),TX引脚连接STM32F103C8T6的PA10引脚(USART1_RX),与GPS模块共用UART1串口,虚拟终端接收主控芯片发送的求助指令及定位信息,模拟向预设联系人发送短信;
- NB-IoT模块(虚拟终端3+串口调试工具):RX引脚连接STM32F103C8T6的PA11引脚(USART2_TX),TX引脚连接STM32F103C8T6的PA12引脚(USART2_RX),VCC连接5V电源,GND接地,虚拟终端+串口调试工具模拟NB-IoT通信,接收主控芯片发送的各类检测数据,模拟上传至腾讯云的过程。
3.8 声光报警、LED灯光与按键模块电路设计
3.8.1 声光报警模块电路
声光报警模块由蜂鸣器和红色LED组成,具体电路设计如下:
- 蜂鸣器电路:有源蜂鸣器的VCC引脚连接5V电源,GND引脚通过NPN三极管(PNP8550)接地,三极管的基极通过1KΩ电阻连接STM32F103C8T6的PB2引脚,主控芯片输出高电平时,三极管导通,蜂鸣器发声;输出低电平时,三极管截止,蜂鸣器停止发声;
- 红色报警LED电路:红色LED的阳极通过220Ω电阻连接3.3V电源,阴极连接STM32F103C8T6的PB3引脚,主控芯片输出低电平时,LED点亮;输出高电平时,LED熄灭,与蜂鸣器配合实现声光双重报警。
3.8.2 LED灯光模块电路
LED灯光模块采用白色LED,用于光照不足时提供照明,具体电路设计:白色LED的阳极通过220Ω电阻连接3.3V电源,阴极连接STM32F103C8T6的PB4引脚,主控芯片输出低电平时,LED点亮;输出高电平时,LED熄灭,实现自动开灯功能。
3.8.3 紧急求助按键电路
紧急求助按键为独立按键,具体连接方式:按键的一端接地,另一端通过10KΩ上拉电阻连接3.3V电源,同时连接STM32F103C8T6的PB5引脚,按下按键时,引脚电平变为低电平,主控芯片检测到电平变化后,触发紧急求助流程;松开按键后,引脚电平恢复高电平,电路添加消抖处理,避免误触发。
3.9 系统整体硬件电路原理图
整合上述各模块电路,在Proteus软件中绘制系统整体硬件电路原理图,明确各模块的连接关系,确保电路连接正确、无短路、无虚焊。原理图中需标注各元器件的型号、参数及引脚分配,重点标注虚拟终端与主控芯片的串口连接、ADC接口连接及IO口连接,便于后续仿真测试和实际制作参考。
4 系统软件程序设计
4.1 软件设计总体思路
本系统软件程序采用C语言编写,基于Keil MDK5开发环境,采用模块化编程思想,将程序分为主控程序、传感器检测程序(超声波、光敏电阻、水位、MPU6050)、OLED显示程序、声光报警程序、通信程序(GPS、GSM、NB-IoT)、紧急求助程序、摔倒检测程序及腾讯云数据上传程序,各模块程序独立编写,通过函数调用实现协同工作,提高程序的可读性、可维护性和可扩展性。
程序总体流程如下:系统上电后,进行初始化(包括单片机IO口初始化、ADC初始化、I2C初始化、UART初始化、定时器初始化、MPU6050初始化等),然后进入主循环;在主循环中,各传感器实时采集数据(光照强度、水位、障碍物距离、MPU6050姿态数据),GPS模块(虚拟终端)获取定位信息;主控芯片处理各类数据,将数据实时显示在OLED屏幕上;同时判断是否触发各类报警条件(水位超标、障碍物过近、光照不足、摔倒、紧急求助),若触发,则启动对应功能(声光报警、自动开灯、发送求助短信、数据上传);通过NB-IoT模块(虚拟终端)将各类数据上传至腾讯云,循环执行上述操作,确保系统持续稳定运行。
4.2 系统初始化程序设计
系统初始化程序是系统正常运行的基础,主要包括以下初始化操作,确保各模块能够正常工作:
- IO口初始化:配置各模块对应的IO口为输入或输出模式,如超声波模块的Trig引脚为输出模式、Echo引脚为输入模式;OLED模块的SDA、SCL引脚为输出模式;声光报警、LED灯光模块的引脚为输出模式;按键引脚为输入模式。
- ADC初始化:配置ADC1通道0(光敏电阻)、通道1(水位检测),设置采样速率和分辨率,用于采集模拟信号并转换为数字信号。
- I2C初始化:配置I2C1(OLED模块)、I2C2(MPU6050传感器),设置通信速率(如100KHz),初始化通信协议,为后续数据传输做准备。
- UART初始化:配置USART1(GPS、GSM虚拟终端)、USART2(NB-IoT虚拟终端),设置波特率为9600bps,数据位8位,停止位1位,无校验位,初始化串口通信参数,确保与虚拟终端通信正常。
- 定时器初始化:配置定时器(如TIM2),用于测量超声波Echo引脚的高电平持续时间,计算障碍物距离;配置定时器中断,确保测量精度和响应速度。
- MPU6050初始化:初始化MPU6050传感器,设置加速度计和陀螺仪的量程,校准传感器,确保姿态检测准确。
- 变量初始化:初始化各类检测数据变量(光照强度、水位、障碍物距离、GPS定位信息)、报警阈值变量、状态变量(LED灯光状态、报警状态、摔倒状态)等,为程序运行提供初始参数。
4.3 传感器检测程序设计
4.3.1 超声波测距程序设计
超声波测距程序的核心是通过触发超声波模块发射信号,接收反射信号,计算与前方障碍物的距离,具体实现步骤如下:
- 主控芯片向Trig引脚发送至少10us的高电平触发信号,触发超声波模块发射超声波;
- 超声波模块发射超声波后,Echo引脚变为高电平,同时启动定时器计时;
- 当超声波遇到障碍物反射回来,被超声波模块接收后,Echo引脚变为低电平,停止定时器计时,记录定时器的计时时间t;
- 根据超声波在空气中的传播速度(约340m/s),计算障碍物距离d,计算公式为:d = (340m/s × t) / 2(除以2是因为超声波往返一次);
- 将计算得到的距离数据传输给主控芯片,用于OLED显示和障碍物报警判断。
为提高测距精度,采用多次测量取平均值的方法,减少测量误差,每次测量5次,去掉最大值和最小值,取剩余3次的平均值作为最终的距离数据。
4.3.2 光敏电阻检测程序设计
光敏电阻检测程序用于采集周围环境的光照强度,具体实现步骤如下:
- 主控芯片通过ADC1通道0采集光敏电阻分压节点的电压信号;
- 将采集到的模拟电压信号转换为数字信号(0~4095);
- 根据光敏电阻的阻值与光照强度的对应关系,将数字信号转换为实际光照强度值(单位:lux);
- 将光照强度数据传输给主控芯片,用于OLED显示和自动开灯判断。
4.3.3 水位检测程序设计
水位检测程序采用滑动变阻器模拟水位变化,采集水位数据,具体实现步骤如下:
- 主控芯片通过ADC1通道1采集滑动变阻器滑动端的电压信号;
- 将采集到的模拟电压信号转换为数字信号(0~4095);
- 根据滑动变阻器阻值与水位高度的对应关系,将数字信号转换为实际水位高度值(单位:cm);
- 将水位数据传输给主控芯片,用于OLED显示和水位报警判断。
4.3.4 摔倒检测程序设计
摔倒检测程序结合MPU6050传感器和摔倒模拟按键,实现摔倒检测功能,具体实现逻辑如下:
- MPU6050传感器实时采集加速度和陀螺仪数据,传输给主控芯片;
- 主控芯片对采集到的数据进行处理,判断使用者是否出现摔倒姿态(加速度突变、姿态角度超过设定阈值);
- 仿真中,按下摔倒模拟按键,向主控芯片发送高电平触发信号,直接触发摔倒报警流程;
- 若检测到摔倒(传感器判断或按键触发),主控芯片设置摔倒状态标志,触发声光报警和求助短信发送功能。
4.4 OLED显示程序设计
OLED显示程序的功能是接收主控芯片发送的各类检测数据,在屏幕上实时显示,方便使用者查看,具体实现步骤如下:
- 初始化OLED显示模块,发送初始化指令,设置显示模式、亮度等参数;
- 清除OLED屏幕缓存,避免显示混乱;
- 在屏幕指定位置显示固定字符,如“光照强度:”“水位高度:”“障碍物距离:”“GPS定位:”;
- 将光照强度、水位高度、障碍物距离、GPS定位信息等数据转换为字符串,显示在对应位置,标注单位;
- 当触发报警(水位超标、障碍物过近、摔倒、紧急求助)时,在屏幕上显示对应报警提示(如“水位超标!”“前方有障碍物!”),增强视觉提醒效果。
OLED显示程序采用模块化设计,编写OLED初始化函数、字符显示函数、字符串显示函数、数值显示函数,通过调用这些函数,实现不同内容的显示,程序简洁、易维护,适配仿真中的数据展示需求。
4.5 声光报警程序设计
声光报警程序根据不同的报警场景,启动蜂鸣器和红色报警LED,实现分级报警,具体实现逻辑如下:
- 水位超标报警:当水位高度超过设定阈值(如5cm)时,蜂鸣器持续发声,红色LED持续点亮,直到水位低于阈值为止;
- 障碍物报警:当障碍物距离小于预设安全值(如30cm)时,蜂鸣器间歇发声(响0.5s,停0.5s),红色LED间歇点亮,提醒使用者避障;
- 摔倒报警:当检测到摔倒时,蜂鸣器持续发声,红色LED持续点亮,直到手动复位或解除报警;
- 紧急求助报警:当按下紧急求助按键时,蜂鸣器持续发声,红色LED持续点亮,直到求助流程完成或手动停止。
声光报警程序编写蜂鸣器控制函数和LED控制函数,通过控制对应IO口的电平变化,实现蜂鸣器的启停、发声模式和LED的亮灭,确保报警提示清晰、明显。
4.6 LED灯光控制程序设计
LED灯光控制程序实现光照不足时自动开启白灯LED,具体实现逻辑如下:
- 预设光照强度安全阈值(如50lux);
- 主控芯片实时获取光敏电阻检测到的光照强度值;
- 当光照强度低于安全阈值时,主控芯片控制PB4引脚输出低电平,白色LED点亮;
- 当光照强度高于安全阈值时,主控芯片控制PB4引脚输出高电平,白色LED熄灭;
- LED灯光开启后,实时检测光照强度,当光照强度恢复至阈值以上时,自动关闭LED,实现节能控制。
4.7 通信程序设计(虚拟终端模拟)
4.7.1 GPS定位程序设计
GPS定位程序通过UART1串口与GPS虚拟终端通信,获取定位信息,具体实现步骤如下:
- 主控芯片通过USART1_TX引脚向GPS虚拟终端发送定位请求指令;
- GPS虚拟终端接收指令后,发送预设的经纬度数据(如北纬39.9042°,东经116.4074°);
- 主控芯片通过USART1_RX引脚接收经纬度数据,解析数据后,转换为GPS定位信息;
- 将GPS定位信息传输给OLED显示模块,同时用于紧急求助时发送定位短信及云端数据上传。
4.7.2 GSM通信程序设计
GSM通信程序通过UART1串口与GSM虚拟终端通信,实现求助短信发送,具体实现步骤如下:
- 当触发摔倒报警或紧急求助时,主控芯片整合GPS定位信息,生成求助短信内容(如“紧急求助!使用者已摔倒,定位:北纬39.9042°,东经116.4074°”);
- 主控芯片通过USART1_TX引脚向GSM虚拟终端发送短信发送指令及预设联系人号码;
- GSM虚拟终端接收指令后,模拟向预设联系人发送求助短信,同时向主控芯片反馈发送成功信号;
- 主控芯片接收反馈信号后,记录求助短信发送状态,用于OLED显示和云端数据上传。
4.7.3 NB-IoT通信程序设计
NB-IoT通信程序通过UART2串口与NB-IoT虚拟终端+串口调试工具通信,实现数据上传至腾讯云,具体实现步骤如下:
- 主控芯片整合各类检测数据(光照强度、水位、障碍物距离、GPS定位信息、报警状态),按照腾讯云数据上传协议,打包数据;
- 主控芯片通过USART2_TX引脚向NB-IoT虚拟终端发送打包后的数据;
- NB-IoT虚拟终端+串口调试工具接收数据后,模拟NB-IoT通信过程,将数据上传至腾讯云;
- 腾讯云接收数据后,存储并展示数据,支持家人或监护人事先远程查看,主控芯片接收云端反馈的上传成功信号,完成数据上传流程。
4.8 紧急求助程序设计
紧急求助程序由紧急求助按键触发,实现向预设联系人发送求助短信及定位信息,具体实现逻辑如下:
- 主控芯片实时检测紧急求助按键(PB5引脚)的状态,采用消抖处理(延时10ms),避免按键抖动导致的误操作;
- 当检测到按键按下时,触发紧急求助流程,启动声光报警,同时调用GPS定位程序获取定位信息;
- 调用GSM通信程序,向预设联系人发送求助短信及GPS定位信息;
- 调用NB-IoT通信程序,将紧急求助状态及定位信息上传至腾讯云;
- 求助流程完成后,等待按键松开,松开后停止声光报警,恢复正常工作状态,若按键持续按下,持续发送求助信号。
4.9 主程序设计
主程序是系统的核心,负责协调各模块程序的运行,实现系统的整体功能,主程序流程如下:
- 系统上电,执行初始化程序,完成IO口、ADC、I2C、UART、定时器、MPU6050等的初始化,初始化变量和报警阈值;
- OLED屏幕显示初始界面,显示默认报警阈值、初始状态等信息;
- 调用各传感器检测程序,采集光照强度、水位、障碍物距离、MPU6050姿态数据;
- 调用GPS定位程序,获取GPS定位信息;
- 调用OLED显示程序,在屏幕上实时显示各类检测数据和GPS定位信息;
- 判断各类报警条件,执行对应功能:
- 光照强度低于阈值:开启白色LED灯光;光照强度高于阈值:关闭白色LED灯光;
- 水位高于阈值:启动水位超标声光报警;
- 障碍物距离小于安全值:启动障碍物避障声光报警;
- 检测到摔倒(传感器或按键触发):启动摔倒声光报警,调用GSM程序发送求助短信,调用NB-IoT程序上传数据;
- 检测到紧急求助按键按下:启动紧急求助声光报警,调用GSM程序发送求助短信,调用NB-IoT程序上传数据;
- 调用NB-IoT通信程序,将各类检测数据上传至腾讯云;
- 返回步骤3,循环执行,实现系统持续工作。
5 Proteus仿真测试
5.1 仿真环境搭建
本次仿真采用Proteus 8 Professional软件,搭建系统仿真电路,结合虚拟终端模拟通信模块功能,具体步骤如下:
- 打开Proteus软件,新建项目,命名为“基于STM32的智能拐杖仿真”,选择对应的单片机型号STM32F103C8T6;
- 在元件库中搜索并添加系统所需的元器件,包括STM32F103C8T6、HC-SR04超声波模块、0.96英寸OLED模块、有源蜂鸣器、红色LED、白色LED、独立按键、滑动变阻器、光敏电阻(GL5516)、MPU6050陀螺仪、AMS1117-3.3V稳压芯片、电容、电阻、虚拟终端等;
- 根据系统硬件电路原理图,在Proteus仿真界面中连接各元器件,确保电路连接正确,无短路、无虚焊,重点检查各模块与主控芯片的接口连接、虚拟终端与串口的连接;
- 配置3个虚拟终端,分别模拟GPS、GSM、NB-IoT模块:
- GPS虚拟终端:设置波特率9600bps,预设固定经纬度数据,用于模拟定位功能;
- GSM虚拟终端:设置波特率9600bps,用于模拟接收求助指令并发送短信;
- NB-IoT虚拟终端:设置波特率9600bps,搭配串口调试工具,用于模拟数据上传至腾讯云;
- 将Keil MDK5中编译生成的.hex文件导入STM32F103C8T6单片机中,完成仿真环境的搭建;
- 配置仿真参数,设置仿真速度,确保各模块协同工作正常,数据传输稳定。
5.2 仿真测试方案
为验证系统各功能的稳定性和准确性,设计以下仿真测试方案,模拟不同的使用场景,检测系统的响应情况,覆盖所有预设功能:
- 数据检测与显示测试:调节光敏电阻的光照强度(遮挡/照射)、滑动变阻器的阻值(模拟水位变化),移动超声波模块前方的障碍物,观察OLED屏幕上显示的光照强度、水位、障碍物距离数据是否准确,GPS定位信息是否正常显示;
- 自动开灯功能测试:遮挡光敏电阻(模拟光照不足,低于50lux),观察白色LED是否自动开启;照射光敏电阻(模拟光照充足,高于50lux),观察白色LED是否自动关闭;
- 水位预警功能测试:调节滑动变阻器,模拟水位超过设定阈值(5cm),观察声光报警是否启动;调节滑动变阻器,使水位低于阈值,观察报警是否停止;
- 障碍物避障功能测试:移动障碍物,使障碍物距离小于预设安全值(30cm),观察蜂鸣器是否间歇发声、红色LED是否间歇点亮;移动障碍物,使距离大于30cm,观察报警是否停止;
- 摔倒检测功能测试:按下摔倒模拟按键,模拟摔倒动作,观察声光报警是否启动,GSM虚拟终端是否接收并模拟发送求助短信及GPS定位信息,NB-IoT虚拟终端是否上传摔倒数据;
- 紧急求助功能测试:按下紧急求助按键,观察声光报警是否启动,GSM虚拟终端是否接收并模拟发送求助短信及GPS定位信息,NB-IoT虚拟终端是否上传求助数据;
- 云端数据上传测试:观察NB-IoT虚拟终端+串口调试工具是否接收各类检测数据,模拟上传至腾讯云的过程,验证数据上传的准确性和稳定性;
- 稳定性测试:保持各模块正常工作,持续运行仿真系统30分钟,观察系统是否出现死机、数据错乱、报警异常、通信中断等情况,验证系统的稳定性。
更多推荐

所有评论(0)