树莓派练习程序(超声波测距)

本文介绍如何使用树莓派和HC-SR04超声波模块进行距离测量。通过WiringPi库和GPIO控制,实现了超声波信号的发送与接收,并计算返回时间以确定距离。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近弄了块树莓派,业余研究研究。

超声波模块用的是HC-SR04,一共四个引脚,如下图:

树莓派的引脚如下图:

我们将Vcc连接物理接口2,Trig连接物理接口38,Echo连接物理接口40,Gnd连接物理接口39。

实物连接如下图:

 

编程使用WiringPi库,使用wpi引脚编码方式控制GPIO。

代码如下:

#include <wiringPi.h>
#include <stdio.h>
#include <sys/time.h>

#define Trig    28
#define Echo    29

void ultraInit(void)
{
    pinMode(Echo, INPUT);
    pinMode(Trig, OUTPUT);
}

float disMeasure(void)
{
    struct timeval tv1;
    struct timeval tv2;
    long start, stop;
    float dis;

    digitalWrite(Trig, LOW);
    delayMicroseconds(2);

    digitalWrite(Trig, HIGH);
    delayMicroseconds(10);      //发出超声波脉冲
    digitalWrite(Trig, LOW);
    
    while (!(digitalRead(Echo) == 1))
        ;
    gettimeofday(&tv1, NULL);           //获取当前时间

    while (!(digitalRead(Echo) == 0))
        ;
    gettimeofday(&tv2, NULL);           //获取当前时间

    start = tv1.tv_sec * 1000000 + tv1.tv_usec;   //微秒级的时间
    stop  = tv2.tv_sec * 1000000 + tv2.tv_usec;

    dis = (float)(stop - start) / 1000000 * 34000 / 2;  //求出距离

    return dis;
}

int main(void)
{
    float dis;

    if (wiringPiSetup() == -1) { //when initialize wiring failed,print messageto screen
        printf("setup wiringPi failed !");
        return 1; 
    }

    ultraInit();
    
    while (1) {
        dis = disMeasure();
        printf("distance = %0.2f cm\n", dis);
        delay(1000);
    }

    return 0;
}

 结果如下图:

参考:

http://blog.youkuaiyun.com/jcdjx/article/details/27313345

http://blog.youkuaiyun.com/xdw1985829/article/details/39580401/

转载于:https://www.cnblogs.com/tiandsp/p/8325798.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值