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

news2024/11/20 1:36:40

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、基本原理

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

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

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

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

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

相关文章

材料力学-剪力和弯矩方向规定及关系

剪力和弯矩的方向规定方法 对水平梁的某一指定截面来说&#xff0c; 剪力&#xff1a;在它左侧的向上外力&#xff0c;或右侧的向下外力&#xff0c;将产生正的剪力&#xff1b;反之&#xff0c;即产生负的剪力。 自己的记法&#xff08;可以不按我的来&#xff09;&#xff1…

ChatGPT:你真的了解网络安全吗?浅谈网络安全攻击防御进行时之网络安全新总结

ChatGPT&#xff1a;你真的了解网络安全吗&#xff1f;浅谈网络安全攻击防御进行时 网络安全新总结 ChatGPT&#xff08;全名&#xff1a;Chat Generative Pre-trained Transformer&#xff09;&#xff0c;美国OpenAI 研发的聊天机器人程序&#xff0c;是人工智能技术驱动的自…

ChatGPT在数据分析中的应用

最近&#xff0c;机器学习和人工智能技术在数据分析领域中发挥着越来越大的作用。而chatgpt正是这个领域最受欢迎的仿人聊天 AI 。但是&#xff0c;对于许多数据科学家和分析师来说&#xff0c;chatgpt并不是他们首选的工具。相反&#xff0c;pandas、sk-learn是数据科学家的最…

一起来聊聊ERP

聊聊ERP 哈喽&#xff0c;哈喽&#xff0c;大家好&#xff01;今天开始&#xff0c;我们就来讲ERP了。 什么是ERP ERP是Enterprise Resource Planning 的缩写&#xff0c;中文含义是企业资源计划。它代表了当前在全球范围内应用最广泛、最有效的一种企业管理方法&#xff0c;…

JVM系列-第12章-垃圾回收器

垃圾回收器 GC 分类与性能指标 垃圾回收器概述 垃圾收集器没有在规范中进行过多的规定&#xff0c;可以由不同的厂商、不同版本的JVM来实现。 由于JDK的版本处于高速迭代过程中&#xff0c;因此Java发展至今已经衍生了众多的GC版本。 从不同角度分析垃圾收集器&#xff0c;…

gym不渲染画面的解决方案(gym版本号0.26.2)

确认gym版本号 我安装了新版gym&#xff0c;版本号是0.26.2&#xff0c;不渲染画面的原因是&#xff0c;新版gym需要在初始化env时新增一个实参render_mode‘human’&#xff0c;并且不需要主动调用render方法&#xff0c;官方文档入门教程如下 import gym import numpy as n…

FreeRTOS学习之路,以STM32F103C8T6为实验MCU(第一章——FreeRTOS的基本框架)

学习之路主要为FreeRTOS操作系统在STM32F103&#xff08;STM32F103C8T6&#xff09;上的运用&#xff0c;采用的是标准库编程的方式&#xff0c;使用的IDE为KEIL5。 注意&#xff01;&#xff01;&#xff01;本学习之路可以通过购买STM32最小系统板以及部分配件的方式进行学习…

day15 Servlet-Request-Response

请求对象(request) **请求对象的作用&#xff1a;**封装了所有请求的数据&#xff0c;有服务器实现这个对象&#xff0c;我们直接调用sercive&#xff08;&#xff09;方法 HttpServletRequest对象的常用方法 request请求方法描述request.getMethod()获得请求方式post\getre…

基于SpringBoot+Uniapp的微信小程序二手购物商城(用户手册+测试报告+详细设计文档)

✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取项目下载方式&#x1f345; 一、项目背景介绍&#xff1a; 这个微信小程序二手购…

LangChain使用调研

目录 一、LangChain是什么 二、LangChain提供的主要模块 三、Agent使用例子 四、zero-shot-react-description在ChatGPT和LLaMA-7B效果对比 一、LangChain是什么 LangChain是一个程序框架&#xff0c;它允许用户围绕LLM&#xff08;基座&#xff09;快速构建应用程序。 La…

多维时序 | MATLAB实现GA-BiLSTM遗传算法优化双向长短期记忆网络的多变量时间序列预测

