超聲波模塊介紹
SR04超聲波模塊是一款廣泛應(yīng)用的測(cè)距傳感器,主要用于使用超聲波測(cè)量物體與傳感器之間的距離。它是一個(gè)成本低廉、精度較高且易于使用的傳感器,常用于機(jī)器人、智能家居、無人機(jī)、汽車防撞系統(tǒng)等項(xiàng)目。以下是SR04超聲波模塊的主要特點(diǎn)和應(yīng)用:
測(cè)距范圍: SR04模塊的測(cè)距范圍通常在2厘米到400厘米之間,適合多種應(yīng)用。
高精度: 它具備較好的測(cè)量精度,通??蛇_(dá)±3毫米,這使其適用于需要精確測(cè)量的場(chǎng)合。
工作原理: SR04模塊通過發(fā)射超聲波脈沖并測(cè)量聲波反射回來的時(shí)間來計(jì)算距離。傳感器的超聲波發(fā)射和接收分別由兩個(gè)探頭(發(fā)射器和接收器)完成。
簡(jiǎn)單接口: 通常使用簡(jiǎn)單的GND、VCC、Trig(觸發(fā)信號(hào))和Echo(回聲信號(hào))四個(gè)引腳,便于連接到微控制器(如Arduino)上。
低功耗: 在待機(jī)狀態(tài)下,SR04的功耗較低,適合電池供電的項(xiàng)目。
超聲波模塊工作原理

只需要在 Trig 管腳(觸發(fā)信號(hào))輸入一個(gè) 10US 以上的高電平,系統(tǒng)便可發(fā)出 8 個(gè) 40KHZ 的超聲波脈沖,然后檢測(cè)回波信號(hào)。當(dāng)檢測(cè)到回波信號(hào)后,通過 Echo 管腳輸出。根據(jù) Echo 管腳輸出高電平的持續(xù)時(shí)間可以計(jì)算距離值。即距離值為:(高電平時(shí)間*340m/s)/2。
當(dāng)測(cè)量距離超過 HC-SR04 的測(cè)量范圍時(shí),仍會(huì)通過 Echo管腳輸出高電平的信號(hào),高電平的寬度約為 66ms。如圖所示:

測(cè)量周期:當(dāng)接收到 HC-SR04 通過 Echo 管腳輸出的高電平脈沖后,便可進(jìn)行下一次測(cè)量,所以測(cè)量周期取決于測(cè)量距離,當(dāng)距離被測(cè)物體很近時(shí),Echo 返回的脈沖寬度較窄,測(cè)量周期 就很短;當(dāng)距離被測(cè)物體比較遠(yuǎn)時(shí),Echo 返回的脈沖寬度較寬,測(cè)量周期也就相應(yīng)地變長(zhǎng)。最壞情況下,被測(cè)物體超出超聲波模塊的測(cè)量范圍,此時(shí) 返回的脈沖寬度最長(zhǎng),約為 66ms,所以最壞情況下的測(cè)量周期稍大于 66ms 即可(取 70ms 足夠)。
電路連接
該模塊在主控制板上與CW32L012/F030連接如下:

