第五篇、基于Arduino uno,获取超声波(HC04)传感器的距离数据——结果导向

0、结果

说明:先来看看串口调试助手显示的结果,显示的是一个距离值,如果是你想要的,可以接着往下看。

1、外观

说明:虽然超声波传感器形态各异,但是原理和代码都是适用的。

2、连线

说明:只需要连接四根线。
uno————超声波传感器

    5V--------------VCC
GND--------------GND

      3--------------Trig
      4--------------Echo

3、源程序

说明:采用非阻塞方式编写,一定时间检测一次距离值,对距离值进行了简单的滤波,并将对应功能进行函数化,方便移植。

/*
  VCC------5V
  GND------GND
  Trig-----3
  Echo-----4
*/
/****************************************hc04 part****************************************/
#define hc04TimeOut 100                                  //Check once in 50 milliseconds       
#define filterNumber 3                                   //Number of filtration
const int Trig = 3;                                      //Connect the corresponding ultrasonic Angle
const int Echo = 4;                                      //Connect the corresponding ultrasonic Angle

unsigned long hc04Times = 0;                             //Record the device running time
int beforeVal = 0;                                       //The previous distance value
int presentVal = 0;                                      //Current distance value
int averageVal = 0;                                      //The average of the distance between one and the other
int diffval = 10;                                        //The difference between the previous distance and the next distance
int frequency = 0;                                       //Number of filtration
double distance, time ;                                  //Find the distance value
/****************************************set up and loop part*********************************/
void setup()
{
  Serial.begin(9600);                                    //Example Initializing serial port communication
  pinMode(Trig, OUTPUT);
  pinMode(Echo, INPUT);                                  //Configure the working mode of the pin
  Serial.println("The distance is :");
}
void loop()
{
  getdata();                                             //Acquisition distance
}
/****************************************hc04 part****************************************/
/*Acquisition distance*/
void getdata() {
  if (millis() - hc04Times >= hc04TimeOut) {              //Check a distance at a certain time
    hc04Times = millis();
    digitalWrite(Trig, LOW);
    delayMicroseconds(2);
    digitalWrite(Trig, HIGH);
    delayMicroseconds(10);                               //Generate a high pulse of 10us to trigger SR04
    digitalWrite(Trig, LOW);
    time = pulseIn(Echo, HIGH);                          //Check the pulse width and note that the return value is microseconds us
    distance = time / 58 ;                               //Calculate the distance. The output distance is measured in centimeters
    filterData();                                          //Filter the distance value

    Serial.print("distance: ");
    Serial.print(averageVal);                            //Print distance value
    Serial.println(" cm");
  }
}
/*Filter the distance value*/
void filterData() {
  if (abs(averageVal - distance) > diffval) {
    if (++frequency >= filterNumber) {
      frequency = 0;
      beforeVal = averageVal;                                //The average is given to the previous value
      presentVal = distance;                                 //Distance value to the current value
      averageVal = beforeVal + (presentVal - beforeVal) / 2; //Find the current distance
    }
  } else {
    beforeVal = averageVal;                                  //The average is given to the previous value
    presentVal = distance;                                   //Distance value to the current value
    averageVal = beforeVal + (presentVal - beforeVal) / 2;   //Find the current distance
    if (averageVal <= 3) {                                   //When the distance is less than 3 centimeters, there's a lot of data, so we set it to 0
      averageVal = 0;
    }
    frequency = 0;                                           //Clears the number of times of the last filter
  }
}

4、注意事项

说明:超声波探测的区域是一个扇形区域。如果从一个短距离到一个比较远的距离,由于超声波会等待波返回,这个时间大概在几十毫秒,对实时性要求高的程序来说,在一定程度上会延迟执行运行。

5、基本原理

超声波传感器是一种利用超声波来测量距离的传感器,其测量原理基于声学原理。

当超声波传感器工作时,它会发出一个高频的声音信号,这个声音信号会转化为超声波,并向目标物体传播。当超声波遇到目标物体后,一部分能量被反射回传感器,传感器会接收到这一部分反射回来的超声波信号,并通过计算信号的往返时间,来确定目标物体与传感器之间的距离。

