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.pswp.cn/bicheng/92929.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/92929.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/92929.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

麒麟系统播放 pptx

目录 python 操作 LibreOffice 控制pptx 一页一页播放 1. 安装 LibreOffice&#xff08;麒麟系统基于 Debian/Ubuntu&#xff09; 2. 如果只想安装 PPT 播放/转换&#xff08;Impress&#xff09; 1. 启动 LibreOffice UNO 服务 2. Python 控制播放uno安装方法&#xff1a…

嵌入式Linnux学习 -- 软件编程2

四、IO1. 概念1. IO 指 input / output2. Linux系统中一切皆是文件3. IO操作的对象是文件2. 文件1. 概念一段数据的集合2. 特点文件通常存放在外存中&#xff0c;掉点后数据不会丢3. 分类b&#xff08;block&#xff0c;块设备文件&#xff09;-- 按块扫描信息的文件&#x…

Spark02 - SparkContext介绍

一、应用入口&#xff1a;SparkContextSpark Application 程序入口为&#xff1a;SparkContext&#xff0c;任何一个应用首先需要构建 SparkContext 对象&#xff0c;如下两步构建&#xff1a;第一步、创建 SparkConf 对象设置 Spark Application 基本信息&#xff0c;比如应用…

Selenium动态元素定位

动态元素定位方法一&#xff1a;使用CSS选择器通过部分匹配操作符定位动态属性中的固定部分。*&#xff08;包含&#xff09;&#xff0c;^&#xff08;开头&#xff09;&#xff0c;$&#xff08;结尾&#xff09;。/* 匹配id前缀为user_的元素 */ cssdiv[id^"user_"…

OBOO鸥柏丨115寸商用屏/工业液晶显示器招标投标核心标底参数要求

整机参数要求&#xff1a;商用液晶显示器/工业LCD一体机/商业智能终端机/工业防爆显示器/招标投标核心标底参数要求1、整机屏幕采用≥采用115英寸超高清原厂原包原装工业LCD液晶屏面板&#xff1b;具有高色域&#xff0c;显示动态视频、web及3D动画时&#xff0c;保障运动画面流…

麻溜启动Oracle实例demo

注意&#xff1a;镜像非常大并且外网网络过慢&#xff0c;可能得pull一天&#xff08;n次超时&#xff09;。。md后台静默pull命令&#xff1a; nohup docker pull container-registry.oracle.com/database/express:latest > pull.log 2>&1 & 启动实例&#xff1…

应用监控工具Skywalking

目录 Skywalking介绍 Skywalking架构 Skywalking安装 Skywalking使用 Skywalking配置 Skywalking数据持久化 Skywalking告警 Skywalking介绍 Apache Skywalking是一个开源的应用性能监控&#xff08;Application Performance Monitoring&#xff0c;APM&#xff09;工具…

TCP服务建立的全流程详解

TCP的服务监听步骤&#xff08;等待客户端连接前&#xff09;TCP 服务器通过以下步骤完成从初始化到等待客户端连接&#xff0c;为后续的数据传输&#xff08;send()/recv()&#xff09;奠定了基础一、创建套接字&#xff08;Socket&#xff09;作用&#xff1a;套接字是网络通…

数据结构 双链表与LinkedList

本节目标&#xff1a; 认识并且能够实现一个双链表认识LinkedList类并且知道如何去使用 1.双链表 概念 在数据结构中&#xff0c;双链表&#xff08;Doubly Linked List&#xff09; 是一种常见的线性数据结构&#xff0c;它由一系列节点组成&#xff0c;每个节点不仅包含数据…

如何解决 JetBrains IntelliJ IDEA 2024.2 和 2025.2 新版本区域选择问题:key is invalid

如何解决 JetBrains IntelliJ IDEA 2024.2 和 2025.2 新版本区域选择问题&#xff1a;key is invalid 在 JetBrains 发布的 IntelliJ IDEA、PyCharm 2024.2 和 2025.2 新版本中&#xff0c;增加了一个新的功能——区域选择。在设置菜单中&#xff0c;你可以找到这一选项&#…

GSON 框架下百度天气 JSON 数据转 JavaBean 的实战攻略