多维时序 | MATLAB实现GA-BiLSTM遗传算法优化双向长短期记忆网络的多变量时间序列预测 目录 多维时序 | MATLAB实现GA-BiLSTM遗传算法优化双向长短期记忆网络的多变量时间序列预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 MATLAB实现GA-BiLSTM遗传算法优化双向长短…

宏工科技“全面”发力CIBF,助推电池智造“高效提质”

5月16-18日&#xff0c;第十五届中国国际电池技术展览会&#xff08;CIBF2023&#xff09;在深圳盛大举行。宏工科技携电池材料与电池匀浆领域的创新产品和系统解决方案精彩亮相。 据了解&#xff0c;宏工科技在新能源行业的业务涉及电池材料整线产线、电池匀浆、电池回收三个…

边沿检测电路

目录 同步信号的边沿检测 异步信号的边沿检测 所谓的边沿检测&#xff08;幼教边沿提取&#xff09;&#xff0c;就是检测输入信号的上升沿和下降沿。在设计数字系统时&#xff0c;边沿检测是一种很重要的思想&#xff0c;实际编程时用的最多的时序电路应该就是边沿检测电路和…

为什么要把一个函数分解成三角函数?(傅利叶级数)

为什么要把一个函数分解成三角函数&#xff1f;(傅利叶级数) 笔记来源&#xff1a;【知识拼图】傅里叶变换从零到一 02集 傅里叶级数从起源到操作&#xff0c;真的很细 把一个函数分解成三角级数体现了化繁为简&#xff0c;一个复杂函数化成许多三角函数的叠加 先回顾一下向量…

CyberLink的颜色修正和调整软件ColorDirector Ultra 11.0版本在win10系统的下载与安装配置教程

目录 前言一、ColorDirector Ultra安装二、使用配置总结 前言 ColorDirector Ultra是由CyberLink公司开发的一款专业的颜色修正和调整工具&#xff0c;可以帮助用户实现对视频中颜色的全方位管理。该软件支持对各种分辨率的视频进行颜色调整&#xff0c;并且可以从各种设备&am…

第四篇、基于Arduino uno,获取土壤湿度传感器的原始值和含水量——结果导向

0、结果 说明&#xff1a;先来看看串口调试助手显示的结果&#xff0c;第一个值是原始的模拟电压值&#xff0c;第二个值是含水量&#xff0c;如果是你想要的&#xff0c;可以接着往下看。 1、外观 说明&#xff1a;虽然土壤湿度传感器形态各异&#xff0c;但是原理和代码都是…

( 数组) 27. 移除元素 ——【Leetcode每日一题】

❓27. 移除元素 难度&#xff1a;简单 给你一个数组 nums 和一个值 val&#xff0c;你需要 原地 移除所有数值等于 val 的元素&#xff0c;并返回移除后数组的新长度。 不要使用额外的数组空间&#xff0c;你必须仅使用 O(1) 额外空间并 原地 修改输入数组。 元素的顺序可以…

港联证券|“面值退”增多凸显A股市场化进程良性态势

近日&#xff0c;多家陷入“1元退市”危机的公司纷纷发布风险提示公告称&#xff0c;公司股票存在可能因股价低于面值被终止上市的风险。据《经济参考报》记者不完全统计&#xff0c;今年以来&#xff0c;沪深两市已有10余只个股锁定“面值退”&#xff0c;其中多以披星戴帽公司…

Navicat “1205 - Lock wait timeout exceeded; try restarting transaction“

标题标题&#xff1a;解决Navicat数据库操作报错&#xff1a;1205 - Lock wait timeout exceeded; try restarting transaction 导言&#xff1a; 在使用Navicat进行数据库操作时&#xff0c;有时会遇到错误代码为"1205 - Lock wait timeout exceeded; try restarting t…

JavaWeb10(实现结算查看订单订单详情)

目录 一.效果预览 二.实现思路 2.1 实现结算 ①形成订单&#xff0c;并赋值 ②将订单插入到数据表tb_order中&#xff0c;同时将该订单所对应的订单项插入到数据表tb_orderitem中 2.2 查看我的订单 ①底层代码 ②前端绑值 2.3 查看订单详情 ①页面跳转&#xff0c;传…