arduino学习笔记-20-超声波传感器
超声波传感器
图片

技术规格
尺寸 | 21*45mm |
---|---|
工作电压 | DV 3V-5.5V |
工作电流 | 5.3mA |
工作温度 | -40°C-85°C |
输出方式 | GPIO |
感应角度 | 小于15度 |
探测距离 | 2cm-600cm |
探测精度 | 0.1cm+1% |
引脚
Vcc:接5V电源
Trig:发送超声波信号,设置输出引脚
Echo:接受超声波信号,设置输入引脚
Gnd:接地
测距原理
超声波测距采用回声探测法,即超声波发射器向某一方向发射超声波,在发射时刻的同时计时器开始计时,超声波在空气中传播,途中碰到障碍物面阻挡就立即反射回来,超声波接收器收到反射回的超声波就立即停止计时。超声波在空气中的传播速度为 340m/s,根据计时器记录的时间 t,就可以计算出发射点距障碍物面的距离 s,即:s=340t/2。
采用Trig引脚触发,给至少10us的高电平脉冲信号,有信号返回时,通过Echo引脚输出一个高电平脉冲,高电平脉冲持续的时间就是超声波从发射到反射返回的时间。距离=(高电平脉冲时间*340)/2。(声音在空气中传播速度为340m/s)。
代码
1 | int TrigPin = 12; // 定义发射脚位 |
pulseln()函数
pulseIn() :用于检测引脚输出的高低电平的脉冲宽度。
pulseIn(pin, value)
pulseIn(pin, value, timeout)
Pin— 需要读取脉冲的引脚
Value —需要读取的脉冲类型, HIGH 或 LOW
Timeout —超时时间,单位微秒,数据类型为无符号长整型。
pulseIn函数其实就是一个简单的测量脉冲宽度的函数,默认单位是us。也就是说pulseIn测出来的是超声波从发射到接收所经过的时间。
对于除数58也很好理解,声音在干燥、摄氏 20度的空气中的传播速度大约为343米/秒,合34,300厘米/秒。或者,我们作一下单位换算,34,300除以1,000,000厘米/微秒。即为:0.0343厘米/微秒,再换一个角度,1/(0.0343 厘米/微秒)即:29.15 微秒/厘米。这就意味着,每291.5微秒表示10CM的距离。1厘米就是29.15微秒。但是发送后到接收到回波,声音走过的是2倍的距离。
所以实际距离就是1厘米,对应58.3微秒。实际上整个测距过程是测的发出声波到收到回波的时间,你的程序里的第一个distance实际上是时间us。所以换成距离cm,要除以58。当然除以58.3可能更精确。所以我们可以用 pulseIn(EchoPin, HIGH) / 58.00获取测得的距离。