目录 前言 一、百度天气JSON 1、请求参数 2、返回参数 3、属性映射 二、GSON属性映射实战 1、类对象映射 2、属性字段映射 3、日期数据映射 三、天气接口对象展示 1、接口调用 2、Java属性打印输出 四、总结 前言 在当今数字化时代&#xff0c;数据的高效处理与转换…

NAS技术在县级融媒体中心的架构设计与安全运维浅析

NAS技术在县级融媒体中心的架构设计与安全运维浅析 ——原理剖析、应用实践与防御体系建设作者&#xff1a;高级网络安全工程师 吉林•镇赉融媒 刘晓伟 最后更新&#xff1a;2025年8月 适用对象&#xff1a;媒体行业网络安全从业者一、NAS技术核心原理剖析 1. 基础架构 NAS&am…

CobaltStrike的搭建和使用

下载CobaltStrike环境建议使用jdk17&#xff0c;其他java版本有些功能可能无法使用通过网盘分享的文件&#xff1a;CS4.7key-mht.zip 链接: https://pan.baidu.com/s/1CRd1x4r6EIk14BD3UCLgxw?pwdevf4 提取码: evf4将下载的文件分别放在服务器和 本地/kali 上 也就是服务器为…

【Altium designer】一键给多个器件添加参数

目的: 一键给N个元器件/Part添加参数和修改参数值,比如一键给多个电阻添加“备注”并赋予备注的内容为“不焊接”,或者更改“备注”的内容为“不焊接”或空。 背景: 刚入门用AD画原理图,因为原理图的电阻、电容和芯片等等的冗余/兼容设计太多,增加备注不焊的元器件位号…

熟练掌握switch语句:技巧与运用

目录 一、switch语句基础 基本语法结构&#xff1a; 在C/C中&#xff1a; 注意事项&#xff1a; 二、if与switch语句对比 示例&#xff1a;计算整数除以3的余数 使用if语句实现&#xff1a; 使用switch语句实现&#xff1a; 三、break语句的作用 示例&#xff08;无br…

【03】厦门立林科技——立林科技 嵌入式 校招笔试,题目记录及解析

厦门立林科技——立林科技 嵌入式 校招笔试&#xff0c;题目记录及解析 1.下面的程序的输出是&#xff08;&#xff09;。2.在头文件中#ifndef/#define/#endif的作用是4.执行下面程序中的输出语句后,输出的结果是()6.在32位处理器上,运行如下程序后p的值为()。10.设有两字符串“…

C++算法(数据结构)版

C算法&#xff08;数据结构&#xff09;版 有些题目不是完整的题目&#xff0c;如需查看完整的题目请移步到acwing的算法基础课中 文章目录C算法&#xff08;数据结构&#xff09;版单链表思路&#xff1a;双链表思路&#xff1a;栈思路&#xff1a;队列思路&#xff1a;单调栈…

算法训练营DAY57 第十一章:图论part07

prim算法精讲 53. 寻宝&#xff08;第七期模拟笔试&#xff09; 题目描述&#xff1a; 在世界的某个区域&#xff0c;有一些分散的神秘岛屿&#xff0c;每个岛屿上都有一种珍稀的资源或者宝藏。国王打算在这些岛屿上建公路&#xff0c;方便运输。 不同岛屿之间&#xff0c;…

最短路问题从入门到负权最短路

一&#xff0c;BFS层次最短路/*题目描述 题目描述 给出一个 N 个顶点 M 条边的无向无权图&#xff0c;顶点编号为 1∼N。 问从顶点 1 开始&#xff0c;到其他每个点的最短路有几条。 输入格式 第一行包含 2 个正整数 N,M&#xff0c;为图的顶点数与边数。 接下来 M 行&#xff…

AI智能体小白入门指南

AI智能体小白入门指南 ——什么是AI智能体&#xff1f;它们如何工作&#xff1f; 一、AI智能体是什么&#xff1f; AI智能体&#xff08;AI Agent&#xff09;是能感知环境、自主决策并执行动作的人工智能系统。 类比理解&#xff1a;像一个“虚拟机器人”或“数字助手”&#…