一、簡介
1. C-SR04超聲波模塊是一種常用的測距模塊,其通過發(fā)射超聲波并接收其反射信號來實(shí)現(xiàn)測距功能。因其成本低、精度高、使用簡便等特點(diǎn),被廣泛應(yīng)用于以下場景:
(1)避障機(jī)器人:HC-SR04超聲波模塊可以用于避障機(jī)器人的距離測量,通過檢測障礙物與機(jī)器人的距離,實(shí)現(xiàn)避障控制。
(2)智能家居:HC-SR04超聲波模塊可用于智能家居中的人體檢測和距離測量。例如,在門口安裝超聲波模塊,可以檢測人的接近并觸發(fā)開門動(dòng)作,或者用于室內(nèi)的距離測量和觸發(fā)自動(dòng)照明等。
2. 本實(shí)驗(yàn)用到了CW32F030C8T6小藍(lán)板、0.96寸OLED顯示屏、HC-SR04超聲波模塊及Keil5開發(fā)環(huán)境。
二、超聲波模塊測距的使用方法
使用流程 連接電源 將VCC引腳連接到+5V,GND引腳連接到GND。
連接觸發(fā)引腳
將Trig引腳連接到單片機(jī)的數(shù)字輸出引腳。
連接回波引腳
將Echo引腳連接到單片機(jī)的數(shù)字輸入引腳。
發(fā)送信號
通過向Trig引腳發(fā)送一個(gè)至少10微秒的高電平觸發(fā)信號來啟動(dòng)測距過程
接收信號
模塊發(fā)送觸發(fā)信號后,自動(dòng)發(fā)射超聲波,并等待接收反射信號。當(dāng)接收到反射信號時(shí),Echo引腳會(huì)輸出一個(gè)高電平信號,持續(xù)時(shí)間與超聲波的往返時(shí)間成正比。
計(jì)算距離
通過測量Echo引腳輸出高電平信號的持續(xù)時(shí)間,可以計(jì)算得到距離,一般使用以下公式計(jì)算:
距離= 高電平持續(xù)時(shí)間 × 聲波在空氣中傳播的速度 / 2。
重復(fù)測量
根據(jù)需要可定時(shí)測量距離,以實(shí)現(xiàn)連續(xù)的距離監(jiān)測。
需要注意的是,HC-SR04超聲波模塊的測距精度受到多種因素的影響,如溫度、超聲波傳播介質(zhì)等。在使用過程中,需要結(jié)合具體的應(yīng)用場景和需求進(jìn)行參數(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ù)聲速和時(shí)間計(jì)算距離,即distance=time*340/2/100 /* 關(guān)于分辨力(mm): 定時(shí)器每次對time加1是10us,10us=0.01ms,340m/s=340mm/ms 計(jì)算距離時(shí),最小分辨力為: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ù)聲速和時(shí)間計(jì)算距離,即distance=time*340/2/100 /* 關(guān)于分辨力(mm): 定時(shí)器每次對time加1是10us,10us=0.01ms,340m/s=340mm/ms 計(jì)算距離時(shí),最小分辨力為:0.01(ms) * 340(mm/ms) / 2 = 1.7(mm) 小于模塊標(biāo)準(zhǔn)精度3mm,故測距結(jié)果十分精準(zhǔn) */ return distance; //返回距離,單位mm }
審核編輯:劉清
-
OLED顯示屏
+關(guān)注
關(guān)注
6文章
218瀏覽量
31281 -
GND
+關(guān)注
關(guān)注
2文章
544瀏覽量
39492 -
避障機(jī)器人
+關(guān)注
關(guān)注
0文章
18瀏覽量
7776 -
超聲波模塊
+關(guān)注
關(guān)注
1文章
21瀏覽量
13719 -
CW32
+關(guān)注
關(guān)注
1文章
242瀏覽量
1098
原文標(biāo)題:【CW32優(yōu)秀項(xiàng)目展示】基于CW32的超聲波模塊的應(yīng)用
文章出處:【微信號:武漢芯源半導(dǎo)體,微信公眾號:武漢芯源半導(dǎo)體】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
超聲波清洗的原理是什么?超聲波清洗是如何起作用的?

超聲波頻率和功率對在線式超聲波清洗的影響如何?

【CW32模塊使用】US-016超聲波測距傳感器

超聲波液位計(jì)的工作原理 超聲波液位計(jì)與其他液位計(jì)的比較
如何避免超聲波對晶振的影響

超聲波測厚儀的技術(shù)原理和應(yīng)用場景
超聲波和次聲波的頻率范圍和應(yīng)用
PGA460超聲波模塊硬件和軟件優(yōu)化

超聲波水表是什么?量程比又是什么?

超聲波測速的原理、方法及應(yīng)用
超聲波測速是利用超聲波的什么效應(yīng)
AFE5812超聲波模擬前端數(shù)據(jù)表

AFE5818 16通道超聲波模擬前端數(shù)據(jù)表

超聲波驅(qū)動(dòng)板-超聲波它激式驅(qū)動(dòng)板

評論