HC-SR04超声波传感器使用

2023-05-16

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、关于HC-SR04
  • 二、使用步骤
    • 1.确保驱动已经安装
    • 2.安装GPIO工具
    • 3.安装GPIO的Python支持
    • 4.Python3代码
  • 总结


前言

最近在做一个项目,需要用到超声波传感器HC-SR04,经过一些摸索终于在OrangePi上成功用起来了。


一、关于HC-SR04

在这里插入图片描述

这款超声波传感器可提供 2cm-400cm 的非接触式距离感测功能,测距精度可达高到的非接触式距离感测功能,模块包括超声波发射器、接收器与控制电路。
HC-SR04共有4个针脚分别是VCC(接5V/3.3V),GND(接地),Trig(输出/SCL/TX),Echo(输入/SDA/RX);需要注意的是最好把机器断电再接线,然后多检查几次防止接错短路烧毁设备。
这里我接的是5V,GND,SDA,SCL分别对应OrangePi的2,6,3,5,共4个GPIO插针。

二、使用步骤

不同的设备,像树莓派和OrangePi可能有着不同的GPIO排列,这篇文章是适用于OrangePi的,也是适用于树莓派和其它拥有GPIO接口的设备。代码采用Python3编写,通俗易懂,如果用在单片机上可能要使用C语言编写。

1.确保驱动已经安装

这篇文章不过多地描述驱动,如果驱动没有安装请按照官方提供的方法安装下驱动,如果已经安装请忽略。

2.安装GPIO工具

打开一个shell输入以下命令,如果正常显式,就说明工具已经安装。

#读取所有gpio插口状态
gpio readall

 +------+-----+----------+------+---+OrangePi 4+---+---+--+----------+-----+------+
 | GPIO | wPi |   Name   | Mode | V | Physical | V | Mode | Name     | wPi | GPIO |
 +------+-----+----------+------+---+----++----+---+------+----------+-----+------+
 |      |     |     3.3V |      |   |  1 || 2  |   |      | 5V       |     |      |
 |   64 |   0 | I2C2_SDA |   IN | 0 |  3 || 4  |   |      | 5V       |     |      |
 |   65 |   1 | I2C2_SCL |   IN | 0 |  5 || 6  |   |      | GND      |     |      |
 |  150 |   2 |     PWM1 |   IN | 0 |  7 || 8  | 1 | IN   | I2C3_SCL | 3   | 145  |
 |      |     |      GND |      |   |  9 || 10 | 1 | ALT2 | I2C3_SDA | 4   | 144  |
 |   33 |   5 | GPIO1_A1 |   IN | 0 | 11 || 12 | 1 | IN   | GPIO1_C2 | 6   | 50   |
 |   35 |   7 | GPIO1_A3 |   IN | 0 | 13 || 14 |   |      | GND      |     |      |
 |   92 |   8 | GPIO2_D4 |   IN | 0 | 15 || 16 | 0 | IN   | GPIO1_C6 | 9   | 54   |
 |      |     |     3.3V |      |   | 17 || 18 | 0 | IN   | GPIO1_C7 | 10  | 55   |
 |   40 |  11 | SPI1_TXD | ALT2 | 1 | 19 || 20 |   |      | GND      |     |      |
 |   39 |  12 | SPI1_RXD | ALT2 | 1 | 21 || 22 | 0 | IN   | GPIO1_D0 | 13  | 56   |
 |   41 |  14 | SPI1_CLK | ALT3 | 1 | 23 || 24 | 1 | ALT3 | SPI1_CS  | 15  | 42   |
 |      |     |      GND |      |   | 25 || 26 | 0 | IN   | GPIO4_C5 | 16  | 149  |
 |   64 |  17 | I2C2_SDA |   IN | 0 | 27 || 28 | 0 | IN   | I2C2_SCL | 18  | 65   |
 |      |     |  I2S0_RX |      |   | 29 || 30 |   |      | GND      |     |      |
 |      |     |  I2S0_TX |      |   | 31 || 32 |   |      | I2S_CLK  |     |      |
 |      |     | I2S0_SCK |      |   | 33 || 34 |   |      | GND      |     |      |
 |      |     | I2S0_SI0 |      |   | 35 || 36 |   |      | I2S0_SO0 |     |      |
 |      |     | I2S0_SI1 |      |   | 37 || 38 |   |      | I2S0_SI2 |     |      |
 |      |     |      GND |      |   | 39 || 40 |   |      | I2S0_SI3 |     |      |
 +------+-----+----------+------+---+----++----+---+------+----------+-----+------+
 | GPIO | wPi |   Name   | Mode | V | Physical | V | Mode | Name     | wPi | GPIO |
 +------+-----+----------+------+---+OrangePi 4+---+---+--+----------+-----+------+

如果命令正常出结果说明GPIO工具已经安装,可以进行下一步了,如果没有需要先安装GPIO工具。