通常情况下,超声波传感器需要由一个发射器和一个接收器构成,发射器用来产生超声波,接收器用来接收反射回来的超声波,并将其转换成电信号。此外,不同型号的超声波传感器对于距离和精度的测量范围有所区别,一般传感器的测量范围在几厘米到几米不等,其精度也随之而定。超声波传感器主要应用于避障、物体检测、距离测量等领域。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

秒杀系统常见问题—如何避免库存超卖?

大家好&#xff01;我是sum墨&#xff0c;一个一线的底层码农&#xff0c;平时喜欢研究和思考一些技术相关的问题并整理成文&#xff0c;限于本人水平&#xff0c;如果文章和代码有表述不当之处&#xff0c;还请不吝赐教。 以下是正文&#xff01; 先看问题 首先上一串代码 …

Vue.js 比较重要知识点总结一

概述 谈一谈你对 Vue.js 的响应式数据的理解Vue3 出现解决了什么问题&#xff1f;它有哪些优势&#xff1f;Vue3 新特性有哪些vue2 和 vue3 的响应式有什么区别&#xff1f; 谈一谈你对 Vue.js 的响应式数据的理解 Vue 2.x 对象类型&#xff1a;通过 object.defineProperty(…

实时频谱-3.1实时频谱分析仪测量

RSA 测量类型 泰克RSA 可以在频域、时域、调制域和统计域中工作。 频域测量 基本频域测量是实时 RF 数字荧光显示(DPX)频谱显示测量、频谱显示测量和频谱图显示测量功能。 DPX 频谱 DPX 频谱测量对 RSA 发现其它分析仪漏掉的难检信号的能力至关重要。在所有泰克 RSA 中&am…

SAP-MM-内向外向交货单

1、内向&外向交货单概念 外向交货&#xff08;outbound delivery&#xff09;是用在客户与企业之间的交货单&#xff0c;而内向交货&#xff08;inbound delivery&#xff09;则是用在供应商与企业之间的交货单&#xff1b;换言之&#xff0c;外向交货多用于SD 模块&#…

PriorityQueue优先级队列

前言 优先级队列就是在堆的基础上进行改造&#xff0c;那么什么是堆&#xff0c;又什么是优先级队列呢&#xff1f; 我们一起来看看吧&#xff01; 目录 前言 一、堆 &#xff08;一&#xff09;堆的创建 &#xff08;二&#xff09;堆的插入 &#xff08;三&#xff09;堆…

群晖DS920 video station使用教程

群晖DS920 video station使用教程 为了更好的浏览体验&#xff0c;欢迎光顾勤奋的凯尔森同学个人博客http://www.huerpu.cc:7000 安装video station在群晖套件里点一下就好&#xff0c;这里不说了。 一、添加视频库 可以添加电视剧、电视节目等类型。 比如我在国产剧这个视频…

uniapp滚动加载 下拉刷新

前言 在日常开发中&#xff0c;滚动加载和下拉刷新是非常常见的功能&#xff0c;页面数据过多时&#xff0c;需要滚动加载优化性能&#xff0c;本篇技术分享博客将介绍如何在uniapp中实现滚动加载和下拉刷新。 预览 滚动加载 下拉刷新 一、滚动加载 滚动加载指的是当用户滑…

PHP 反序列化漏洞

PHP反序列化漏洞在实际测试中出现的频率并不高&#xff0c;主要常出现在CTF中。 PHP序列化概述 PHP序列化函数&#xff1a; serialize&#xff1a;将PHP的数据&#xff0c;数组&#xff0c;对象等序列化为字符串unserialize&#xff1a;将序列化后的字符串反序列化为数据&…

java 利用poi根据excel模板导出数据(二)

本文是 java 利用poi根据excel模板导出数据&#xff08;一&#xff09; 的续篇 经常有poi的开发一定会碰到三个名词&#xff1a; HSSFWorkbook 、 XSSFWorkbook、SXSSFWorkbook&#xff1b; 这三个都是导出excel的形式&#xff0c;具体区别&#xff1a; HSSFworkbook,XSSF…

Golang每日一练(leetDay0080) 矩形面积、翻转二叉树

目录 223. 矩形面积 Rectangle Area &#x1f31f;&#x1f31f; 226. 翻转二叉树 Invert Binary Tree &#x1f31f; &#x1f31f; 每日一练刷题专栏 &#x1f31f; Rust每日一练 专栏 Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每日一练 专栏…

