找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 7892|回复: 5
打印 上一主题 下一主题
收起左侧

超声波测距程序及调试

[复制链接]
跳转到指定楼层
楼主
ID:77967 发表于 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.大家敲完代码测试出结果了是不是很高兴,但是,仔细想一想,声音要是在真空是什么情况,原来真空下声音是不能传播的,在不同温度和压强下的声速是不一样的

评分

参与人数 1黑币 +50 收起 理由
admin + 50

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:1 发表于 2015-6-2 22:24 来自手机 | 只看该作者
要是有图片就更好了
回复

使用道具 举报

板凳
ID:82869 发表于 2015-6-13 10:30 | 只看该作者
再详细点就更好了
回复

使用道具 举报

地板
ID:83149 发表于 2015-6-16 13:48 | 只看该作者
嗯!楼主说的很对,昨天刚刚看到超声波避障,但还没有看到LCD输出显示部分。其中就讲到声音传播速度会受到温度和密度的影响,但是日常使用中也就是个大概值,误差可以忽略。
回复

使用道具 举报

5#
ID:84605 发表于 2015-7-2 18:58 | 只看该作者
    是应该更详细些。也没有说明使用的元器件。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表