sudo apt update
sudo apt install git
git clone https://github.com/orangepi-xunlong/wiringOP
cd wiringOP
./build clean
./build

编译完成输入gpio readall来测试下是否成功了,如果成功了就进入下一步,没有成功就检查错误原因。

3.安装GPIO的Python支持

这篇文章演示代码是在Python3上实现的,所以需要GPIO的Python支持。执行以下命令就可以在OrangePi设备上安装GPIO包了

sudo pip3 install --upgrade OPi.GPIO

安装完成后就可以编写Python代码测试了。

4.Python3代码

import time

import OPi.GPIO as GPIO
import orangepi.pi4

BOARD = orangepi.pi4.BOARD
GPIO.setmode(BOARD)

# 需要操作的针脚
trig = 5  # out 对应针脚5 SCL
echo = 3  # in 对应针脚3 SDA

# 设置输入输出PIN,trig输出,echo输入
GPIO.setup(trig, GPIO.OUT)
GPIO.setup(echo, GPIO.IN)


def start_test():
    # 发送trig信号,持续20us的方波脉冲,说明书说至少10us的脉冲时间,实际上机测试会出bug,改为20us就ok
    GPIO.output(trig, True)
    time.sleep(0.00002)
    GPIO.output(trig, False)

    # 等待低电平结束,然后记录时间
    while GPIO.input(echo) == 0:
        pass
    start_stamp = time.time()

    # 等待高电平结束,然后记录时间
    while GPIO.input(echo) == 1:
        pass
    end_stamp = time.time()

    pulse_duration = end_stamp - start_stamp
    # V=331+0.607T T是一个标准大气压下温度(这里采用室温25℃,其它温度有一定差别,可根据实际需求定制)
    #实际上音速的计算远比上面的方法复杂,特别是温度和大气压都是不小的影响因素,这里我们不需要那么高精度
    #在一个标准大气压下,25℃室温足够了,也可以依据自身所处环境量身定制。
    distance = pulse_duration * 346.175 * 100 / 2
    distance = round(distance, 2)
    # print("Distance:{}cm".format(distance))
    return distance


try:
    while True:
        distance = start_test()
        print("Distance:{}cm".format(distance))
        time.sleep(0.1)
except KeyboardInterrupt:
    GPIO.cleanup()

测试结果打印:
Distance:268.95cm
Distance:268.94cm
Distance:265.98cm
Distance:270.97cm
Distance:271.63cm
Distance:268.18cm
Distance:272.24cm
Distance:268.65cm
Distance:273.08cm
Distance:266.97cm
Distance:266.9cm
以上是对着天花板的时候测出的实际距离。我用手遮挡的话结果如下:
Distance:16.63cm
Distance:11.34cm
Distance:11.2cm
Distance:5.15cm
Distance:11.46cm
Distance:6.37cm
Distance:5.03cm
Distance:6.3cm
Distance:10.78cm
Distance:5.41cm
Distance:6.17cm
Distance:5.45cm
Distance:5.74cm
Distance:10.87cm
Distance:10.78cm
Distance:11.69cm
Distance:6.13cm
Distance:5.95cm
Distance:6.13cm
Distance:6.07cm
Distance:6.26cm
Distance:5.67cm
Distance:5.08cm
Distance:10.9cm
Distance:11.37cm
Distance:6.3cm
Distance:5.03cm
Distance:10.83cm
Distance:37.39cm
整体还是蛮准的,至少用在扫地机器人上足够了。


总结

1、这里树莓派的GPIO插针和OrangePi的GPIO插针排列差不多,他俩的配置是差不多的。
2、理论上不一定非得SDA和SCL,只要支持GPIO输入输出的插针都可以。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

HC-SR04超声波传感器使用 的相关文章