兩個(gè)引腳分別接到了PA8與PA15端口。
工程代碼
在文件HC_SR04.C中編寫如下代碼
#define Trig_Send(x) GPIO_WritePin(CW_GPIOA, GPIO_PIN_8, (GPIO_PinState)(x)) #define Echo_Input GPIO_ReadPin(CW_GPIOA, GPIO_PIN_15) uint16_t Get_Time; /************************** 定時(shí)器配置 中斷周期為1ms **************************/ void TIM_Init(void) { RCC_APBPeriphClk_Enable2(RCC_APB2_PERIPH_BTIM,ENABLE); BTIM_TimeBaseInitTypeDef BTIM_Initstructure; BTIM_Initstructure.BTIM_Mode=BTIM_Mode_TIMER; BTIM_Initstructure.BTIM_OPMode=BTIM_OPMode_Repetitive; BTIM_Initstructure.BTIM_Period=1000-1; BTIM_Initstructure.BTIM_Prescaler=BTIM_PRS_DIV64;//64分頻 BTIM_TimeBaseInit(CW_BTIM1,&BTIM_Initstructure); BTIM_ITConfig(CW_BTIM1,BTIM_IT_OV,ENABLE); // BTIM_Cmd(CW_BTIM1,ENABLE); NVIC_SetPriority(BTIM1_IRQn,8);//中斷優(yōu)先級(jí) NVIC_EnableIRQ(BTIM1_IRQn);//開啟中斷 } void HC_SR04_Init(void) { __RCC_GPIOA_CLK_ENABLE(); GPIO_InitTypeDef GPIO_InitStruct; GPIO_InitStruct.IT=GPIO_IT_NONE; GPIO_InitStruct.Mode=GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pins=GPIO_PIN_8; GPIO_InitStruct.Speed=GPIO_SPEED_HIGH; GPIO_Init(CW_GPIOA, &GPIO_InitStruct); GPIO_InitStruct.IT=GPIO_IT_NONE; GPIO_InitStruct.Mode=GPIO_MODE_INPUT_PULLDOWN; GPIO_InitStruct.Pins=GPIO_PIN_15; GPIO_InitStruct.Speed=GPIO_SPEED_HIGH; GPIO_Init(CW_GPIOA, &GPIO_InitStruct); Trig_Send(0); TIM_Init(); } void BTIM1_Start(void)//打開定時(shí)器 { BTIM_SetCounter(CW_BTIM1,0); Get_Time=0; BTIM_Cmd(CW_BTIM1,ENABLE); } void BTIM1_Stop(void)//關(guān)閉定時(shí)器 { BTIM_Cmd(CW_BTIM1,DISABLE); } uint32_t Get_Tim_Timer(void)//得到信號(hào)反射時(shí)間 { uint32_t time; time=Get_Time*1000; time+=BTIM_GetCounter(CW_BTIM1); BTIM_SetCounter(CW_BTIM1,0); return time; } float Get_Disance(void)//距離計(jì)算 { uint8_t i; uint16_t time=0; float Distance=0; float Temp=0; float num=0; for(i=0;i10;i++) { Trig_Send(1);//trig拉高信號(hào),發(fā)出高電平 delay10us(2); Trig_Send(0);//trig拉低信號(hào),發(fā)出低電平 while(Echo_Input==0); BTIM1_Start(); while(Echo_Input==1); BTIM1_Stop(); /*Echo發(fā)出信號(hào) 等待回響信號(hào)*/ /*輸入方波后,模塊會(huì)自動(dòng)發(fā)射8個(gè)40KHz的聲波,與此同時(shí)回波引腳(echo)端的電平會(huì)由0變?yōu)?; (此時(shí)應(yīng)該啟動(dòng)定時(shí)器計(jì)時(shí));當(dāng)超聲波返回被模塊接收到時(shí),回波引 腳端的電平會(huì)由1變?yōu)?; (此時(shí)應(yīng)該停止定時(shí)器計(jì)數(shù)),定時(shí)器記下的這個(gè)時(shí)間即為 超聲波由發(fā)射到返回的總時(shí)長(zhǎng);*/ time=Get_Tim_Timer(); Temp=(float)time/58.2; // 獲取時(shí)間,分辨率為1us num+=Temp; Delay_ms(4); } Distance=num/10.0; return Distance; } void BTIM1_IRQHandler(void) { if(BTIM_GetITStatus(CW_BTIM1,BTIM_IT_OV)==1) { Get_Time++; } BTIM_ClearITPendingBit(CW_BTIM1,BTIM_IT_OV); }
在main.c中編寫如下代碼
int main(void)
{
OLED_Init();//初始化
HC_SR04_Init();
OLED_ShowString(1,1,"hello");//OLED顯示字符串
while(1)
{
OLED_ShowString(2,1,"Dis:");
OLED_ShowNum(2,5,Get_Disance(),3);//距離顯示
OLED_ShowString(2,9,"cm");;
}
}
工作現(xiàn)象
將代碼燒入主控制板之后,可以觀察到以下現(xiàn)象
OLED顯示屏第一行第一列顯示字符串hello
第二行顯示距離單位cm
-
超聲波
+關(guān)注
關(guān)注
63文章
3302瀏覽量
145301 -
智能小車
+關(guān)注
關(guān)注
87文章
560瀏覽量
83433 -
CW32
+關(guān)注
關(guān)注
1文章
299瀏覽量
1846
發(fā)布評(píng)論請(qǐng)先 登錄
CW32L012/F030靈眸X1智能小車——板載WS2812驅(qū)動(dòng)示例
CW32L012小型機(jī)器人控制評(píng)估板活動(dòng) 四足機(jī)器人+智能小車 開箱評(píng)測(cè)
超聲波模塊參考
超聲波模塊測(cè)距問題
HC-SR04超聲波模塊的工作原理是什么
超聲波模塊的原理
利用超聲波模塊設(shè)計(jì)智能避障的WiFi小車
怎么使用STM32F1驅(qū)動(dòng)超聲波模塊
超聲波模塊的工作原理與時(shí)序圖學(xué)習(xí)
怎樣利用HY-SRF05超聲波模塊實(shí)現(xiàn)超聲波的測(cè)距避障呢
利用HY-SRF05 超聲波模塊實(shí)現(xiàn)超聲波的測(cè)距避障
CW32L012/F030靈眸X1智能小車——超聲波模塊配置
評(píng)論