HC-SR04超声波传感器使用

news2024/11/28 12:45: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输入输出的插针都可以。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/153086.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

誉辰智能拟科创板上市:欲募资4亿元,毛利率、研发费用率均下滑

近日,深圳市誉辰智能装备股份有限公司(下称“誉辰智能”)在上海证券交易所更新招股书(申报稿),披露时间为2023年1月7日,准备在科创板上市。据贝多财经了解,誉辰智能曾于2022年6月29日…

解决SpringBoot项目整合Sharding-JDBC后启动慢的问题

一、问题描述线上某一项目以jar包的方式发布,需要健康检查,若15次健康检查页面状态均为非200则健康检查失败,就会导致tomcat服务加载失败。前几天版本迭代,发布该项目时,因最后一次健康检查的时间比启动完成时早&#…

练习时长两年半的tcp三次握手

1、TCP是什么?TCP是面向连接的协议,它基于运输连接来传送TCP报文段,TCP运输连接的建立和释放,是每一次面向连接的通信中必不可少的过程。TCP运输连接有以下三个阶段:建立TCP连接,也就是通过三报文握手来建立…

Oracle打补丁

oralce打补丁 打补丁前提: 一、备份数据库 二、将oracle服务全部停掉 1、查看opatch的版本号 1.1、环境变量配置ORACLE_HOME 1.2、运行opatch version命令,查看opatch的版本号 备注:网上查看opatch的版本号对应的oracle是否匹配,…

【分治策略】查询中位数最接近点对

查询中位数给定线性序集中n个元素和一个整数k 【k(n1)/2】,要求找出这n个元素中第k小的元素,即找中位数。线性序列没有排序,没有重复值。已知快速排序划分时一个划分基准数的位置在确定后,在之后排序中是不会变的。利用此特性,以下…

dataphin如何使用zip文件,离线安装python第三方包?

好久没写文章啦,快过年了啦,打工人要回家啦 背景介绍: 每次在dataphin里使用pandas的时候,都要pip install pandas。dataphin需要下载pandas安装包,比较费时。总而言之,这种方式慢。 所以我要在dataphin的…

【手写 Vue2.x 源码】第十四篇 - 生成 ast 语法树 - 模板解析

一,前言 上篇,主要介绍了生成 ast 语法树-正则说明部分,涉及以下几个点: 简要说明了 HTML模板的解析方式对模板解析相关正则说明和测试 本篇,生成 ast 语法树-代码实现 二,模板解析 模板解析的方式&…

22. 听说你想要用爬虫采集我的手机号?哎 ~ 我展示用的是图片

本篇博客我们实现图片渲染手机号码案例,用于防止爬虫直接采集文字信息。 爬虫训练场 本案例实现的效果如下所示 文章目录bootstrap5 实现名片样式卡片补充数据生成逻辑生成用户 5 个汉字的昵称调用头像 API,生成图片将手机号码生成图片bootstrap5 实现名…

菜鸡二次封装element中table表单

实现效果如下封装的table表单<template><el-table:span-method"arraySpanMethod":header-cell-style"rowClass":cell-style"cellStyle":data"tableData"style"width: 100%; height: 100%">//暂无数据展示<te…

汤姆斯的天堂梦(C++,Dijkstra)

题目描述 汤姆斯生活在一个等级为 000 的星球上。那里的环境极其恶劣&#xff0c;每天 121212 小时的工作和成堆的垃圾让人忍无可忍。他向往着等级为 NNN 的星球上天堂般的生活。 有一些航班将人从低等级的星球送上高一级的星球&#xff0c;有时需要向驾驶员支付一定金额的费…

【跟月影学可视化】学习笔记 41 篇(完结)

说明 【跟月影学可视化】专栏学习笔记。 个人学习笔记源码&#xff1a;https://github.com/kaimo313/visual-learning-demo 一共做了 162 个学习示例以及 41 篇博客学习笔记&#xff0c;要深入学习该课程请支持正版&#xff0c;个人笔记仅供参考。 笔记目录 【图形基础篇…

