失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 树莓派和HC-SR04模块实现超声波测距

树莓派和HC-SR04模块实现超声波测距

时间:2020-02-02 20:23:00

相关推荐

树莓派和HC-SR04模块实现超声波测距

文章目录

一、HC-SR04简介二、树莓派远程连接1.系统准备2.软件准备3. 烧录系统4. 使用ssh连接电脑热点5.VNC远程控制连接树莓派桌面 三、树莓派操作四、总结

一、HC-SR04简介

HC-SR04有4 个引脚, 2 个电源引脚(Vcc 、GND)和 2 个控制引脚(Trig、Echo)

Vcc 和 Gnd 接 3.3v DC 电源,但不推荐用独立电源给它供电,可以接树莓派的引脚给它供电。

Trig 引脚用来接收来自树莓派的控制信号。接任意 GPIO 口。

Echo 引脚用来发送测距结果给树莓派。接任意 GPIO 口。

HC-SR04 的测距过程

树莓派向 Trig 脚发送一个持续 10us 的脉冲信号。HC-SR04 接收到树莓派发送的脉冲信号,开始发送超声波 ,并把 Echo置为高电平。当 HC-SR04 接收到返回的超声波时,把 Echo 置为低电平。

可见, 超声波从发射到返回经过的时间,就是Echo高电平持续的时间

二、树莓派远程连接

1.系统准备

下载树莓派系统镜像(两种渠道)

树莓派官方的下载烧录整合工具Raspberry Pi Imager

/software/

前的旧版系统镜像Index of /raspbian_full/images

/raspbian_full/images/

2.软件准备

Putty (SSH通过WIFI建立远程连接)VNC-Viewer(远程桌面软件)

3. 烧录系统

将SD卡插入读卡器,再插入电脑,首先格式化盘符

打开Raspberry Pi Imager选择稍旧的系统进行烧录(笔者使用最新镜像系统烧录完的时候无法通过ssh连接热点)

或者下载上面提供的旧版系统镜像的zip文件,解压后选择.img镜像文件,通过Imager烧录到SD卡中

烧录完成后,SD卡将会变成一个只有256MB的命名为boot的盘符。

4. 使用ssh连接电脑热点

在电脑文件开启后缀的情况下在boot盘中创建这样两个文件:

ssh空白文件和wpa_supplicant.conf文件(在进入树莓派系统设置ssh自动开启之前,树莓派每次开机后都会自动删除这两个文件,所以可以在电脑上保存这两个文件备用)

打开并编写wpa_supplicant.conf文件

country=CNctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdevupdate_config=1network={ssid="xxxxx"psk="xxxxx"key_mgmt=WPA-PSKpriority=1}

其中ssid填入需要连接网络名称,在psk后的双引号中输入网络密码。连接的网络不要使用中文名。为便于操作可以使用电脑热点,但需要在设置中调整网络频带为2.4GHz。如果使用手机热点,也需调整网络频带为2.4GHz,且电脑要同时连接手机热点才能在电脑上远程登入树莓派。

取下SD卡,将SD卡插入树莓派,接电启动,等待树莓派开机并连接热点,1/8表示成功连接上

右键打开设置,将设备名称为raspberry的IP地址复制下来

打开 Putty,在Host Name中粘贴复制下来的IP地址,点击open

在弹出来的界面输入用户名和密码

输入sudo raspi-config进入树莓派的系统设置,将VNC的服务开启,这样就可以远程链接树莓派的桌面。

5.VNC远程控制连接树莓派桌面

打开VNC Viewer,输入之前复制的树莓派IP地址

输入用户名pi和树莓派初始密码raspberry,即可远程控制树莓派的桌面。

三、树莓派操作

在桌面建立两个文件

main.py

import RPi.GPIO as GPIOfrom pin_dic import pin_dicimport timeclass HC_SR04(object):def __init__(self, pin_trig, pin_echo):self.pin_trig = pin_trigself.pin_echo = pin_echoGPIO.setup(self.pin_trig, GPIO.OUT)GPIO.setup(self.pin_echo, GPIO.IN)self.time_tol = 3 # 设置时间间隔确保正常工作范围在3s内def get_distance(self):s_time = time.time() # 当前时刻起开始时间# 在TRIG引脚上输出一个正向脉冲GPIO.output(self.pin_trig, 0) # 开始为低电平time.sleep(0.000002)GPIO.output(self.pin_trig, 1) # trig引脚改为高电平time.sleep(0.00001)GPIO.output(self.pin_trig, 0) # 有设置为低电平# 次阶段可以视为通知模块----我开始工作了!!!!准备接收# 等待ECHO引脚上高电平出现while GPIO.input(pin_echo) == 0:if time.time() - s_time > self.time_tol:return False# 跳出循环就是有高电平# 记录此时高电平出现时间time1 = time.time() # 时间间隔time1# 等待ECHO引脚上高电平结束while GPIO.input(pin_echo) == 1:if time.time() - s_time > self.time_tol:return False# 跳出高低ping# 记录高电平结束时间time2 = time.time()# 计算ECHO引脚上高电平持续时间during = time2 - time1# 计算距离 单位cmdis = during * 344 / 2 * 100return dis # 整个函数方法就是用来测距def destory(self):GPIO.cleanup()if __name__ == "__main__":pin_trig = pin_dic['G20'] # 板子就是38和40pin_echo = pin_dic['G21']GPIO.setmode(GPIO.BOARD)m_HC_SR04 = HC_SR04(pin_trig, pin_echo) # 一个对象及其属性try:# 主循环while True:dis = m_HC_SR04.get_distance()if dis:print('distance: %.2f cm' % (dis))print(' ')else:print("Error")time.sleep(1)except KeyboardInterrupt:print('\n Ctrl + C QUIT')finally:m_HC_SR04.destory()

引脚文件pin_dic.py

pin_dic = {'SDA':3,'SLC':5,'G4' :7,'G17':11,'G27':13,'G22':15,'MOSI':19,'MISO':21,'SCL':23,'IDSD':27,'G5':29,'G6':31,'G13':33,'G19':35,'G26':37,'TXD':8,'RXD':10,'G18':12,'G23':16,'G24':18,'G25':32,'CE0':24,'CE1':26,'IDSC':28,'G12':32,'G16':36,'G20':38,'G21':40}

编写完并保存后打开终端输入以下命令:

python main.py(编译并运行该文件)

在电脑上即可看见运行效果。

四、总结

本次实践项目我负责用树莓派来完成HC-SR04模块的测距部分,此部分较为简单,相当于验证性实验,主要在环境的配置上需要注意,在实验过程中,用Raspberry Pi Imager烧录自带的新版本镜像后,SSH连接始终连接不上,后面到官网下载了旧版本镜像后便解决了问题。

如果觉得《树莓派和HC-SR04模块实现超声波测距》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。