【arduino】超声波垃圾桶

news2024/11/17 19:29:44

🎊专栏【Arduino】

🍔喜欢的诗句:更喜岷山千里雪 三军过后尽开颜。

🎆音乐分享【勋章】

大一同学小吉,欢迎并且感谢大家指出我的问题🥰

目录

⭐效果

⭐所需器材 

⭐连线图片 

⭐程序代码

⭐代码分析

✨引入所需的库文件

✨定义引脚 

✨定义变量并且初始化 

 ✨程序初始化

✨pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT);  函数

✨digitalWrite(trigPin, HIGH)函数 

✨digitalWrite(trigPin, LOW)函数

🍔注意

✨delayMicroseconds(2)函数 

✨pulseIn() 函数 

✨Serial.println(distance)函数

✨关于舵机的操作


⭐效果

自制超声波垃圾桶(硬件设施细节还要完善)

⭐所需器材 

超声波传感器,跳线,舵机,小垃圾桶外壳,arduino uno开发板

⭐连线图片 

⭐程序代码

#include <Arduino.h>
#include <Servo.h>
#define echoPin 2  
#define trigPin 3  
Servo duoji; 

long duration; 
int distance;  
int angle = 0; //舵机角度

void setup()
{
  pinMode(trigPin, OUTPUT);                         
  pinMode(echoPin, INPUT);                          
  duoji.attach(9);                            
  Serial.begin(9600);                               
}
void loop()
{
  //先清空触发脚状态,准备发送下一次的超声波信号
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  
  duration = pulseIn(echoPin, HIGH);
  
  distance = duration * 0.034 / 2; //测距

  Serial.println(distance);

  if (distance > 20)//20厘米
  {
    if (duoji.read() == 90)
    {
      delay(1000);
    }
    else
    {
      angle = duoji.read();
      while (angle < 90)  //打开垃圾桶
      {
        angle+=10;
        duoji.write(angle);
        delay(10);
      }
      delay(1000);
    }
  }
  else 
  {
      angle = duoji.read();
      while (angle > 0)  //关闭垃圾桶
      {
        angle-=10;
        duoji.write(angle);
        delay(10);
      }
      duoji.write(0);
  }
  
}

⭐代码分析

✨引入所需的库文件

#include <Arduino.h>
#include <Servo.h>

✨定义引脚 

#define echoPin 2  //将Echo引脚连接到D2
#define trigPin 3  //将Trig引脚连接到D3

✨定义变量并且初始化 

long duration = 0;
int distance = 0;
int angle = 0;

 ✨程序初始化

void setup()
{
  pinMode(trigPin, OUTPUT);     
  pinMode(echoPin, INPUT);      
  duoji.attach(9);              //将舵机信号引脚连接到数字引脚9
  Serial.begin(9600);           //设置波特率
}

✨pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT);  函数

        这两行代码用于初始化 HC-SR04 超声波传感器连接的两个引脚,即将触发脚(Trig Pin)设置为输出模式,使其能够发送超声波信号,并将回波脚(Echo Pin)设置为输入模式,用于接收回波信号。

        在使用 HC-SR04 进行测距时,需要通过触发引脚发送一定时间的超声波信号,然后等待该信号的回波,测量回波的行程时间,最终通过行程时间和声波在空气中的传播速度计算出测距结果。因此,在这段代码中需要将引脚初始化为相应的输入输出模式,以便进行后续的超声波测距操作。

✨digitalWrite(trigPin, HIGH)函数 

  digitalWrite(trigPin, HIGH) 用于将触发引脚 trigPin 的电平设置为高电平,以激活 HC-SR04 超声波传感器并发送超声波信号。

        在 HC-SR04 进行测距时,需要向触发引脚发送一定时间的高电平信号才能启动传感器,并在一定时间后自动停止发射传感器,开始接收回波信号,该函数用于实现发送触发信号的操作,从而开始一次超声波测距操作。

✨digitalWrite(trigPin, LOW)函数

  digitalWrite(trigPin, LOW) 用于将触发引脚 trigPin 的电平设置为低电平,以实现清空触发脚状态,准备发送下一次的超声波信号。

        在 HC-SR04 测距过程中,需要向触发引脚发送一定时间的高电平信号才能激活传感器并发送超声波信号,因此在每次测距结束后,需要调用该函数将触发引脚的电平设置为低电平,以便准备下一次的超声波测距。

🍔注意

        要先使用digitalWrite(trigPin, LOW),以实现清空触发脚状态,准备发送下一次的超声波信号。然后再使用digitalWrite(trigPin, HIGH)

        如果不明白的话,分析一下上面的完整代码

