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

    技术2022-07-10  123

       Arduino项目实战   

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

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

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

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

    一、硬件准备

    Arduino UNOHC-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); }

    四、效果演示:

    Processed: 0.014, SQL: 9