首页 > 编程知识 正文

一体式超声波测距,超声测量原理

时间:2023-05-04 00:15:30 阅读:207925 作者:2423

这是我在学校做的超声波测距系统,那时候是我刚刚接触半年的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

下载




版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。