您的位置首页百科知识

树莓派之HC-SR04超声波测距

树莓派之HC-SR04超声波测距

的有关信息介绍如下:

树莓派之HC-SR04超声波测距

今天想讲一讲树莓派与超声波传感器的使用。关于超声波传感器,种类很多,小编用的传感器是某宝上买的,教学和小实验以及一些常见应用的传感器

一般而言,超声波感应器主要有四种接头:

VCC:接正极电源

GND:接负极电源

Trig:接控制数据,属于输入端口

Echo:接收端,属于输出端口。

其实很多传感器主要就是VCC,GND和数据接头,前两者为传感器提供能量,数据接头则负责数据传输,只是这种数据是比较简单的0和1的传输。通过这两者来代表不同的状态。

下面开始讲解如何将传感器与树莓派建立连接。主要接口是5v,GND,GPIO17,GPIO18

(接线白话:外排,第一针,第三针,第六针;内排,第六针。注意颜色对应)

#!/bin/env python

# -*- coding:utf-8 -*-

# -------------------------------

import time

import RPi.GPIO as GPIO

import datetime as dt

# 初始化

# 需要注意输出与输入的接口

# 17为发射,18为接收

GPIO.setmode(GPIO.BCM)

GPIO.setup(17, GPIO.OUT)

GPIO.setup(18, GPIO.IN)

GPIO.output(17, False)

while 1:

time.sleep(1)

# IO 触发,给10us的高电平

# 模块自动发送8个40khz的方波

GPIO.output(17, GPIO.HIGH)

time.sleep(0.00001)

GPIO.output(17, GPIO.LOW)

# 获取发射完毕时间

t1 = time.time()

# 未接收为False,循环检查开始接受点

# 转为True为开始接受

while GPIO.input(18) == False:

pass

# 循环检查开始接收,转为False。则为接受完毕

while GPIO.input(18):

pass

# 获取接受完毕时间

t2 = time.time()

# 计算发送与接收时间差

t3 = t2-t1

print t3

# 空气中1个标准大气压在温度15度时速度为340m/s

# 所以按照一秒钟34000厘米计算

# 根据硬件文档,该模块探测距离在2-400cm之间

# 测试范围的时间间隔应该为0.000117到0.023529

# 为了方便取值自行变化一点

if 0.0235 > t3 > 0.00015:

distance = t3*34000/2

print 'Distance: %f cm' % distance

else:

print 'Null'

通过上述代码可以看出,超生波测距模块主要是根据,超声波发出到设备接受超声波回音的时间差,然后按照室温、压强与声音传播之间的关系来算出目标离传感器的距离。小编亲测,有一定的误差,需要根据具体的情况进行相应的算法调整。不过这不影响,大家了解了超声波测距的原理即可。