Arduino项目实战——基于Arduino【智能垃圾桶】设计

   Arduino项目实战   

    —基于Arduino【智能垃圾桶】设计

     第一次接触Arduino是在大一的时候,距离现在已经五年,当时一个简单的“电子琴”项目就让我抓耳挠腮,根本不具备“面向百度编程”能力的我,用老师提供的文档跟我的组员用了好几天,才让Arduino跟蜂鸣器想起 一首简单版的《小星星》。当时内心的喜悦以及在舍友面前装X的沙雕模样仿佛还在昨日。

    因为Arduino容易入门,而且能让初学者快速体验到单片机开发的乐趣,因此用一个小栏目分享一些以前在学校里面做过的小项目,这个项目是智能垃圾桶的初级版本,后续还会用4G通信模组或者Wifi模块(Esp8266/Esp32)等远程控制的中级版本。完全可以完成一个好的课程设计甚至毕业设计。

    Arduino之旅的初次见面,感谢批评指正,一起进步!

一、硬件准备

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

二、接线方式

三、代码解析

#include <Servo.h>   //servo库
Servo servo;    //创建舵机对象来控制舵机 
int trigPin = 5;    
int echoPin = 6;   
int servoPin = 7;
int led= 10;
long duration, dist, average;   
long aver[3];   //array for average


void setup() {   
  //初始化串口通信以及连接SR04的引脚    
    Serial.begin(9600);
    
    servo.attach(servoPin);//把连接在引脚7上的舵机赋予舵机对其控制
      
    pinMode(trigPin, OUTPUT);   //要检测引脚上输入的脉冲宽度,需要先设置为输入状态  
    pinMode(echoPin, INPUT);  
    servo.write(0);         //close cap on power on
    delay(500)
    servo.detach(); 
} 

void measure() {  
    digitalWrite(10,HIGH);
    
    digitalWrite(trigPin, HIGH);  //产生一个10us的高脉冲去触发TrigPin
    delayMicroseconds(2);
    digitalWrite(trigPin, LOW);
    delayMicroseconds(5);
    digitalWrite(trigPin, HIGH);
    
    pinMode(echoPin, INPUT);
    duration = pulseIn(echoPin, HIGH);  
    dist = (duration/2) / 10;    //obtain distance 检测脉冲宽度并测算出距离    
}
void loop() { 
  for (int i=0;i<=2;i++) {   //average distance
    measure();               
    aver[i]=dist;            
    delay(10);              //delay between measurements
  }
 dist=(aver[0]+aver[1]+aver[2])/3;    

    if ( dist<50 ) {
    //Change distance as per your need
    servo.attach(servoPin);
    delay(1);
    servo.write(0);  
    delay(3000);       
    servo.write(150);    
    delay(1000);
    servo.detach();      
}
    Serial.print(dist);
}

四、效果演示:

猜你喜欢

转载自blog.csdn.net/qq_41899773/article/details/107058679