美文网首页
超声波测距的代码

超声波测距的代码

作者: liamu | 来源:发表于2020-03-04 08:33 被阅读0次

连接5V和GND,超声波模块的Trig和Echo引脚可以连接至树莓派的任意GPIO引脚,连线方式和我们的不一样也没关系,记住Trig和Echo引脚对应的BCM引脚编码

C语言版

#include <wiringPi.h>  
#include <stdio.h>  
#include <sys/time.h>  
  
#define Trig    3 
#define Echo    4 
  
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;  
}

编译命令:
gcc -Wall -o disMeasure chao.c -lwiringPi

Python版

#coding=utf-8
#导入 GPIO库
import RPi.GPIO as GPIO
import time
  
#设置 GPIO 模式为 BCM
GPIO.setmode(GPIO.BCM)
  
#定义 GPIO 引脚
GPIO_TRIGGER = 23
GPIO_ECHO = 22
  
#设置 GPIO 的工作方式 (IN / OUT)
GPIO.setup(GPIO_TRIGGER, GPIO.OUT)
GPIO.setup(GPIO_ECHO, GPIO.IN)
  
def distance():
    # 发送高电平信号到 Trig 引脚
    GPIO.output(GPIO_TRIGGER, True)
  
    # 持续 10 us 
    time.sleep(0.00001)
    GPIO.output(GPIO_TRIGGER, False)
  
    start_time = time.time()
    stop_time = time.time()
  
    # 记录发送超声波的时刻1
    while GPIO.input(GPIO_ECHO) == 0:
        start_time = time.time()
  
    # 记录接收到返回超声波的时刻2
    while GPIO.input(GPIO_ECHO) == 1:
        stop_time = time.time()
  
    # 计算超声波的往返时间 = 时刻2 - 时刻1
    time_elapsed = stop_time - start_time
    # 声波的速度为 343m/s, 转化为 34300cm/s。
    distance = (time_elapsed * 34300) / 2
  
    return distance
  
if __name__ == '__main__':
    try:
        while True:
            dist = distance()
            print("Measured Distance = {:.2f} cm".format(dist))
            time.sleep(1)
  
        # Reset by pressing CTRL + C
    except KeyboardInterrupt:
        print("Measurement stopped by User")
        GPIO.cleanup()

相关文章

  • Micropython 飞控 驱动 1.HC-SR04

    一、介绍HC-SR04是一款通过超声波测距的模块 二、代码

  • laser assit AF技术

    激光辅助对焦在单反上的前生是潜艇的超声波测距系统。 超声波测距原理就是发出一组超声波,接收器根据超声波的返回时间来...

  • 超声波测距的代码

    连接5V和GND,超声波模块的Trig和Echo引脚可以连接至树莓派的任意GPIO引脚,连线方式和我们的不一样也没...

  • 超声波测距案例讲解

    超声波测距是通过超声波传感器测量距离的过程。 下面我们来讲解一下超声波测距实验的过程: 一、实验元件 Aduino...

  • 米思齐分享-02-超声波测距案例讲解

    超声波测距是通过超声波传感器测量距离的过程。 下面我们来讲解一下超声波测距实验的过程: 一、实验元件 Aduino...

  • 2018-10-09

    项目四:超声波测距原理 首先先来了解下超声波测距的原理: 人们可以听到的声音的频率为20Hz~2KHz,也就是可...

  • 无线控制单片机5-使用手机无线超声波测距

    用超声波模块来测距是非常方便有效的方式,而且精度比较高。超声波测距模块就是通过测量声波从发出到反射回来的时间来...

  • 【Arduino基础教程】HC-SR04超声波测距模块

    超声波测距原理:通过超声波发射装置发出超声波,根据接收器接到超声波时的时间差就可以知道距离。 模块特征 HC-SR...

  • 树莓派3 + HC-SR04超声波测距模块 - 2

    超声波测距模块 HC-SR04 非常易于使用,这篇文章就介绍 HC-SR04 的测距原理、树莓派如何与 HC-SR...

  • 中级班 3 超声波传感器

    第六次课超声波传感器 1.超声波传感器 超声波测距模块是用来测量距离的一种产品,通过发送和就接收超声波,利用时间差...

网友评论

      本文标题:超声波测距的代码

      本文链接:https://www.haomeiwen.com/subject/hylplhtx.html