资讯详情

arduino代码_Arduino超声波传感器测距代码完全解析

在Mixly(米思齐)在传感器中→当返回超声波传感器测得的距离模块拖入编辑区时,其右代码区自动生成的代码是Arduino如下图所示:

fb6cd300592bdc94523c3866c46056d1.png

图1:Mixly界面图

这些代码是什么意思?让我们一一解释。如有不清楚,请在评论区留言。

///测距函数

float checkdistance_2_3() {

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

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

delayMicroseconds(2)//延迟2微秒

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

delayMicroseconds(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(测距)函数

}

以上是单独获取超声波传感器值的代码。如果要显示在串口监视器中,需要改进,可以再次使用串口→打印(自动换行)模块被拖出,并与返回超声波传感器测得的距离相结合,如下图所示:

图2:添加串口打印自动换行模块后

与图1相比,右侧的代码区域由20行变为21行。具体变化是图2增加了第15行,原图1第18行:checkdistance_2_3(); 变成图2第19行: Serial.println(checkdistance_2_3()); 完整代码如下:

float checkdistance_2_3() {

digitalWrite(2, LOW);

delayMicroseconds(2);

digitalWrite(2, HIGH);

delayMicroseconds(10);

digitalWrite(2, LOW);

float distance = (3, HIGH) / 58.00;

delay(10);

return distance;

}

void setup(){

pinMode(2, OUTPUT);

pinMode(3, INPUT);

Serial.begin(9600);

}

void loop(){

Serial.println(checkdistance_2_3());

}

在上述完整代码中,最重要的函数是pulseIn函数是程序中最重要的部分。

pulseIn函数实际上是一个简单的函数默认单位为函数us。也就是说pulseIn超声波从发射到接收的时间被测量。除数58也很容易理解,声音干燥,摄氏 空气中20度的传播速度约为343米/秒,合34300厘米/秒。或者,让我们做一个单位转换,34300除以1万厘米/微秒。即为:0.0343厘米/微秒,换个角度,1/(0.0343 厘米/微秒即:29.15 微秒/厘米。这意味着每291次.5微秒表示10CM的距离

实际上超声波传感器,程序里的distance其实是时间开始获得的us。所以换成距离cm,除以58。当然,除以58.也许更准确。所以我们可以使用它 pulseIn(EchoPin, HIGH) / 58.00获取测得的距离。

此外,超声波传感器除外GND、VCC这两个引脚(管脚)和Trig和Echo请注意传感器与主板(或扩展板)实际连接的引脚(管脚)与程序中设置的引脚(管脚)一致,如图3、图4所示。

图3:模块中的Trig、Echo与实际引脚(管脚)对应

图4:红框中的数字应与实际引脚(管脚)对应

本节到此结束。如有不清楚的地方,请给我留言。如需更多相关课程,请点击按钮关注我,我(初始化工作室),谢谢你的支持。

标签: 50cm距离高精度输出传感器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台