HC-SR04原理
重点
5v供电、Tri引脚需要至少10us的高脉冲去触发、Echo返回的是超声波发射到返回的时间
距离怎么算看上面第三张图,US-015原理相似,注意测量范围最小值和最大值
接线
ESP8266采用USB供电,HC-SR04的VCC、GND分别接ESP8266的Vin、GND,Trial和Echo找两个IO就行,这里以D2、D1为例
代码
/* ESP8266
* HC-SR04、US-015超声波模块测距示例
*/
const unsigned int EchoPin = D1; // D1引脚连接Echo
const unsigned int TrigPin = D2; // D2引脚连接Tric
const int delayTime = 1000; //每两次之间的测量时间间隔
unsigned long Time_Echo_us = 0; //发出和反射总时间
unsigned long Len_mm = 0; //探测距离,单位mm
void setup()
{
Serial.begin(9600);
pinMode(EchoPin, INPUT);
pinMode(TrigPin, OUTPUT);
}
void loop()
{
digitalWrite(TrigPin, LOW); //发出11us的触发脉冲,大于10s即可
digitalWrite(TrigPin, HIGH);
delayMicroseconds(11);
digitalWrite(TrigPin, LOW);
Time_Echo_us = pulseIn(EchoPin, HIGH); //获取传播总时间
if((Time_Echo_us < 60000) && (Time_Echo_us > 1)) //有效传播时间之内,2-400cm,大约为1-60000us
{
Len_mm = (Time_Echo_us*34/100)/2; //计算距离 Len_mm = (Time_Echo_us * 0.34mm/us) / 2 (mm)
Serial.print("Present Distance is: "); //输出结果到串口监视器
Serial.print(Len_mm, DEC);
Serial.println("mm");
}
else //超出测量范围或者测量范围太小
{
Serial.println("Error! Too long or too short!!!");
}
delay(delayTime);
}
Conclusion
当距离小于2cm,测量结果会偏大,HC-SR04在0-2cm之间会显示20-40cm不等的结果,而US-015在0-2cm之间会显示2-4cm。。
这些问题可以通过时间过滤掉或者采取多次测量取平均值的方法
参考
- https://www.arduino.cn/thread-3194-1-1.html