【arduino】超声波垃圾桶

简介: 【arduino】超声波垃圾桶

⭐效果

blob:https://www.bilibili.com/49190746-e7aa-43fe-bde0-60f9ab74ec78

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

⭐所需器材

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

⭐连线图片

image.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博客  

相关文章
|
1月前
4-3 51单片机蜂鸣器
4-3 51单片机蜂鸣器
13 2
|
数据格式
51单片机--红外遥控
51单片机--红外遥控
|
2月前
|
IDE 开发工具
基于单片机的简易步进电机控制系统
基于单片机的简易步进电机控制系统
20 0
|
9月前
|
小程序 芯片
基于51单片机的超声波测距(待改进)
基于51单片机的超声波测距(待改进)
94 0
|
9月前
|
安全 IDE 开发工具
了解有源和无源蜂鸣器的区别以及如何在Arduino中使用它
在本文中,我们将探索蜂鸣器的内部结构,检查其内部结构,并对其工作系统有更深入的了解。在这里,我们讨论一下有源蜂鸣器和无源蜂鸣器的区别。该设备的主要功能是将电信号转换为音频声音。蜂鸣器可分为有源蜂鸣器和无源蜂鸣器两种不同类型,它们都是极化的。
1237 0
|
9月前
|
算法 编译器 网络性能优化
基于51单片机的电话拨号报警器(1)
基于51单片机的电话拨号报警器(1)
139 0
|
9月前
|
容器
基于51单片机的电话拨号报警器(2)
基于51单片机的电话拨号报警器(2)
|
10月前
|
传感器
Arduino实现超声波测距
Arduino实现超声波测距
|
12月前
|
传感器 前端开发 机器人
基于单片机的智能循迹避障小车STC89C52红外对管L298N驱动PWM波控制速度
利用红外对管检测黑线与障碍物,并以STC89C52单片机为控制芯片控制电动小汽车的速度及转向,从而实现自动循迹避障的功能。其中小车驱动由L298N驱动电路完成,速度由单片机输出的PWM波控制。
214 0