HC-SR04模块优势
此模块性能稳定,测度距离精确,模块高精度,盲区小。
产品应用领域:
1、机器人避障
2、物体测距
3、液位检测
4、公共安防
5、停车场检测
超声波测距模块工作原理
(1)采用IO口TRIG触发测距,给至少10us的高电平信号;
(2)模块自动发送8个40khz的方波,自动检测是否有信号返回;
(3)有信号返回,通过IO口ECHO输出一个高电平,高电平持续的时间就是超声波从发射到返回的时间。测试距离=(高电平时间*声速(340M/S))/2;
(4)本模块使用方法简单,一个控制口发一个10US以上的高电平,就可以在接收口等待高电平输出。一有输出就可以开定时器计时,当此口变为低电平时就可以读定时器的值,此时就为此次测距的时间,方可算出距离。如此不断的周期测,即可以达到你移动测量的值
超声波测距模块电路图
超声波测距模块工作原理_HC-SR04模块详解
初始化时将trig和echo端口都置低,首先向给trig 发送至少10 us的高电平脉冲(模块自动向外发送8个40K的方波),然后等待,捕捉 echo 端输出上升沿,捕捉到上升沿的同时,打开定时器开始计时,再次等待捕捉echo的下降沿,当捕捉到下降沿,读出计时器的时间,这就是超声波在空气中运行的时间,按照 测试距离=(高电平时间*声速(340M/S))/2 就可以算出超声波到障碍物的距离。
具体程序源码,这里只贴主要部分,其他可在我上传的工程中下载
链接: STM32F103RCT6-OLED显示温度+超声波测距.
链接: stm32f103rct6+hcsr04超声波模块.
int main(void)
{
u8 a=0;
u8 t=20;//trig引脚高电平持续时间
short temperature;
u8 Distance;
uart_init(115200);//串口初始化
Wave_SRD_Init();//初始化超声波
Timer_SRD_Init(9998,7199);//定时器初始化
extern const u8 BMP1[];
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组为组2:2位抢占优先级,2位响应优先级
delay_init();
OLED_Init(); //OLED屏幕初始化
DS18B20_Init(); //DS18B20初始化
while(Wave_SRD_Strat(t))
{
}
OLED_Clear();
while(1)
{
//18B20读取温度
if(a%10==0) //每100ms读取一次
{
temperature=DS18B20_Get_Temp();
if(temperature<0)
{
OLED_ShowCH(50,6,"-"); //显示负号
temperature=-temperature; //转为正数
}else{
OLED_ShowCH(50,6," "); //去掉负号
}
OLED_ShowNum(60,6,temperature/10,2,16); //显示整数部分
OLED_ShowNum(60+28,6,temperature%10,1,16); //显示小数部分
}
delay_ms(10);
a++;
if(a==20)
{
a=0;
}
OLED_ShowCH(15,0,"屏幕显示测试"); //测试显示中文
OLED_ShowCH(0,3,"距离:"); //显示中文:距离
// OLED_ShowCH(0,3,"Distance: "); //显示英文
OLED_ShowCH(100,3,"cm"); //测试显示中文
OLED_ShowCH(0,6,"温度:"); //显示中文:温度
// OLED_ShowCH(0,6,"Temp: "); //显示英文
OLED_ShowCH(78,6,"."); //显示.
OLED_ShowCH(101,6,"℃"); //显示:℃
//产生高于10Us的高电平与OLED上显示超声波所测距离
delay_ms(900);
Wave_SRD_Strat(t);
Distance = TIM_GetCounter(TIM3)*340/200.0;
if(Distance>0)
{
OLED_ShowNum(50,3,Distance,6,16); //显示超声波测量距离
printf("distance %dcm ",Distance);
delay_ms(10);
}
/*
OLED_ShowCH(20,1,"屏幕显示测试"); //测试显示中文
OLED_ShowNum(20,3,314159265,9,0); //测试显示数字
OLED_DrawBMP(0,0,128,8,(u8 *)BMP1); //测试显示图片
*/
}
}
本设计使用的比较简单的4针 0.96寸OLED。
超声波发射引脚接PB7,超声波接收引脚接PB6,PB8接OLED的SCL,PB9接OLED的SDA,在代码里也能看出来。
工程源代码下载
链接: STM32F103RCT6-OLED显示温度+超声波测距.
链接: stm32f103rct6+hcsr04超声波模块.