Arduino智能垃圾桶

Posted 橙子果果

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Arduino智能垃圾桶相关的知识,希望对你有一定的参考价值。

这个小项目是基于Arduino设计的一款感应式智能开盖垃圾桶这个项目只要一点C语言的基础,懂得一点点物联网知识就可以,是一个刚入行物联网值得练手的小项目。


硬件准备

  • Arduino UNO
  • HC-SR04超声波模块
  • SG90舵机
  • 杜邦线若干


工作原理

当手靠近垃圾桶时,超声波传感器测出两者之间的距离,距离小于设定的阈值,舵机转动,垃圾桶盖打开。


接线方式

Arduino5VGND引脚5引脚8引脚2
舵机VCC(红)GND(黑/褐)信号线(白/黄)
超声波传感器VCCGNDTrigEcho


代码

#include<Servo.h>
#define Trig 8
#define Echo 2
#define DuoPIN 5
Servo myDuoJi;
long gettime()
{
    digitalWrite(Trig,HIGH);
    delayMicroseconds(10);
    digitalWrite(Trig,LOW);
    return  pulseIn(Echo,HIGH);
  }
void initChaoShengBo()
{
    pinMode(Echo,INPUT);
    pinMode(Trig,OUTPUT);
  }
void setup() {
  initChaoShengBo();
  myDuoJi.attach(DuoPIN);
  Serial.begin(115200);

}

void loop() {
  //获取距离
  long dis;
  dis = gettime()/58;
 if(dis <10){
        myDuoJi.write(90);
        delay(1500);
      }
  else{
          myDuoJi.write(180);
        }
  
 
}


实物

在这里插入图片描述



补充 舵机和超声波 调试

舵机


接线

Arduino5VGND引脚5
舵机VCC(红)GND(黑/褐)信号线(白/黄)

舵机代码调试

#include<Servo.h>
#define DuoPIN 5
Servo myDuoJi;
void setup() {
  
  myDuoJi.attach(DuoPIN);
  Serial.begin(115200);
}

void loop() {
  int cmd;
  if(Serial.available()>0){
    cmd = Serial.read();
    if(cmd == 1){
        myDuoJi.write(90);
      }
      if(cmd == 0){
          myDuoJi.write(180);
        }
    }
  
}


通过串口工具调试舵机的转动角度
输入 0 或者输入 1 来控制舵机的转动(调整合适的角度)



超声波传感器

接线方式

Arduino5VGND引脚8引脚2
超声波传感器VCCGNDTrigEcho


代码
#define Trig 8
#define Echo 2
#define BEEP 5
long gettime()
{
    // 产生一个10us的高脉冲去触发TrigPin
    digitalWrite(Trig,HIGH);
    delayMicroseconds(10);
    digitalWrite(Trig,LOW);
    
    return  pulseIn(Echo,HIGH);
  }
void initChaoShengBo()
{
    pinMode(Echo,INPUT);
    pinMode(Trig,OUTPUT);
  }
void setup() {
  initChaoShengBo();
  pinMode(BEEP,OUTPUT);
  digitalWrite(BEEP,HIGH);
  Serial.begin(115200);//波特率设置为115200

}

void loop() {
  //获取距离
  long dis;
  dis = gettime()/58;// 检测脉冲宽度,并计算出距离
  Serial.print(dis);
  Serial.println("cm");
  if(dis<10){
      digitalWrite(BEEP,LOW);
    }
    else{
      digitalWrite(BEEP,HIGH);
      }
  delay(500);
}


通过串口工具的可以接收到超声波测的距离



为什么接收到的脉冲信号要除以58得到距离?


distance_cm=(us)/58

声音在干燥、摄氏 20度的空气中的传播速度大约为343米/秒,合34,300厘米/秒。
或者,我们作一下单位换算,34,300除以1,000,000厘米/微秒。
即为:0.0343厘米/微秒
再换一个角度,1/(0.0343 厘米/微秒)

即:29.15 微秒/厘米。
这就意味着,每291.5微秒表示10CM的距离。1厘米就是29.15微秒。
但是发送后到接收到回波,声音走过的是2倍的距离呀。
所以实际距离就是1厘米,对应58.3微秒。
实际上整个测距过程是测的发出声波到收到回波的时间,你的程序里的第一个distance实际上是时间us。
所以换成距离cm,要除以58。当然除以58.3可能更精确


在这里插入图片描述

以上是关于Arduino智能垃圾桶的主要内容,如果未能解决你的问题,请参考以下文章

Arduino智能垃圾桶

用arduino做一个智能垃圾桶

智能语音识别垃圾桶

智能小车26:我做了个垃圾电路板

Arduino智能小车--仅仅是随便一搞

用于 Arduino 的智能卡读/写器