一、簡介
1. C-SR04超聲波模塊是一種常用的測距模塊,其通過發射超聲波并接收其反射信號來實現測距功能。因其成本低、精度高、使用簡便等特點,被廣泛應用于以下場景:
(1)避障機器人:HC-SR04超聲波模塊可以用于避障機器人的距離測量,通過檢測障礙物與機器人的距離,實現避障控制。
(2)智能家居:HC-SR04超聲波模塊可用于智能家居中的人體檢測和距離測量。例如,在門口安裝超聲波模塊,可以檢測人的接近并觸發開門動作,或者用于室內的距離測量和觸發自動照明等。
2. 本實驗用到了CW32F030C8T6小藍板、0.96寸OLED顯示屏、HC-SR04超聲波模塊及Keil5開發環境。
二、超聲波模塊測距的使用方法
使用流程 連接電源 將VCC引腳連接到+5V,GND引腳連接到GND。
連接觸發引腳
將Trig引腳連接到單片機的數字輸出引腳。
連接回波引腳
將Echo引腳連接到單片機的數字輸入引腳。
發送信號
通過向Trig引腳發送一個至少10微秒的高電平觸發信號來啟動測距過程
接收信號
模塊發送觸發信號后,自動發射超聲波,并等待接收反射信號。當接收到反射信號時,Echo引腳會輸出一個高電平信號,持續時間與超聲波的往返時間成正比。
計算距離
通過測量Echo引腳輸出高電平信號的持續時間,可以計算得到距離,一般使用以下公式計算:
距離= 高電平持續時間 × 聲波在空氣中傳播的速度 / 2。
重復測量
根據需要可定時測量距離,以實現連續的距離監測。
需要注意的是,HC-SR04超聲波模塊的測距精度受到多種因素的影響,如溫度、超聲波傳播介質等。在使用過程中,需要結合具體的應用場景和需求進行參數調整和校準,以獲得準確的距離測量結果。
三、核心代碼
HC_SR04.c: #include "HC_SR04.h" extern unsigned int time; void HC_GPIO_Init(void) { __RCC_GPIOB_CLK_ENABLE(); GPIO_InitTypeDef GPIO_InitStruct; GPIO_InitStruct.IT=GPIO_IT_NONE; GPIO_InitStruct.Mode=GPIO_MODE_INPUT_PULLDOWN;//下拉輸入 GPIO_InitStruct.Pins=GPIO_PIN_8; //Echo GPIO_Init(CW_GPIOB,&GPIO_InitStruct); GPIO_InitStruct.Speed=GPIO_SPEED_HIGH; GPIO_InitStruct.Mode=GPIO_MODE_OUTPUT_PP; //推挽輸出 GPIO_InitStruct.Pins=GPIO_PIN_9; //Trig GPIO_Init(CW_GPIOB,&GPIO_InitStruct); PB09_SETLOW(); //Trig拉低,為輸出脈沖觸發信號做準備 } unsigned int Measure_Distance(void) //測距 { unsigned int distance=0; SetTrig(); //10us的脈沖觸發信號 Delay_us(10); ResetTrig(); while(ReadEcho()==0); //等待Echo輸出高電平 time=0; //開始記錄回波信號脈寬 while(ReadEcho()==1); //等待Echo輸出低電平 distance=time*1.7;//根據聲速和時間計算距離,即distance=time*340/2/100 /* 關于分辨力(mm): 定時器每次對time加1是10us,10us=0.01ms,340m/s=340mm/ms 計算距離時,最小分辨力為:0.01(ms) * 340(mm/ms) / 2 = 1.7(mm) 小于模塊標準精度3mm,故測距結果十分精準 */ return distance; //返回距離,單位mm } main.c: #include "HC_SR04.h" extern unsigned int time; void HC_GPIO_Init(void) { __RCC_GPIOB_CLK_ENABLE(); GPIO_InitTypeDef GPIO_InitStruct; GPIO_InitStruct.IT=GPIO_IT_NONE; GPIO_InitStruct.Mode=GPIO_MODE_INPUT_PULLDOWN;//下拉輸入 GPIO_InitStruct.Pins=GPIO_PIN_8; //Echo GPIO_Init(CW_GPIOB,&GPIO_InitStruct); GPIO_InitStruct.Speed=GPIO_SPEED_HIGH; GPIO_InitStruct.Mode=GPIO_MODE_OUTPUT_PP; //推挽輸出 GPIO_InitStruct.Pins=GPIO_PIN_9; //Trig GPIO_Init(CW_GPIOB,&GPIO_InitStruct); PB09_SETLOW(); //Trig拉低,為輸出脈沖觸發信號做準備 } unsigned int Measure_Distance(void) //測距 { unsigned int distance=0; SetTrig(); //10us的脈沖觸發信號 Delay_us(10); ResetTrig(); while(ReadEcho()==0); //等待Echo輸出高電平 time=0; //開始記錄回波信號脈寬 while(ReadEcho()==1); //等待Echo輸出低電平 distance=time*1.7;//根據聲速和時間計算距離,即distance=time*340/2/100 /* 關于分辨力(mm): 定時器每次對time加1是10us,10us=0.01ms,340m/s=340mm/ms 計算距離時,最小分辨力為:0.01(ms) * 340(mm/ms) / 2 = 1.7(mm) 小于模塊標準精度3mm,故測距結果十分精準 */ return distance; //返回距離,單位mm }
審核編輯:劉清
-
OLED顯示屏
+關注
關注
6文章
217瀏覽量
30694 -
GND
+關注
關注
2文章
539瀏覽量
38713 -
避障機器人
+關注
關注
0文章
18瀏覽量
7699 -
超聲波模塊
+關注
關注
1文章
21瀏覽量
13506 -
CW32
+關注
關注
1文章
203瀏覽量
641
原文標題:【CW32優秀項目展示】基于CW32的超聲波模塊的應用
文章出處:【微信號:武漢芯源半導體,微信公眾號:武漢芯源半導體】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論