本項目通過HC-SR04超聲波傳感器和STM32F411開發板,以精確到cm的精度測量目標物體的距離。項目BOM表如下:
STM32F411RE開發板 x1
HC-SR04超聲波傳感器 x1
跳線 若干
其中,HC-SR04超聲波傳感器可以0.3cm精度讀取2-400cm范圍距離,而且超聲波發射器和接收器組合在一起,適合大多數個人愛好項目。主要性能包括:
工作電流:15mA
工作頻率:40KHz
最大距離:4m
最小距離:2cm
測量角度:15度
分辨率:0.3cm
觸發輸入信號:10uS TTL脈沖
回升輸出信號:TTL脈沖,與測量成距離成正比
?
當傳感器接收到一個觸發信號,就發出一個40KHz突發信號。該信號通過空氣傳播,在撞到目標物體后返回傳感器,再由傳感器根據一定算法得出被測物體的距離。
HC-SR04傳感器與STM32的連接電路比較簡單,傳感器Vcc與STM32板的5V連接,兩個板子的GND引腳連接,傳感器的Trig 引腳與開發板的A0 (PA0) 連接,echo引腳與開發板的A1 (PA1)引腳連接。
按照上述電路圖連接妥當后,將以下代碼上傳到Arduino IDE。
#include "stm32f4xx.h"
// Device header
#define Trig_high GPIOA->BSRR=GPIO_BSRR_BS_0 // turn on PA0 (trig pin)
#define Trig_low GPIOA->BSRR=GPIO_BSRR_BR_0 // turn off PA0 (trig pin)
?
uint32_t duration;
float distance;
//prototypes of the used function
void delaymS(uint32_t ms);
void delayuS(uint32_t us);
uint32_t read_echo(uint32_t timeout);
?
int main(void)
?
{
RCC->AHB1ENR |= RCC_AHB1ENR_GPIOAEN; //enable GPIOA Clock
GPIOA->MODER |= (1<<0); //set PA0 to Output
//configure Timer1 to generate micorseconds delay
RCC->APB2ENR |= RCC_APB2ENR_TIM1EN; /*Enable TIM3 clock*/
TIM1->PSC = 16 -1; /* 16 000 000 /16 = 1000 000*/
TIM1->ARR = 1; /* 1000 000 /1 = 1000000*/
TIM1->CNT =0;
TIM1->CR1 =1;
while(1)
{
Trig_low; //turn off trig
delayuS(10); //wait 4uS
Trig_high; //turn on trig
delayuS(10);
Trig_low;
duration=read_echo(400000); //measure the time of echo pin
distance=duration/58; //distance=duration/2*SOUND_SPEED
delaymS(1000); //delay for 1 second between each read
}
?
}
?
void delaymS(uint32_t ms) //delay for certain amount in milliseconds
{
SysTick->LOAD=16000-1;
SysTick->VAL=0;
SysTick->CTRL=0x5;
for (int i=0;i;i++)<>
{
while(!(SysTick->CTRL &0x10000)){}
}
SysTick->CTRL=0;
}
void delayuS(uint32_t us) //delay for certain amount in microseconds
{
for(int i =0;i;i++){<>
while(!(TIM1->SR & 1)){} /*wait for UIF set*/
TIM1->SR &= ~1;
}
}
uint32_t read_echo(uint32_t timeout)
{
uint32_t duration;
while(!((GPIOA->IDR)&GPIO_IDR_ID1)){duration++;delayuS(1);
if(duration>timeout){return 0;}
}
duration=0;
while((GPIOA->IDR&GPIO_IDR_ID1)){duration++;delayuS(1);if(duration>timeout){return 0;} }
return duration;
}
如果一切正常,就可以開始測量物體的距離了,可通過serial monitor觀測結果。如果為了方便攜帶,也可連接OLED之類的顯示器件。
-
超聲波
+關注
關注
63文章
3026瀏覽量
138472 -
DIY
+關注
關注
176文章
888瀏覽量
348799 -
激光雷達
+關注
關注
968文章
3989瀏覽量
190078 -
LIDAR
+關注
關注
10文章
327瀏覽量
29449
發布評論請先 登錄
相關推薦
評論