什么是无源相干定位系统?

无源定位&#xff08;Passive Localization&#xff09;不通过发射信号来探测目标的位置&#xff0c;而是接收目标的有意、无意辐射或反射信号来实现对侦察目标的探测、定位与追踪。接收的信号可以是目标直接辐射的信号&#xff0c;也可以是外辐射源照射到目标后反射或散射的信…

网站关键词怎么优化排名(网站关键词通常可以选择哪些词)

网站核心关键词的选取需要具备哪些条件 在对网站优化的过程中&#xff0c;肯定少不了对网站关键词的选取&#xff0c;关键词的选择又是网站优化中十分重要的一步&#xff0c;那么网站在选择关键词的过程中需要遵循哪些原则呢&#xff1f;关于这个问题老张带你了解一下。 1、首…

wav文件格式分析与详解

wav文件格式分析与详解WAV文件是在PC机平台上很常见的、最经典的多媒体音频文件,最早于1991年8月出现在Windows 3.1操作系统上,文件扩展名为WAV,是WaveFom的简写,也称为波形文件,可直接存储声音波形,还原的波形曲线十分逼真。WAV文件格式简称WAV格式是一种存储声音波形的数字音…

Wijmo 2022 v2 JavaScript UI Crack

Wijmo 2022 v2 采集 by Ω578867473 添加对 Angular 14 和 React 18 的支持以及对 FlexGrid 和 FlexChart 的改进。特征 Angular 14 支持——您今天就可以开始将 Angular 14 应用程序与 Wijmo 结合使用。Wijmo 提供了大量快速、灵活的 Angular 组件&#xff0c;每个组件都有丰富…

【学Vue就跟玩一样】组件-非单文件组件的使用

一&#xff0c;什么是组件实现应用中局部功能代和资源的集合&#xff08;简单来说就是将html&#xff0c;js&#xff0c;css&#xff0c;资源整合起来的一个小盒子&#xff09;理解&#xff1a;用来实现局部(特定)功能效果的代码集合为什么&#xff1a;一个界面的功能很复杂作用…

SD卡损坏了怎么办?sd卡恢复,80%的用户都试过这些方法

SD卡作为一种外部存储设备&#xff0c;多用在数据相机、监控、手机、无人机等设备中&#xff0c;可以帮我们保存很多数据。 但是SD卡也跟其他设备一样&#xff0c;容易发生数据丢失的情况。如果SD卡损坏了&#xff0c;或者我们把里面的数据误删或者格式化&#xff0c;sd卡恢复…

MySQL--什么情况下不建议使用join查询

关于join 当需要查询两个表的交集、并集等数据时&#xff0c;除了嵌套子查询的方式外&#xff0c;还可以使用join的方式提升性能。对于MySQL的join语句&#xff0c;需要两个最基础的“角色”&#xff1a;主表即驱动表&#xff0c;关联表即驱动表。join描述的就是驱动表与被驱动…

云服务器怎样搭建静态网站?

先买好域名和云服务器&#xff0c;然后把云服务器的ip地址和域名解析到一起。 然后登陆云服务器&#xff0c;安装Nginx 我的软件环境是 CentOS 1、安装 Nginx 在 CentOS 上&#xff0c;可直接使用 yum 来安装 Nginx&#xff08;安装时间稍微有点长&#xff0c;安装过程中代码会…

Linux应用编程---10.信号量

Linux应用编程—10.信号量 ​ 信号量用于任务间的同步!简单来理解&#xff0c;信号量是一个被内核维护的整数&#xff0c;这个整数一般是“大于等于零”的&#xff0c;我们对这个信号量的操作一般为&#xff1a;将信号量设置一个值、发布(加上一个信号量)、消耗(减去一个信号量…