当前位置: 首页 > news >正文

基于STM32单片机超声波测速测距防撞报警设计

1 系统功能介绍

本设计是一套基于 STM32F103C8T6 单片机 的超声波测速测距防撞报警系统,能够实现对目标物体的实时测距与测速,并通过 TFT 彩屏进行动态显示,同时根据用户设定的距离与速度阈值进行报警提示。该系统不仅可以用于固定场景的安全监控,还可以应用于移动平台的防撞控制,例如小车、机械臂、无人机等。

系统的主要功能如下:

  1. 超声波实时测距与测速
    系统通过 HC-SR04 超声波测距模块实时获取物体距离,并通过连续多次测量计算物体的速度,测速单位为 m/s,测距单位为 m。

  2. 多模式报警功能
    用户可通过按键设置报警模式,包括:

    • 距离+速度同时报警
    • 仅距离报警
    • 仅速度报警
    • 无报警模式
  3. 多级报警机制
    当距离小于设定阈值时,蜂鸣器会根据距离不同发出不同频率的提示音:

    • 小于 0.6m:稍急报警
    • 小于 0.3m:急报警
    • 小于 0.1m:急促报警
      同时液晶显示的波形个数随距离变化而变化,距离越近波形越少。
  4. 阈值可调与掉电保存
    用户可通过按键 K1、K2、K3 分别设置距离阈值、速度阈值、报警模式,数据保存在 STM32 内部 Flash 中,掉电不丢失。

  5. TFT1.44 彩屏动态显示
    屏幕实时显示测量数据、报警状态和动态波形,让用户直观了解当前的安全状态。


2 系统电路设计

2.1 单片机最小系统模块

系统核心为 STM32F103C8T6 单片机,其最小系统包括:

  • 电源电路:使用 3.3V LDO 稳压芯片(如 AMS1117-3.3)将外部 5V 转换为单片机工作电压。
  • 时钟电路:外接 8MHz 晶振作为系统主时钟,搭配 32.768kHz 晶振作为 RTC 时钟(可选)。
  • 复位电路:通过上拉电阻和复位按键实现系统复位。

2.2 超声波测距模块电路

采用 HC-SR04 超声波传感器:

  • Trig 引脚:由 STM32 输出 10μs 高电平启动测量。
  • Echo 引脚:返回高电平脉冲宽度,对应声波往返时间,通过公式 距离 = (脉宽 * 声速) / 2 计算距离。
  • 模块通过 5V 工作,信号引脚经过分压电路适配 3.3V。

2.3 TFT 彩屏显示模块

使用 TFT1.44 寸彩屏(ST7735 驱动芯片)

  • 采用 SPI 接口与 STM32 连接(SCK、MOSI、CS、DC、RST)。
  • 显示实时距离、速度、报警状态及动态波形。
  • 彩屏在显示报警时可更改背景颜色,提高警示效果。

2.4 蜂鸣器报警驱动电路

蜂鸣器采用有源蜂鸣器,通过 NPN 三极管(如 9013)驱动:

  • 当 STM32 输出高电平时,三极管导通,蜂鸣器鸣叫。
  • 通过 PWM 控制报警音的频率,实现不同报警节奏。

2.5 按键输入电路

系统设计 3 个按键:

  • K1:设置/调整距离阈值
  • K2:设置/调整速度阈值
  • K3:切换报警模式
    按键采用上拉电阻方式,按下时输入低电平,结合软件去抖动处理。

2.6 电源电路

整机由 5V 电源供电,主要电源路径:

  • 5V 直接供给超声波模块、蜂鸣器等。
  • 5V 经 LDO 转换为 3.3V 供给 STM32 和 TFT 屏。

3 程序设计

3.1 主程序架构

系统程序基于 STM32 HAL 库 开发,主要流程如下:

  1. 系统初始化(时钟、GPIO、SPI、定时器等)

  2. TFT 屏显示初始化界面

  3. 读取 Flash 中保存的阈值与模式

  4. 进入主循环:

    • 采集距离数据
    • 计算速度
    • 根据模式判断是否报警
    • 更新 TFT 屏显示
    • 按键检测与参数修改

3.2 超声波测距程序

通过定时器捕获模式测量 Echo 脉宽:

float Get_Distance(void) {uint32_t time;HAL_GPIO_WritePin(TRIG_GPIO_Port, TRIG_Pin, GPIO_PIN_SET);delay_us(10);HAL_GPIO_WritePin(TRIG_GPIO_Port, TRIG_Pin, GPIO_PIN_RESET);while(HAL_GPIO_ReadPin(ECHO_GPIO_Port, ECHO_Pin) == GPIO_PIN_RESET);__HAL_TIM_SET_COUNTER(&htim2, 0);while(HAL_GPIO_ReadPin(ECHO_GPIO_Port, ECHO_Pin) == GPIO_PIN_SET);time = __HAL_TIM_GET_COUNTER(&htim2);return (float)time * 0.000001 * 340.0 / 2.0;
}

