基于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.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;像一個“虛擬機器人”或“數字助手”&#…