随机推荐

  • SpringBoot web开发 (3) 使用 mysql-jpa 登录验证

    3 使用 mysql jpa 构造 数据库实体类型 添加maven依赖 lt dependency gt lt groupId gt org springframework boot lt groupId gt lt artifactId
  • JAVA+Netty根据二级域名实现多租户内网穿透功能【设计实践】

    目录 背景 实践 项目结构 原理分析 代码实现 cc common项目 cc server项目 cc client项目 Nginx配置 使用 启动服务端 启动客户端 背景 上一篇JAVA基于Netty实现内网穿透功能 设计实践 殷长庆的博客
  • C++:stringstream格式化字符串

    C语言通过snprintf对字符串进行格式化 格式化前需要首先对字符串的长度预估 如果长度大于了字符数组的大小 格式化字符串会被截断 C 通过stringstream对字符串进行格式化 include lt sstream gt inclu
  • Ubuntu:apt软件包管理工具

    apt是Advanced Packaging Tool 是Ubuntu的安装包管理工具 主要的几个操作为 1 安装软件包 sudo apt install 软件包名 2 卸载软件包 而保留软件的配置文件 sudo apt remove 软件
  • CMake:message输出消息

    可以在执行cmkae的时候使用message输出信息 xff1a message lt mode gt 34 message text 34 其中mode有如下几个选项 xff08 优先级由低到高 xff09 xff1a TRACE xff
  • C++(11):通过underlying_type获取/输出枚举类的值

    C 11 枚举类 风静如云的博客 CSDN博客 c 11 枚举类 介绍了枚举类使用的好处 不过如果直接输出枚举类的值是不行的 include lt iostream gt using namespace std int main enum
  • gitlab-ce安装

    GitLab是一个利用 Ruby on Rails 开发的开源应用程序 xff0c 实现一个自托管的Git项目仓库 xff0c 可通过Web界面进行访问公开的或者私人项目 GitLab拥有与Github类似的功能 xff0c 能够浏览源代码
  • WSL2安装到其它目录下

    提示 xff1a 文章写完后 xff0c 目录可以自动生成 xff0c 如何生成可参考右边的帮助文档 文章目录 前言一 WSL2是什么 xff1f 二 下载Ubuntu20 041 打开Mocrosoft Store2 导出发行版 总结 前
  • 解决Ubuntu20.04安装CUDA-11.2报256错误的问题

    提示 xff1a 文章写完后 xff0c 目录可以自动生成 xff0c 如何生成可参考右边的帮助文档 文章目录 前言一 报错的原因是什么 xff1f 二 安装cuda 11 2三 安装nvidia driver 455四 再装cuda 11
  • ARM整形算力计算

    提示 xff1a 文章写完后 xff0c 目录可以自动生成 xff0c 如何生成可参考右边的帮助文档 文章目录 前言一 RK3399规格 xff1f 二 开始计算1 参考2 计算 总结 前言 之前做人工智能使用RK3399的CPU去推理 x
  • WSL2使用USB设备

    提示 xff1a 文章写完后 xff0c 目录可以自动生成 xff0c 如何生成可参考右边的帮助文档 文章目录 前言一 WSL2是什么 xff1f 二 编译内核1 查看自己的内核2 准备工作3 下载适合自己的内核版本4 开始编译4 使用内核
  • cron的正确食用方法

    提示 xff1a 文章写完后 xff0c 目录可以自动生成 xff0c 如何生成可参考右边的帮助文档 文章目录 前言一 cron是什么 xff1f 二 使用步骤1 字段含义2 加强学习3 crontab命令4 工作原理5 其它用法6 补充内
  • windows 下 mongodb 导入导出collection(json、csv)

    1 下载mongodb xff0c 并安装 https www mongodb com dr fastdl mongodb org win32 mongodb win32 x86 64 2008plus ssl 3 4 0 signed m
  • 【WSL2启用systemd支持(一个配置即可)】

    提示 xff1a 文章写完后 xff0c 目录可以自动生成 xff0c 如何生成可参考右边的帮助文档 文章目录 前言一 systemd是什么 xff1f 二 备份数据1 归档2 备份分支 三 准备工作1 内核升级 四 修改配置总结 前言 很
  • WSL2+Systemd支持度测试

    提示 xff1a 文章写完后 xff0c 目录可以自动生成 xff0c 如何生成可参考右边的帮助文档 文章目录 前言一 systemd是什么 xff1f 二 开始测试1 Docker2 rsyslog3 systemd timesyncd4
  • 部分解决Ubuntu安装X11VNC需要自动登录的问题

    提示 xff1a 文章写完后 xff0c 目录可以自动生成 xff0c 如何生成可参考右边的帮助文档 文章目录 前言一 GDM是什么 xff1f 二 VNC绑定GDM账户1 vnc绑定gdm登录 总结 前言 Ubuntu18 04 Ubun
  • Linux watchdog配置

    提示 xff1a 文章写完后 xff0c 目录可以自动生成 xff0c 如何生成可参考右边的帮助文档 文章目录 前言一 watchdog是什么 xff1f 1 硬件看门狗2 软件看门狗 二 使用步骤1 硬件看门狗2 软件看门狗 总结 前言
  • Ubuntu内核打开硬件watchdog

    提示 xff1a 文章写完后 xff0c 目录可以自动生成 xff0c 如何生成可参考右边的帮助文档 文章目录 前言一 watchdog是什么 xff1f 1 硬件看门狗2 软件件看门狗 二 编译内核1 添加配置2 开始编译3 安装内核4
  • explicit specialization of non-template

    提示 xff1a 文章写完后 xff0c 目录可以自动生成 xff0c 如何生成可参考右边的帮助文档 文章目录 前言一 C 43 43 模板是什么 xff1f 二 错误原因1 主模板2 解决方法 总结 前言 相信很多人在使用C 43 43
  • HC-SR04超声波传感器使用

    提示 xff1a 文章写完后 xff0c 目录可以自动生成 xff0c 如何生成可参考右边的帮助文档 文章目录 前言一 关于HC SR04二 使用步骤1 确保驱动已经安装2 安装GPIO工具3 安装GPIO的Python支持4 Python