SAP-MM-采购申请-价值特性

采购申请审批在维护价值特性时要注意是抬头价值还是行价值&#xff0c;要确定选择哪个&#xff0c;配置时对应配置。 1、创建价值特性CT04 字段名称&#xff1a;CEBAN-GSWRT&#xff0c;和CEBAN-GFWRT 抬头总价值&#xff1a;CEBAN-GFWRT&#xff1b;如果选择的是抬头审批&am…

数字信号处理8:利用Python进行数字信号处理基础

我前两天买了本MATLAB信号处理&#xff0c;但是很无语&#xff0c;感觉自己对MATLAB的语法很陌生&#xff0c;看了半天也觉得自己写不出来&#xff0c;所以就对着MATLAB自己去写用Python进行的数字信号处理基础&#xff0c;我写了两天左右&#xff0c;基本上把matlab书上的代码…

开源云原生数仓引擎ByConity 存储计算分离架构和优势

供稿 | ByConity技术团队 出品 | CSDN 云计算 ByConity是一款字节跳动开源的云原生数仓引擎。它的一个重要优势是采用存储计算分离的架构&#xff0c;实现了读写分离和弹性扩缩容。这种架构确保读操作和写操作不会相互影响&#xff0c;使得计算资源和存储资源解耦&#xff0c;…

基于html+css的图展示102

准备项目 项目开发工具 Visual Studio Code 1.44.2 版本: 1.44.2 提交: ff915844119ce9485abfe8aa9076ec76b5300ddd 日期: 2020-04-16T16:36:23.138Z Electron: 7.1.11 Chrome: 78.0.3904.130 Node.js: 12.8.1 V8: 7.8.279.23-electron.0 OS: Windows_NT x64 10.0.19044 项目…

BLE协议栈结构

// 开坑BLE协议栈 0 镇楼图 接下来会自下往上粗略分析各个层级&#xff0c;后续会有对各层的细致解读 1 CONTROLLER 1.1 PHY BLE使用ISM频段&#xff08;频率范围是2.400-2.4835 GHz&#xff09;。将整个频带分为40份&#xff0c;每份的带宽为2MHz&#xff0c;称作RF Chann…

如何使用Python自动化测试工具Selenium进行网页自动化?

引言 Selenium是一个流行的Web自动化测试框架&#xff0c;它支持多种编程语言和浏览器&#xff0c;并提供了丰富的API和工具来模拟用户在浏览器中的行为。Selenium可以通过代码驱动浏览器自动化测试流程&#xff0c;包括页面导航、元素查找、数据填充、点击操作等。 与PyAuto…

抖音账号矩阵系统源码开发之——视频发布功能开发

视频发布权限在账号矩阵系统研发之初&#xff0c;都是一个备受争议的功能&#xff0c;最早之前我们使用的视频发布权限名字是Video.creat, video.delete权限&#xff0c;但是该权限于2022年10月份做了权限的收回&#xff0c;后又在上架了一个能力叫发布内容至抖音&#xff1a;…

PostGIS的10个最佳实践

PostGIS 是一个功能强大的开源空间数据库&#xff0c;可用于存储、查询和分析地理空间数据。 对于需要存储和分析大量地理空间数据的组织来说&#xff0c;这是一个流行的选择。 但是&#xff0c;正确使用 PostGIS 以充分利用它很重要。 在本文中&#xff0c;我们将讨论 10 个 …

【2023年4月美赛加赛】Z题:The future of Olympics 25页完整论文

【2023年4月美赛加赛】Z题&#xff1a;The future of Olympics 25页完整论文 1 题目 背景 国际奥委会(IOC)正面临着夏季奥运会和冬季奥运会申办数量的减少**[1]**。在过去&#xff0c;举办奥运会的竞争非常激烈&#xff0c;声望也很高。然而&#xff0c;最近&#xff0c;主办…

自定义注解和@Target、@Retention注解的使用

说明&#xff1a;注解可以理解为另一种形式的配置&#xff0c;可用于在类上、方法上等&#xff0c;标志是“”&#xff0c;如重写方法上的“Override”就是一种注解。这里我通过一个实例&#xff0c;来介绍自定义注解和java元注解&#xff08;Target、Retention&#xff09;的使…