一、簡介
1.C-SR04超聲波模塊是一種常用的測距模塊,其通過發(fā)射超聲波并接收其反射信號來實現(xiàn)測距功能。因其成本低、精度高、使用簡便等特點,被廣泛應(yīng)用于以下場景:
(1)避障機器人:HC-SR04超聲波模塊可以用于避障機器人的距離測量,通過檢測障礙物與機器人的距離,實現(xiàn)避障控制。
(2)智能家居:HC-SR04超聲波模塊可用于智能家居中的人體檢測和距離測量。例如,在門口安裝超聲波模塊,可以檢測人的接近并觸發(fā)開門動作,或者用于室內(nèi)的距離測量和觸發(fā)自動照明等。
2.本實驗用到了CW32F030C8T6小藍板、0.96寸OLED顯示屏、HC-SR04超聲波模塊及Keil5開發(fā)環(huán)境。
二、超聲波模塊測距的使用方法
使用流程 連接電源 將VCC引腳連接到+5V,GND引腳連接到GND。
連接觸發(fā)引腳
將Trig引腳連接到單片機的數(shù)字輸出引腳。
連接回波引腳
將Echo引腳連接到單片機的數(shù)字輸入引腳。
發(fā)送信號
通過向Trig引腳發(fā)送一個至少10微秒的高電平觸發(fā)信號來啟動測距過程
接收信號
模塊發(fā)送觸發(fā)信號后,自動發(fā)射超聲波,并等待接收反射信號。當(dāng)接收到反射信號時,Echo引腳會輸出一個高電平信號,持續(xù)時間與超聲波的往返時間成正比。
計算距離
通過測量Echo引腳輸出高電平信號的持續(xù)時間,可以計算得到距離,一般使用以下公式計算:
距離= 高電平持續(xù)時間 × 聲波在空氣中傳播的速度 / 2。
重復(fù)測量
根據(jù)需要可定時測量距離,以實現(xiàn)連續(xù)的距離監(jiān)測。
需要注意的是,HC-SR04超聲波模塊的測距精度受到多種因素的影響,如溫度、超聲波傳播介質(zhì)等。在使用過程中,需要結(jié)合具體的應(yīng)用場景和需求進行參數(shù)調(diào)整和校準(zhǔn),以獲得準(zhǔn)確的距離測量結(jié)果。
三、核心代碼
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拉低,為輸出脈沖觸發(fā)信號做準(zhǔn)備 } unsigned int Measure_Distance(void) //測距 { unsigned int distance=0; SetTrig(); //10us的脈沖觸發(fā)信號 Delay_us(10); ResetTrig(); while(ReadEcho()==0); //等待Echo輸出高電平 time=0; //開始記錄回波信號脈寬 while(ReadEcho()==1); //等待Echo輸出低電平 distance=time*1.7;//根據(jù)聲速和時間計算距離,即distance=time*340/2/100 /* 關(guān)于分辨力(mm): 定時器每次對time加1是10us,10us=0.01ms,340m/s=340mm/ms 計算距離時,最小分辨力為:0.01(ms) * 340(mm/ms) / 2 = 1.7(mm) 小于模塊標(biāo)準(zhǔn)精度3mm,故測距結(jié)果十分精準(zhǔn) */ 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拉低,為輸出脈沖觸發(fā)信號做準(zhǔn)備 } unsigned int Measure_Distance(void) //測距 { unsigned int distance=0; SetTrig(); //10us的脈沖觸發(fā)信號 Delay_us(10); ResetTrig(); while(ReadEcho()==0); //等待Echo輸出高電平 time=0; //開始記錄回波信號脈寬 while(ReadEcho()==1); //等待Echo輸出低電平 distance=time*1.7;//根據(jù)聲速和時間計算距離,即distance=time*340/2/100 /* 關(guān)于分辨力(mm): 定時器每次對time加1是10us,10us=0.01ms,340m/s=340mm/ms 計算距離時,最小分辨力為:0.01(ms) * 340(mm/ms) / 2 = 1.7(mm) 小于模塊標(biāo)準(zhǔn)精度3mm,故測距結(jié)果十分精準(zhǔn) */ return distance; //返回距離,單位mm }
四、實驗最終現(xiàn)象
-
單片機
+關(guān)注
關(guān)注
6034文章
44552瀏覽量
634464 -
模塊
+關(guān)注
關(guān)注
7文章
2694瀏覽量
47427 -
超聲波
+關(guān)注
關(guān)注
63文章
3011瀏覽量
138344 -
CW32
+關(guān)注
關(guān)注
1文章
203瀏覽量
625
原文標(biāo)題:【CW32】基于CW32的超聲波模塊的應(yīng)用
文章出處:【微信號:CW32生態(tài)社區(qū),微信公眾號:CW32生態(tài)社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論