C-SR04超声波测距模块可提供约2cm400厘米的非接触式距离感测功能,测距精度可达高到3毫米;模块包括超声波发射器,接收器与控制电路像智能小车的测距以及转向,或是一些项目中,常常会用到。智能小车测距可以及时发现前方的障碍物,使智能小车可以及时转向,避开障碍物。
注意是5v输入,但是我用stm32的3.3v输入也是没有问题的。
工作原理
1.给超声波模块接入电源和地
。2.给脉冲触发引脚(trig)输入一个长为20us的高电平方波
3.输入方波后,模块会自动发射8个40KHz的声波,与此同时回波引脚(echo)端的电平会由0变为1;(
当此时应该启动定时器计时)4.当超声波返回被模块接收到时,回波引脚端的电平会由1变为0;(此时应该停止定时器计数),定时器记下的这个时间即为超声波由发射到返回的总时长
5 。根据声音在空气中的速度为344米/秒,即可计算出所测的距离。
要学习和应用传感器,学会看懂传感器的时序图是很关键的,所以我们来看一下HC-SR04的时序触发图。
代码实现
超声波的初始化
void initCSB()
{
Trig=0;
Trig=1;
delay(500);
// delay10us();
Trig=0;
}
定时器开启
void startTime()
{
TMOD |=0x1;
TH0=0;
TL0=0;
TR0=1;
}
开启完后我们需要关闭定时器来计算发送超声波和接收的时间
计算时间
unsigned int gettime()
{
unsigned int time;
time = TH0*256+TL0;
return time;
}
main函数执行功能
while(!Echo);
startTime();
while(Echo);
endTime();
time =gettime();
dis=getDis(time);
在一些初始化函数调用后,对Echo的引脚进行测量。倘若改引脚变为高,则是开始推测。当它变成0的时候,则是探测结束。之后对于时间进行计算便可以得到距离。