【教程】超声波测距

[复制链接]
24202|46
手机看帖
扫描二维码
随时随地手机跟帖
caijie001|  楼主 | 2018-1-24 08:38 | 显示全部楼层 |阅读模式
本帖最后由 caijie001 于 2018-1-24 10:38 编辑

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

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

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

没有超声波回来的时候,(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时候不是很多,花时间在这上面不值得,反正我会用,用不用管他的底层的东西。

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


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


超声波测距代码.zip (111.84 KB)
评论
hrtstart 2022-4-7 08:26 回复TA
楼主可以再发一次PCB吗?云盘链接没了 
HZzhaozheng 2020-11-14 17:31 回复TA
很实用。 
caijie001 2018-1-26 23:36 回复TA
@xch :请看超声波模块资料与时序图 
caijie001 2018-1-26 23:36 回复TA
@xch :这是超声波模块内部自发的 
xch 2018-1-26 19:14 回复TA
为啥发8个脉冲? 只要一个脉冲不行吗? 发10个脉冲不行吗? 
山东电子小菜鸟 2018-1-26 10:12 回复TA
太详细了 

相关帖子

caijie001|  楼主 | 2018-1-24 08:40 | 显示全部楼层
沙发可不能让小喇叭占了

使用特权

评论回复
评论
山东电子小菜鸟 2018-1-26 10:12 回复TA
占不了了 
一路向北lm| | 2018-1-24 10:26 | 显示全部楼层
板凳

使用特权

评论回复
caijie001|  楼主 | 2018-1-24 10:28 | 显示全部楼层

刚刚发现无法显示公众号图片,现在改了

使用特权

评论回复
kelly1989| | 2018-1-24 12:31 | 显示全部楼层
厉害厉害

使用特权

评论回复
评论
山东电子小菜鸟 2018-1-26 10:13 回复TA
666 
kelly1989| | 2018-1-24 12:32 | 显示全部楼层
这都是你设计的吗,软件硬件都是?

使用特权

评论回复
caijie001|  楼主 | 2018-1-24 13:21 | 显示全部楼层
kelly1989 发表于 2018-1-24 12:32
这都是你设计的吗,软件硬件都是?

使用特权

评论回复
评论
山东电子小菜鸟 2018-1-26 10:13 回复TA
 
一路向北lm| | 2018-1-24 18:16 | 显示全部楼层
怎么没显示距离啊不要糊弄我杰杰

使用特权

评论回复
caijie001|  楼主 | 2018-1-24 18:27 | 显示全部楼层
一路向北lm 发表于 2018-1-24 18:16
怎么没显示距离啊不要糊弄我杰杰

第二个不是4cm吗,第一个是调试的照片吧,我也忘了

使用特权

评论回复
评论
一路向北lm 2018-1-24 19:23 回复TA
哈哈 我逗你呢 
好贴 顶起

使用特权

评论回复
gujiamao12345| | 2018-1-25 14:51 | 显示全部楼层
可以往高一点的精度方向继续搞

使用特权

评论回复
评论
山东电子小菜鸟 2018-1-26 10:26 回复TA
@gujiamao12345 :哈哈,有人投资,就可以搞到极致 
gujiamao12345 2018-1-26 10:24 回复TA
@山东电子小菜鸟 :鸟哥就是不一样,鼓掌 
山东电子小菜鸟 2018-1-26 10:14 回复TA
搞到极致 
caijie001|  楼主 | 2018-1-25 15:40 | 显示全部楼层
gujiamao12345 发表于 2018-1-25 14:51
可以往高一点的精度方向继续搞

哈哈哈不了不了,一年前的东西。。。

使用特权

评论回复
gujiamao12345| | 2018-1-25 16:34 | 显示全部楼层
caijie001 发表于 2018-1-25 15:40
哈哈哈不了不了,一年前的东西。。。

嗯 搞点别的

使用特权

评论回复
619888476| | 2018-1-25 22:13 | 显示全部楼层
设计的可以

使用特权

评论回复
评论
山东电子小菜鸟 2018-1-26 10:14 回复TA
嗯 
woosoo521| | 2018-1-26 14:12 | 显示全部楼层
大疆的四轴飞行器上 也采用有这个超声波测距的模块,测试飞行高度

使用特权

评论回复
评论
山东电子小菜鸟 2018-1-27 08:07 回复TA
这个模块一般测量只有几米左右 
caijie001|  楼主 | 2018-1-26 14:46 | 显示全部楼层
woosoo521 发表于 2018-1-26 14:12
大疆的四轴飞行器上 也采用有这个超声波测距的模块,测试飞行高度

不是用气压计吗

使用特权

评论回复
877049204| | 2018-1-26 17:13 | 显示全部楼层
学以致用

使用特权

评论回复
dirtwillfly| | 2018-1-26 19:23 | 显示全部楼层
讲解的很详细

使用特权

评论回复
啥都不懂| | 2018-3-30 21:27 | 显示全部楼层
能不能把那个OLED 的库函数发给我,谢谢啊

使用特权

评论回复
caijie001|  楼主 | 2018-3-30 22:05 | 显示全部楼层
啥都不懂 发表于 2018-3-30 21:27
能不能把那个OLED 的库函数发给我,谢谢啊

代码有。。。。oled.c  oled.h

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:21ic公开课专区:http://open.21ic.com/ 21ic资料下载中心:http://dl.21ic.com/ 21ic项目外包中心:http://project.21ic.com/ 杰杰欢迎大家有空常来赛事专区逛逛

131

主题

3790

帖子

63

粉丝