超声波测距
const int TrigPin = 0;//D3
const int EchoPin = 4;//D2
float distance;//距离
void setup()
{ // 初始化串口通信及连接SR04的引脚
Serial.begin(115200);//波特率设置为115200
pinMode(TrigPin, OUTPUT);//将Trig设为输出模式
pinMode(16, OUTPUT);//将D0设置为输出模式
// 要检测引脚上输入的脉冲宽度,需要先设置为输入状态
pinMode(EchoPin, INPUT);//将Echo设置为输入模式
Serial.println("超声波传感器:");
}
void loop()
{
// 产生一个10us的高脉冲去触发TrigPin
digitalWrite(TrigPin, LOW);
delayMicroseconds(2);
digitalWrite(TrigPin, HIGH);
delayMicroseconds(10);
digitalWrite(TrigPin, LOW);
// 检测脉冲宽度,并计算出距离
distance = pulseIn(EchoPin, HIGH) / 58.00;
/*
#################为什么要除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可能更精确。
*/
if(distance<=10){
digitalWrite(16,HIGH);
}
else{
digitalWrite(16,LOW);
}
Serial.print(distance);
Serial.print("cm");
Serial.println();
delay(100);
}