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);
}
四、效果演示: