超声波测距原理与实现

这是我在学校做的超声波测距系统,那时候是我刚刚接触半年的51,就想着弄点什么小东西出来吧。起码得做点什么东西出来,所以自行设计了超声波测距系统/倒车系统测距系统,也来分享一下给大家,本作品以STC12C5A60S2作为核心,以某宝上买的超声波模块作为检测模块,以oled屏幕作为显示文字、数字、英文、等等、用有源蜂鸣器作为报警器,红色直插LED顺便作为提示,兼容5——12V供电,引出io口,方便以后当做最小系统使用,方便兼容多个其他模块,(自行脑补)。。。。带复位,下载口,,正常工作时候oled显示:“xxx超声波测距,距离xxxCM”,蜂鸣器不响,绿色LED亮,红色灭,当距离小于xxxCM时,蜂鸣器象棋警报,红色LED亮起,绿色灭,大致就是这样。系统为本人亲自制作,单层板,上图。还有pcb,原理图等,代码等;代码有点乱,提供一部分看看。
这是我的第一个作品吧,之前搞了个4*4*4的光立方,没有成功,只怪我当初太菜,还急躁了,不过现在做这个还是挺成功的,因为是超声波,距离精确到cm吧,反正就是能测距就行,主要的问题就是oled显示的问题,当时我怎么弄都没显示的,但是改了一下,把显示的函数封装起来,然后调用,就突然好了,我也是奇怪。。。。也有运气的成分在吧。。。。先解说下超声波工作原理吧:


简单来说就是单片机控制超声波发射模块发出一系列超声波,遇到障碍物反弹回来,被超声波接收模块接收到,然后计算这段时间(声音在空气中传播的速度为340m/s),通过计算,得出距离,然后再oled上显示出来,程序对距离数值产生判断,小于5mm就触发蜂鸣器响,红色led闪烁。这就是基本的思路。
先来看看超声波模块长什么样:
其实模块的外围电路很简单,都已经搭建好了,引出4个排针,连接到单片机的vcc,io口,io口,gnd,用到2个io口,然后我们就可以模拟时序来使超声波模块工作了;

我们知道采用 IO (Trig(控制端))触发测距,给至少 10us 的高电平信号;就是10us的TTL;我是直接让他延时个10多us;
模块就会自动发送 8 个 40khz 的方波,自动检测是否有信号返回;操作简单方便;假如有信号返回,超声波模块就会通过 IO(Echo(接收端)) 输出一高电平,高电平持续的时间就是超声波从发射到返回的时间.那么测试距离=(高电平时间*声速(340M/S))/2;
那么问题来了,怎么真的时间是多少呢,这就是要我们用定时器来计时了;

没有超声波回来的时候,(Echo(接收端)就是RX=0;就在等待,
当有接收到超声波的时候,就开始计时,TR0=1;;因为上文说了,超声波模块就会通过 IO(Echo(接收端)) 输出一高电平。
(Echo(接收端)高电平持续的时间就是超声波从发射到返回的时间.所以等待高电平的时间,就是定时器计时的时间。(while(RX));//在等待
然后关闭定时器,通过算法就能计数了。

void Conut(void)
        {
         time=TH0*256+TL0;
         TH0=0;
         TL0=0;
        
         S=(time*1.7)/100;   
}

具体对数据做什么要求请各位自行发挥。
我就是简单的显示下数据就ok了:

         qian=S%1000/100;
          bai=S%1000%100/10;
          shi=S%1000%100 %10;
得出结果是cm;共有3位数字;比如006cm;
然后就是如何显示的问题了,因为我用的是库函数,显示字符要取模,我就不教大家了,可以百度一下取模的问题,而且我调用的是库函数,就简单看看我的代码吧;
void display()
{
        
        WriteChinese16x16(0,0,"杰杰号超声波测距");

         PrintNum_8x16(2,60,qian);
         PrintNum_8x16(2,70,bai);
         PrintNum_8x16(2,80,shi);

        WriteMixStrXx16(2,10,"距离");
        WriteMixStrXx16(2,97,"CM");

        bee=1;
        d1=0;
        d2=1;

if(S<5)
{
        delay(5);
        if(S<5)//小于5cm,蜂鸣器响,红灯亮。
{
        d1=1;
        bee=0;
        d2=0;
}
}
这是在oled上显示的。有比较多的库函数,我也没仔细研究,但是会调用就行了,因为用到的oled时候不是很多,花时间在这上面不值得,反正我会用,用不用管他的底层的东西。

需要代码的话找我拿就好,其实原理很简单的,动动手,按照我上一篇的推送画个最小系统板就ok了,但是要注意的地方是,oled,最好用3.3v供电,所以加入了ams117稳压芯片,
看下效果图是怎样的:


原理图和pcb都是开源的,全自创,仅供学习。

请到

http://bbs.21ic.com/icview-2408582-1-1.html?fromuid=1875788

下载




  • 42
    点赞
  • 246
    收藏
    觉得还不错? 一键收藏
  • 14
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值