【arduino】超声波垃圾桶

文章介绍了一个使用Arduino和超声波传感器HC-SR04制作的智能垃圾桶项目,当物体靠近超过20厘米时,舵机会打开垃圾桶,否则关闭。内容包括项目效果、所需器材、连线图、程序代码和代码分析,详细解释了如何通过超声波测距和舵机控制实现垃圾桶的自动开关功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

🎊专栏【Arduino

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

🎆音乐分享【勋章

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

目录

⭐效果

⭐所需器材 

⭐连线图片 

⭐程序代码

⭐代码分析

✨引入所需的库文件

✨定义引脚 

✨定义变量并且初始化 

 ✨程序初始化

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

✨digitalWrite(trigPin, HIGH)函数 

✨digitalWrite(trigPin, LOW)函数

🍔注意

✨delayMicroseconds(2)函数 

✨pulseIn() 函数 

✨Serial.println(distance)函数

✨关于舵机的操作


 

 

⭐效果

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

⭐所需器材 

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

⭐连线图片 

489bd7579b724e148024fcac5fa4a8cf.png

⭐程序代码

#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博客  

 

Arduino创意制作 自动垃圾桶设计说明: 完整制作安装视频:https://v.youku.com/v_show/id_XMzIzMzY0OTI3Mg==.html 第1步:组件 为了创造这个,我们需要一个在铰链上有盖开口的桶。这是从家庭用品买来的,叫做洗衣粉桶。作为Arduino的董事会,我拿了Nano模型。伺服驱动器对于金属减速器是理想的。下一个是 超声波距离传感器和一个3指电池的电池舱。 Arduino NANO 量程传感器 伺服 电池盒 方块 MOSFET强烈建议使用电解电容器10V 470-1000 uF 电阻100欧姆 电阻10千欧姆 第2步:硬件 首先我们摆脱封面上多余的塑料。这是一个闩锁和手柄。距离传感器完美地装入盒子中,只有连接引脚伸出。我们将删除它们。首先,我们将削减引脚的塑料。在伺服驱动器上,我们将电线延伸至垃圾箱前端。而且我们根据这个简单的电路来连接所有的东西。传感器将从Arduino的一个引脚供电,以免焊接一堆导线到电源引脚,因为伺服器已经连接在那里。 现在我们把所有的东西放在案例中。首先,我们将为传感器打孔。我用刀标记了这些中心。首先,我用普通的钻孔钻出中心的精度,然后用台阶钻把它扩大。用热胶填满所有东西。电池盒上粘有双面胶带,伺服驱动器的导线会通过侧孔外出。 第3步:伺服和盒装 现在用砂纸伺服侧和箱盖在这个地方清理。我们用普通的即时胶粘在一起。我们还可以用电缆扎带加强它。还需要在电线下面制作凹槽,以免卡住。当然,伺服驱动器必须进入水桶,不要紧贴任何东西。电线沿着水桶的边缘用热胶固定。 盒子本身用螺丝和螺母固定在桶上。这是必要的,以便传感器梁不会抓住篮子盖。为此,您可以在上方的螺丝下放置几个螺母。 第4步:机制 首先,我从冰淇淋棒做起。但它太厚了,不让盖子自由关闭。然后,我用一个金属罐子做罐头做同样的事情。伺服驱动器杆上部固定有一个回形针。这件作品用超强的胶水和苏打水粘在金属条上。 那么,让我们登上它。非常小心地将伺服转动到极限位置并将摇臂固定在打开的盖子的位置上。那么,现在我们的桶关闭和打开。这样做要小心,因为中国的这个产品可以打破,反之工作。原则上,硬件部分已经准备就绪,让我们继续编程。首先,我们将写一个简单的算法,不节能。 第5步:在XOD中编程 我使用基于视觉的编程语言XOD,它基于节点。节点是代表传感器,电机或继电器等某些物理设备的块,或者是一些操作(如添加,比较或文本串联)。您可以在我的关于垃圾桶的视频中观看XOD制作whisky项目的所有过程。另外第一张照片是一个简单的XOD程序没有一些“迟滞”,第三张照片是用它。 您可以在GitHub的项目页面下载XOD垃圾桶项目。 正如你已经注意到,要创建这个设备,我们不需要任何编程语言的知识。我们只需要正确地思考工作的逻辑,知道程序中存在哪些节点。这是阅读文档几个晚上的任务。在xod中,我们清楚地看到了数据的传输方式,数据的传输方式以及传输方式。创建代码的长片是Arduino迷的下一步。您可以从这里开始使用函数式编程。 所以,它的作品!我们来谈谈节能。 第6步:节能 硬件修改 所以,我们有3个能源消费者,Arduino本身,传感器和伺服驱动器。为了让Arduino减少使用电池,您需要关闭在电源开启时不断发光的“pwr”LED。只要切断通往它的轨道。 接下来在电路板背面有一个电压调节器,我们也不需要它,咬掉它的左脚。现在睡眠模式下的Arduino需要几十个微安。传感器可以直接由Arduino打开和关闭。 但待机模式下的伺服器消耗大量能量。因此,我们将在电子天气预报器的视频中使用mosfet晶体管。你可以从这个列表中选取任何一个mosfet。还需要一个100欧姆和10千欧姆的电阻。我将在视频下的描述中留下项目组件的完整列表。 新的电路看起来像这样,伺服电源通过mosfet。在运动开始时,伺服需要大电流,因此您需要将电容器置于电源输入端。 第7步:编程 Arduino IDE 这项工作的逻辑如下。不幸的是,xod还没有添加电源模式,所以我在Arduino IDE中经典地编写了固件,在那里我用“LowPower”库管理系统。唤醒,给传感器供电,获得距离,关闭传感器。如果需要打开和关闭盖子,请将电源连接到伺服器,打开并重新关闭电源。 您可以从GitHub项目页面下载Arduino IDE草图 (代码见上传附件。) 第8步:结论 现在,处于待机模式的电路消耗大约0.1毫安,并可以从指纹电池长时间安全工作。但看看是怎么回事?为了稳定运行,你需要一个高于3.6伏的电压,也就是每个电池高于1.2伏。 从图表来看碱性电池,可以看出电池正好放电一半,即大约1.1安培小时。那在待机状态下工作约460天,不错?但电池将只消耗一半的电量,然后可以插入电视机的遥控器中。但
评论 22
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

在下小吉.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值