最新消息:

超声波传感器Arduino代码解析

Arduino 少儿编程 3972浏览 0评论

  在我的上一篇教程中《Arduino教程:认识超声波传感器》中,有提到使用Mixly编程获取超声波传感器的值,那么如何在Arduino IDE中编程呢,现将代码公布如下:

超声波传感器Arduino代码解析

  下面是对上图中Mixly自动生成的Arduino代码的详细解释:

float checkdistance_2_3() {//测距函数

// 产生一个10us的高脉冲去触发TrigPin

digitalWrite(2, LOW);//向2号数字口写入低电平

delayMicroseconds(2);//延时2微秒

digitalWrite(2, HIGH);//向2号数字口写入高电平

delayMicroseconds(10);//延时10微秒

digitalWrite(2, LOW);//向2号数字口写入低电平

// 检测脉冲宽度,并计算出距离

float distance = pulseIn(3, HIGH) / 58.00;//通过pulseIn函数获取超声波从发射到接收所经过的时间,为什么要除以58呢?请看文章最后。

delay(10);

return distance;

}

void setup(){

pinMode(2, OUTPUT);//设置2号数字IO口为输出状态,接超声波传感器的Trig

pinMode(3, INPUT);//设置3号数字IO口为输入状态,接超声波传感器的Echo

}

void loop(){

checkdistance_2_3();//循环执行checkdistance(测距)函数

}

  以上是单独获取超声波传感器的值的代码,checkdistance_2_3函数的返回值distance就是距离值,如果要在串口监视器显示出来,还需要完善,请参考以下代码:

const int TrigPin = 2;

const int EchoPin = 3;

float distance;

void setup()

{

// 初始化串口通信及连接SR04的引脚

Serial.begin(9600);

pinMode(TrigPin, OUTPUT);

// 要检测引脚上输入的脉冲宽度,需要先设置为输入状态

pinMode(EchoPin, INPUT);

Serial.println(“Ultrasonic sensor:”);

}

void loop()

{

// 产生一个10us的高脉冲去触发TrigPin

digitalWrite(TrigPin, LOW);

delayMicroseconds(2);

digitalWrite(TrigPin, HIGH);

delayMicroseconds(10);

digitalWrite(TrigPin, LOW);

// 检测脉冲宽度,并计算出距离

distance = pulseIn(EchoPin, HIGH) / 58.00;

Serial.print(distance);

Serial.print(“cm”);

Serial.println();

delay(1000);

}

  在Arduino IDE中如下图所示:

超声波传感器Arduino代码解析

 

  上图代码中,只有pulseIn是比较特殊的命令,其他的都比较常见,因此附pulseIn函数解释:

  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获取测得的距离。

  以上是在Arduino IDE中,查看超声波传感器测距值的代码,如果还需要根据距离值的变化规律制作避障机器人、液位检测、障碍报警等,还需要在此基础上进行变化,因此最好能像第一个例程一样的,把超声波传感器返回值的获取写成一个自定义函数,这样更有利于多超声波或多类传感器应用的编程,在以后的教程中我将逐渐带领你来学习。

  本节内容到此结束。

 

转自公众号:
初始化工作室

您必须 登录 才能发表评论!