3.3 速度计算程序

速度通过两次测距结果计算:

float Calculate_Speed(float d1, float d2, float dt) {return (d1 - d2) / dt; // m/s
}

3.4 TFT 显示程序

使用 ST7735 驱动库显示数据:

void Display_Data(float distance, float speed, uint8_t mode) {ST7735_FillScreen(ST7735_BLACK);char buf[20];sprintf(buf, "D:%.2fm", distance);ST7735_WriteString(0, 0, buf, Font_11x18, ST7735_WHITE, ST7735_BLACK);sprintf(buf, "V:%.2fm/s", speed);ST7735_WriteString(0, 20, buf, Font_11x18, ST7735_WHITE, ST7735_BLACK);sprintf(buf, "Mode:%d", mode);ST7735_WriteString(0, 40, buf, Font_11x18, ST7735_WHITE, ST7735_BLACK);
}

3.5 报警控制程序

根据阈值与模式判断报警:

void Check_Alarm(float distance, float speed) {if(mode == 1 && (distance < dist_threshold || speed > speed_threshold)) {Beep_Control(distance);} else if(mode == 2 && distance < dist_threshold) {Beep_Control(distance);} else if(mode == 3 && speed > speed_threshold) {Beep_Control(distance);}
}

3.6 蜂鸣器节奏控制

void Beep_Control(float distance) {if(distance < 0.1) Beep_Fast();else if(distance < 0.3) Beep_Mid();else if(distance < 0.6) Beep_Slow();
}

3.7 按键扫描与参数设置

void Key_Scan(void) {if(HAL_GPIO_ReadPin(KEY1_GPIO_Port, KEY1_Pin) == GPIO_PIN_RESET) {dist_threshold += 0.1;Save_Params();}if(HAL_GPIO_ReadPin(KEY2_GPIO_Port, KEY2_Pin) == GPIO_PIN_RESET) {speed_threshold += 0.1;Save_Params();}if(HAL_GPIO_ReadPin(KEY3_GPIO_Port, KEY3_Pin) == GPIO_PIN_RESET) {mode = (mode + 1) % 4;Save_Params();}
}

3.8 Flash 数据保存

void Save_Params(void) {HAL_FLASH_Unlock();// 擦除与写入操作HAL_FLASH_Lock();
}

4 总结

该系统通过 STM32F103C8T6 单片机 结合 超声波测距、速度计算、TFT 彩屏显示与蜂鸣器报警,实现了集测距、测速、防撞报警于一体的功能。
系统设计注重 实时性、可调节性与数据掉电保存,能够适应多种应用场景。
未来可扩展功能包括:

  • 增加多个超声波传感器实现多方向监测
  • 通过无线模块将测量数据上传至上位机或手机
  • 增加语音提示功能提升人机交互体验
http://www.dtcms.com/a/326650.html

相关文章:

  • c# 线程的基础教学(winform 电梯模拟)
  • C9800 ISSU升级
  • 【Java工具】Java-sftp线程池上传
  • ADK[5]调用外部工具流程
  • (附源码)基于Spring Boot的4S店信息管理系统 的设计与实现
  • 每日算法刷题Day61:8.11:leetcode 堆11道题,用时2h30min
  • 【功能测试】软件集成测试思路策略与经验总结
  • HTML应用指南:利用GET请求获取全国vivo体验店门店位置信息
  • 字节后端面经
  • 内网依赖管理新思路:Nexus与CPolar的协同实践
  • Linux-FTP服务器搭建
  • 【图像算法 - 12】OpenCV-Python 入门指南:图像视频处理与可视化(代码实战 + 视频教程 + 人脸识别项目讲解)
  • DHCP服务配置与管理实战指南
  • CRMEB多商户系统(Java)v2.0更新预告:区域管理+预约商品,激活本地商业新活力!
  • NTC热敏电阻、压敏电阻和保险丝工作原理
  • FFmpeg - 基本 API大全(视频编解码相关的)
  • python每日一题练习 两个数组的交集 非常简单
  • GCN: 图卷积网络,概念以及代码实现
  • 【LeetCode刷题集】--排序(三)
  • Protocol Buffers (protobuf) API 接口完全指南
  • maven项目打包成sdk后在别的项目使用
  • 从0开始的中后台管理系统-5(部门管理以及菜单管理页面功能实现)
  • 【科研绘图系列】R语言绘制散点图折线图误差棒组合图
  • 指派问题-匈牙利算法
  • 2025牛客多校第八场 根号-2进制 个人题解
  • HTTPS应用层协议-CA签名与证书
  • Vue 3 快速入门 第六章
  • MaixPy简介
  • Projects
  • 进程管理是什么