51单片机使用HC-S104超声波模块

HC-S104超声波模块是一种测量距离的传感器,可以用于51单片机的测距应用。下面是使用HC-S104超声波模块的步骤:

1.将HC-S104超声波模块的VCC引脚连接到51单片机的3.3V或5V电源,GND引脚连接到51单片机的GND,TRIG引脚连接到51单片机的一个可编程输出口,ECHO引脚连接到51单片机的一个可编程输入口。

2.提供一个10微秒以上的高电平信号给HC-S104的TRIG引脚,触发模块向目标发射超声波。

3.HC-S104超声波模块将发射的超声波信号反弹回来,通过ECHO引脚返回到单片机。

4.通过单片机的编程,测量从TRIG触发到ECHO引脚返回的超声波信号的时间差,通常以微秒为单位。

5.根据测量的时间差和超声波在空气中传播的速度,可以计算出距离。

6.重复以上步骤,可以实现连续的测距操作。

注意:使用HC-S104超声波模块时,需要注意防止信号干扰和误判。可以采用滤波器和阈值判断等方法来提高测量精度。同时,还需要考虑超声波在不同介质中传播的速度不同,需要根据具体情况进行修正。


具体例子:

连线:

将HC-SR04超声波模块的VCC和GND分别接单片机的5V和GND上。将Trig接单片机的PD0(D0),将Echo接单片机的PD1(D1)上。

代码:

#include <reg51.h>
//定义PD0为输出口,PD1为输入口,并全局变量int distance
sbit Trig = P0^0; //Trig连接PD0
sbit Echo = P0^1; //Echo连接PD1
int distance;


//首先,向Trig脚发送一个10微秒的高电平信号,然后将Trig脚拉低,等待Echo脚变为高电平。当Echo脚高电平时,开始计时。当Echo脚低电平时,计时结束,并计算出距离,存入全局变量distance中。
void send_pulse()
{
    Trig = 1; //发送10微秒的高电平
    delay_us(10);
    Trig = 0; //拉低
}


void measure_distance()
{
    int time = 0;
    while(Echo == 0); //等待Echo脚变高
    while(Echo == 1)
    {
        time ++;
        delay_us(1);
    } //计数
    distance = time / 58; //计算距离
}


//延时函数用于精确计时。以下是一个精度较高的延时函数:
void delay_us(int time)
{
    int i, j;
    for(i = 0; i < time; i ++)
    {
        j = 12; //经过测试,12是一个较为准确的值
        while(j --);
    }
} 


//主函数调用send_pulse()和measure_distance()函数,然后将距离distance输出到串口。
void main()
{
    while(1)
    {
        send_pulse(); //发送超声波
        measure_distance(); //测量距离
        printf("Distance: %d cm\n", distance); //输出距离
        delay_ms(200); //延时200毫秒
    }
}

猜你喜欢

转载自blog.csdn.net/k1419197516/article/details/123767007