✨delayMicroseconds(2)函数 

   delayMicroseconds(2) 是一个延时函数,用于在超声波传感器触发引脚电平由低电平变为高电平后延迟 2 微秒的时间,以满足 HC-SR04 的触发要求。

        在 HC-SR04 进行测距时,需要将触发引脚电平设置为高电平并保持至少 10 微秒的时间,才能激活传感器并发送超声波信号。而本函数的作用就是在设置触发引脚为高电平后,等待一段时间(这里为 2 微秒)后再继续执行下一步操作,从而满足 HC-SR04 触发的要求。

✨pulseIn() 函数 

   pulseIn() 是Arduino内置的一个函数,它用于测量数字引脚上的高或低脉冲的持续时间,通常用于接收超声波传感器(如 HC-SR04)的回波信号的持续时间。在这个代码中,它被用于读取echoPin引脚输入的声波行程时间,从而计算距离。

        具体来说,pulseIn() 函数接收两个参数,第一个是要测量的引脚,第二个是脉冲电平(HIGH或LOW)。在这里,我们需要测量接收到的高电平的持续时间,因此第二个参数是 HIGH。该函数将等待引脚上产生与给定电平相同的脉冲,并返回脉冲持续的时间,单位是微秒。因此,这个代码中,通过pulseIn(echoPin, HIGH) 读取到的值为声波从发送出去到接收到回波的总时间,即行程时间(单位:微秒)。最后将计算后的距离除以58.0,得到测量距离的结果(单位:厘米)。

需要注意的是,由于pulseIn()函数要等待接收到指定电平的脉冲,因此会阻塞代码执行。此外,在pulseIn()函数中还可以设置超时时间,避免因为某些原因导致函数一直等待而无法返回。

✨Serial.println(distance)函数

方便在串口监视器来查看测量的距离是多少 

✨关于舵机的操作

请看:【Arduino】舵机的连线和基本操作-CSDN博客  

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

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

相关文章

MySQL常见七种通用的Join查询练习题

准备数据库表 t_dept 和 t_emp CREATE TABLE t_dept (id int NOT NULL AUTO_INCREMENT,deptName varchar(30) DEFAULT NULL,address varchar(40) DEFAULT NULL,CEO int DEFAULT NULL,PRIMARY KEY (id) ) ENGINEInnoDB AUTO_INCREMENT7 DEFAULT CHARSETutf8mb3 CREATE TABLE t…

面包多面包多面包多面包多面包多面包多

1.背景 1.摘要 本文是针对智慧政务中的文本数据挖掘应用的研究。通过建立基于三层网络结构的fastText文本分类模型&#xff0c;聚类量化模型&#xff0c;熵权评估模型解决了群众留言分类&#xff0c;热点问题挖掘&#xff0c;答复意见评价等问题。 针对群众留言分类问题&#…

《学习循环》---C语言

目录 前言&#xff1a; 1.while循环 1.1while循环的结构 1.2while语句中的break和continue 2.getchar配合循环清空缓冲区 3.for循环 3.1for循环的结构 3.2for循环中的break和continue 3.3for循环的注意事项 3.4使用多个循环变量控制for循环 4.do while循环 4.1do …

chrome 浏览器在 112 正式版本以及 114 canary 版本从 devtools 控制台复制文本不会复制高亮显示的文本?

问题 我的 chrome 浏览器版本如下&#xff1a;版本 112.0.5615.138&#xff08;正式版本&#xff09; &#xff08;64 位&#xff09; 今天我在写代码的时候报错了&#xff0c;看了一下控制台浏览器&#xff0c;是某个属性没有定义&#xff0c;然后我双击这个属性名称 ctrl c…

asp.net+C#大学生高校运动会比赛综合管理系统

目录 1 绪论 3 1.1 课题背景 3 1.2 课题目标 3 1.3 研究现状 3 1.4 论文工作内容以及结构安排 4 1.4.1 论文工作内容 4 1.4.2 论文结构安排 4 2 系统开发技术介绍 6 2.1 ASP.NET简介 6 2.2 Microsoft Visual Studio 2010平台 7 2.3 SQL Serve…

第16章_网络编程

第16章_网络编程 讲师&#xff1a;尚硅谷-宋红康&#xff08;江湖人称&#xff1a;康师傅&#xff09; 官网&#xff1a;http://www.atguigu.com 本章专题与脉络 1. 网络编程概述 Java是 Internet 上的语言&#xff0c;它从语言级上提供了对网络应用程序的支持&#xff0c;程…

达梦数据迁移问题罗列

目录 一、前言 二、问题罗列 一、前言 最近小编接触到国产的数据库达梦数据库&#xff0c;然后在用达梦数据迁移工具MySQL迁移至达梦的时候遇到了一系列的问题现在罗列一下在这里。目前关于国产的数据库达梦这些资料比较少&#xff0c;希望能够帮到有需要的同志们&#xff01…

MySQL 服务的启动和停止

4.MySQL 服务的启动和停止_mysql数据库启停_头疼小宇的博客-CSDN博客

