基于esp32的智能分拣系统
一、功能概述
主要功能: 一款使用ESP32做主控器实现有害垃圾桶/可回收垃圾桶/厨余垃圾桶人员靠近正前方时会自动打开、三个垃圾桶都有垃圾桶是否满的检测、垃圾桶满时对应的显示灯会开启和警报声也会开启、管理员可以使用管理员模式对垃圾桶进行清理之后恢复正常工作、黑暗时分拣系统会自动开启灯关,同时垃圾分拣系统也有自动消毒的功能,垃圾分拣系统也可以根据语音识别来开启对应的垃圾桶。
采用MQTT协议连接blinker实现与手机APP应用程序无线通信,实现手机控制垃圾分拣系统的开启关闭等功能。(可选)
采用MQTT协议连接阿里云,进行云端的数据存储。(可选,也可以根据自己的需求来设置存储)
1.使用ESP32_S3_DevKitC_1单片机做主控制器。
2.使用超声波模块进行测距,来实现垃圾桶是否有人员靠近和垃圾桶是否满检测。
3.使用舵机模块,对垃圾桶进行开盖功能。
4.使用语音模块,对垃圾分拣系统实现语音操控的功能。
二、图片展示
三、核心代码
void setup()
{
//超声波的初始化
pinMode(Trig1,OUTPUT);
pinMode(Echo1,INPUT);
pinMode(Trig2,OUTPUT);
pinMode(Echo2,INPUT);
pinMode(Trig3,OUTPUT);
pinMode(Echo3,INPUT);
pinMode(Trig4,OUTPUT);
pinMode(Echo4,INPUT);
pinMode(Trig5,OUTPUT);
pinMode(Echo5,INPUT);
pinMode(Trig6,OUTPUT);
pinMode(Echo6,INPUT);
//舵机初始化
pinMode(ServoPin1,OUTPUT);
pinMode(ServoPin2,OUTPUT);
pinMode(ServoPin3,OUTPUT);
pinMode(ServoPin4,OUTPUT);
Myservo1(0);
Myservo2(0);
Myservo3(0);
Myservo4(0);
//开关的初始化
pinMode(switch1,OUTPUT);
pinMode(switch2,OUTPUT);
pinMode(switch3,OUTPUT);
pinMode(switch4,OUTPUT);
pinMode(switch5,OUTPUT);
//蜂鸣器、光敏电阻的初始化
pinMode(lister,OUTPUT);
pinMode(guangmin,INPUT);
Serial.begin(115200);
su03tSerial.begin(su03tBaudRate); // 开始软件串行通信,与SU03T通信
delay(1000); // 等待SU03T模块准备好
//物理开关引脚
pinMode(key, INPUT_PULLUP); // 设置引脚为输入,并启用上拉电阻
// Attach the interrupt to the button pin
attachInterrupt(digitalPinToInterrupt(key), handleButtonPress, FALLING); // FALLING 触发中断(按钮按下时
}
void loop()
{
if(digitalRead(guangmin)) //判断是否是黑暗,黑暗打开灯光
{
digitalWrite(switch5,HIGH);
Serial.println("lister:1");
}
else
{
digitalWrite(switch5,LOW);
Serial.println("lister:0");
}
if (buttonPressed) { //判断外部中断按钮是否按下
buttonPressed = false; // 重置标志
K_falg = !K_falg;
Serial.println("Button pressed!"); // 在串口输出消息
}
//获取垃圾桶内部的距离
Wave_len4 = getTime4()/58;
Wave_len5 = getTime5()/58;
Wave_len6 = getTime6()/58;
Wave_len1 = getTime1()/58;
Wave_len2 = getTime2()/58;
Wave_len3 = getTime3()/58;
Serial.print("wave1:");
Serial.println(Wave_len1);
Serial.print("wave2:");
Serial.println(Wave_len2);
Serial.print("wave3:");
Serial.println(Wave_len3);
Serial.print("wave4:");
Serial.println(Wave_len4);
Serial.print("wave5:");
Serial.println(Wave_len5);
Serial.print("wave6:");
Serial.println(Wave_len6);
//人员靠近垃圾桶
if(Wave_len1 < 8 && Wave_len1>0 && man1 != 1)
{
Myservo1(90);
while(Wave_len1<8) //等待人员走开
{
Wave_len1 = getTime1()/58;
Serial.print("wave1:");
Serial.println(Wave_len1);
delay(500);
}
delay(1000);
Myservo1(0);
}
}
四、视频演示
智能分拣系统
PS:需要源码可以联系