认识单片机超声波测距与超声波测距仪

 单片机超声波测距是一种常见的测距方法,它利用了超声波在介质中传播的特点,通过发射超声波并接收反射回的超声波,根据超声波发射和接收的时间差计算出距离。以下是一些实现超声波测距的常见方法:

1. 使用STM32单片机:结合HC-SR04超声波测距模块,可以实现超声波测距功能,并将距离显示在LCD1602上。如果超声波测量距离小于30cm,则蜂鸣器报警,否则,不报警。

2. 使用51单片机:可以通过单片机控制超声波的发射和对超声波自发射至接收往返时间的计时。系统定时发射超声波,在启动发射电路的同时启动单片机内部的定时器,利用定时器的计数功能记录超声波发射的时间和收到反射波的时间。当收到超声波的反射波时,接收电路输出端产生一个负跳变,单片机检测到这个负跳变信号后,停止内部计时器计时,读取时间,计算距离,测量结果输出给数码管显示。

3. 使用8051单片机:在这个项目中,我们使用8051单片机和超声波传感器建立了一个超声波测距仪。超声波模块向物体发射信号,然后接收来自物体的回波信号并产生输出信号,其时间周期与物体的距离成正比。这个电路根据正常温度下的声波速度计算物体的距离,并在LCD上显示距离。

以上是一些基本的实现方式,但实际应用中还需要考虑硬件电路设计、软件编程等多个方面,以保证测距的准确性和稳定性。同时,还需要注意超声波测距模块的使用电压、静态电流等参数,这些都会影响到测距的效果。 

 单片机超声波测距仪是一种使用超声波技术进行距离测量的设备,主要由单片机和超声波传感器组成。超声波测距仪的工作原理是,通过发射超声波信号,然后接收来自物体的回波信号并产生输出信号,其时间周期与物体的距离成正比。通过计算超声波从发射到接收的时间间隔,可以得到物体的距离。

例如,一种常见的超声波测距仪是使用8051单片机和HC-SR04超声波传感器。这个系统可以测量4米的距离,精确度为3毫米[1]。另一种设计是使用AT89C51单片机,8051编程板,编程电缆,HC - SR04 超声波模块,16 x 2 LCD,10KΩ 电位器,10µF / 16V 电解电容,2个10KΩ电阻,0592MHz晶体,2 x 33pF 电容器,按钮,连接线,电源供应器等[1]。

在使用过程中,需要注意的是,超声波测距时,被测物体的面积不少于0.5平方米且要尽量平整。否则会影响测试结果。如果测试面不是很规则或则测试远距离物体时,可采用多次测量的方法来校正。此外,温度、湿度、压力、气流等因素都可能造成测试时的准确性。

在市场上,你可以在京东等网上购物平台找到单片机超声波测距仪的产品,包括单片机超声波测距模块和相关的硬件设备。

总的来说,单片机超声波测距仪是一种实用的测距设备,广泛应用于智能小车等需要测量障碍物距离的设备中。 

   

 以下是一个简单的51单片机超声波测距代码,使用了一个40kHz的超声波模块进行距离测量。

```c
#include <reg51.h>
#include <intrins.h>
#include <stdlib.h>

#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long

sbit LSA=P3^2; //定义超声波模块的引脚
uchar code table[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; //40kHz超声波模块的波特率

void DelayMs(uint z) { //延时函数
    uint x = z*1000;
    while(x--);
}

void Init_USART() { //初始化超声波模块
    SCON = 0x50; //设置串口为模式1
    TMOD |= 0x20; //设置定时器为模式2
    TH1 = 0xFC; //设置定时器初值
    TL1 = 0x86; //设置定时器初值
    TR1 = 1; //启动定时器
}

void USART_Send(uchar dat) { //发送数据
    SBUF = dat;
    while(!TI);
    TI = 0;
}

void main() {
    Init_USART(); //初始化超声波模块
    
    while(1) {
        ulong distance = 0;
        
        if(LSA == 0) { //当超声波模块发射时
            USART_Send(table[0]); //发送起始信号
            DelayMs(5);
            
            if(LSA == 1) { //当超声波模块接收到反射回来的信号时
                USART_Send(table[1]); //发送停止信号
                DelayMs(5);
                
                for(uint i=0;i<9;i++) { //计算距离
                    USART_Send(table[2+i]); //发送数据
                    DelayMs(5);
                    
                    if(LSA == 0) {
                        break;
                    }
                }
                
                distance = (ULONG)(HWREG(AREA1 + 0x0E00) >> 16 - 0x0C00) * 10; //转换成米
                printf("距离:%.2f米\n",distance/10.0);
                
                HALF_DELAY(1000); //延时1秒
                
                return;
            }
        }
    }
}
```

该代码仅适用于SJTAG系列的51单片机。此外,由于不同厂家生产的超声波模块可能存在差异,因此在实际应用中需要根据具体情况进行调整。 

  • 6
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基于51单片机超声波测距设计如下: 1. 硬件设计: 超声波测距模块HC-SR04通过4个引脚与51单片机相连,其中VCC接5V电源,GND接地,Trig接P1.0,Echo接P1.1。1602液晶通过16个引脚与51单片机相连,其中VSS接地,VDD接5V电源,VO接电位器,RS接P2.0,RW接P2.1,E接P2.2,D0-D7接P0口。 2. 软件设计: (1) 初始化1602液晶,设置超声波模块的Trig引脚为输出,Echo引脚为输入。 (2) 定义计时器,用于计算超声波从发射到接收的时间。 (3) 发送一个10us的高电平脉冲到Trig引脚,触发超声波模块开始测距。 (4) 等待Echo引脚变为高电平,开始计时。 (5) 等待Echo引脚变为低电平,停止计时。 (6) 根据计时器的值计算出距离,并将距离显示在1602液晶上。 以下是基于51单片机超声波测距设计的部分代码: ```c #include <reg52.h> #include <intrins.h> #define uint unsigned int #define uchar unsigned char sbit Trig = P1^0; sbit Echo = P1^1; sbit RS = P2^0; sbit RW = P2^1; sbit E = P2^2; void delay(uint i) { while(i--); } void write_com(uchar com) { RS = 0; RW = 0; P0 = com; delay(100); E = 1; _nop_(); _nop_(); E = 0; } void write_data(uchar dat) { RS = 1; RW = 0; P0 = dat; delay(100); E = 1; _nop_(); _nop_(); E = 0; } void init() { write_com(0x38); write_com(0x0c); write_com(0x06); write_com(0x01); } void main() { uint distance; uchar str[16]; TMOD = 0x01; TH0 = 0; TL0 = 0; TR0 = 1; while(1) { Trig = 1; delay(10); Trig = 0; while(!Echo); TH0 = 0; TL0 = 0; while(Echo); TR0 = 0; distance = TH0 * 256 + TL0; distance = distance / 58; sprintf(str, "Distance: %d cm", distance); init(); write_data(str[0]); write_data(str[1]); //... write_data(str[15]); } } ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值