【网络编程】TCP

✨个人主页&#xff1a;bit me&#x1f447; ✨当前专栏&#xff1a;Java EE初阶&#x1f447; 目 录 &#x1f52e;一. TCP流套接字编程&#x1f4bf;二. TCP中的长短连接&#x1f4c0;三. 写一个 TCP 版本的 回显服务器-客户端 &#x1f52e;一. TCP流套接字编程 ServerSock…

d2l 注意力评分函数 --附加mask_softmax讲解

本章节tensor处理操作也不少&#xff0c;逐个讲解下&#xff1a; 目录 1.mask_softmax 1.1探索源码d2l.sequence_mask 2.加性注意力 3.缩放注意力 1.mask_softmax dim-1表示对最后一个维度进行softmax .dim()返回的是维度数 对于需要mask的数&#xff0c;要用绝对值非…

FreeRTOS 任务创建与删除实验

本实验主要实现 FreeRTOS 使用动态方法创建和删除任务&#xff0c;本实验设计了四个任务&#xff0c;这四 个任务的功能如下表所示&#xff1a; 软件设计 1. 程序流程图 本实验的程序流程图&#xff0c;如下图所示&#xff1a; 2. FreeRTOS 函数解析 (1) 函数 xTaskCreate…

spring框架基础知识和基于XML的Bean对象的管理回顾

什么是spring框架&#xff1f; spring基本功能所必须的jar包就是这些 如何获取bean&#xff1f; IOC原理 上面耦合度太高了 改进使用工厂模式 上面并没有把耦合度降低到最低&#xff0c;使用反射 spring实现IOC的两种方式 BeanFactory和ApplicationContext IOC如何管理Bea…

5个方法,帮助你快速提高团队管理效率

团队中&#xff0c;大家看起来都很忙&#xff0c;但最终交付的结果却总是差强人意。会议那么多&#xff0c;但有效的却很少越管理&#xff0c;但偏偏有时候越管理越乱......相信以上这些问题&#xff0c;很多管理者都有遇到过&#xff0c;团队管理是一个项目中最关键的一环。好…

如何打造全流程数字化零工场景,实现零工管理一体化?

近年来&#xff0c;零工市场发展迅速&#xff0c;不仅为企业提供更低成本、更便捷的用工方式&#xff0c;也为劳动者就业提供更低门槛更灵活形式&#xff0c;发挥了就业「蓄水池」的重要作用。但由于零工经济模式下的用工形式非常灵活&#xff0c;企业想要管好零工并不容易。 …

短视频平台-小说推文(知乎)推广任务详情

知乎会员 知乎日结内测中&#xff0c;可能暂只对部分优质会员开放! 2023/03/29通知: 知乎拉新项目&#xff0c;由于内部测试转化较低&#xff0c;暂时下线&#xff0c;原有关键词出单不受影响。 1、关键词 1.1 选择会员文 在知乎【首页】或者【会员】里面选取&#xff0c;需…

PEIS体检系统全套源代码,C# 源码

医院体检信息系统PEIS源码,C# 源码&#xff0c;PEIS源码源码 文末获取联系&#xff01; 系统概述 医院体检信息系统是专门针对医院体检中心的日常业务运作的特点和流程&#xff0c;结合数字化医院建设要求进行设计研发的一套应用系统。该系统覆盖体检中心的所有业务&#xff0…

使用nvm替换nvmw作为nodejs的版本切换(亲测)

之前的文章&#xff1a;同时使用vue2.0和vue3.0版本的采坑记录 安装的nvmw&#xff0c;今天想要用nvmw切换时&#xff0c;居然给我报错了&#xff1a; 然后我就走上了使用nvm替换nvmw之路。。 1.安装 nvm-windows下载 下载release版 中Assets中的包&#xff0c;window10&…

APIs -- DOM正则表达式

1. 介绍 正则表达式(Regular Expression)是用于匹配字符串中字符组合的模式。在JavaScript中&#xff0c;正则表达式也是对象通常用来查找、替换那些符合正则表达式的文本&#xff0c;许多语言都支持正则表达式。正则表达式在JavaScript中的使用场景: 例如验证表单:用户名表单…

数据库的实际操作

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一、关系模型二、数据库的操作 创建数据库查看数据库选择数据库删除数据库三、MySQL 数据库命名规范总结 一、关系模型 关系数据库是建立在关系模型上的。而关系模…

flutter学习之旅(一)

初学Flutter flutter官网和中文开发手册 安装flutter - windows 官方文档-windows flutter_windows_3.7.9-stable.zip 编辑环境变量 在 用户变量 一栏中&#xff0c;检查是否有 Path 这个条目&#xff1a; 如果存在这个条目&#xff0c;以 ; 分隔已有的内容&#xff0c;加入 f…