标题: 超声波测距程序及调试 [打印本页]

作者: wwibe    时间: 2015-6-2 21:00
标题: 超声波测距程序及调试
const int TrigPin = 2;
const int EchoPin = 3;
float cm;
void setup()
{
    Serial.begin(9600);
    pinMode(TrigPin, OUTPUT);
    pinMode(EchoPin, INPUT);
}
void loop()
{
    //发一个10ms的高脉冲去触发TrigPin
    digitalWrite(TrigPin, LOW);
    delayMicroseconds(2);
    digitalWrite(TrigPin, HIGH);
    delayMicroseconds(10);
    digitalWrite(TrigPin, LOW);

    cm = pulseIn(EchoPin, HIGH) / 58.0; //算成厘米
    cm = (int(cm * 100.0)) / 100.0; //保留两位小数
    Serial.print(cm);
    Serial.print("cm");
    Serial.println();
    delay(1000);
}


烧载完成后打开串口窗口,保证电路的接线正确,把模块平行对着被测物体,可以看到上图所示的测距距离。来看一下代码: pulseIn(EchoPin, HIGH),此函数是计算EchoPin的高电平时间,先将引脚拉高,开始计时,直到该引脚变为低电平为止,单位为ms,如果超出还没读取到的话,将返回0.
cm = pulseIn(EchoPin, HIGH) / 58.0;可能很多人会问为什么要除以58.0呢,声速是340m/s换算一下就是函数返回的值是ms,1s=1000ms,cm=t/1000*34/2=0.017*t=t/58.8,所以会有除以58.0.大家敲完代码测试出结果了是不是很高兴,但是,仔细想一想,声音要是在真空是什么情况,原来真空下声音是不能传播的,在不同温度和压强下的声速是不一样的


作者: admin    时间: 2015-6-2 22:24
要是有图片就更好了
作者: lizhigao    时间: 2015-6-13 10:30
再详细点就更好了
作者: bolang0927    时间: 2015-6-16 13:48
嗯!楼主说的很对,昨天刚刚看到超声波避障,但还没有看到LCD输出显示部分。其中就讲到声音传播速度会受到温度和密度的影响,但是日常使用中也就是个大概值,误差可以忽略。
作者: siberianbj    时间: 2015-7-2 18:58
    是应该更详细些。也没有说明使用的元器件。




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1