当前位置: 首页 > article >正文

基于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:需要源码可以联系


http://www.kler.cn/a/291743.html

相关文章:

  • Java图片拼接
  • 实现 WebSocket 接入文心一言
  • 【Prompt Engineering】6 文本扩展
  • uniApp使用腾讯地图提示未添加maps模块
  • EGO Swarm翻译
  • Unity 圆形循环复用滚动列表
  • 无人机飞手及装配维修技术前景详解
  • 2024数学建模国赛题目A-E题
  • Java项目: 基于SpringBoot+mysql+mybatis校园管理系统(含源码+数据库+答辩PPT+毕业论文)
  • 从“红米汽车”到“陆地航母”,小鹏汽车杀疯了?
  • 教育行业解决方案:智能PPT在教育行业的创新应用
  • Python爬虫入门篇!
  • JS 如何判断是否是IE浏览器
  • 基于ssm+vue+uniapp的图书管理系统小程序
  • Groupby分组
  • C++学习之动态内存和拷贝控制
  • Opencv 隔帧取数据解码速度优化
  • Prometheus(八):Prometheus监控elasticsearch及常用API
  • Java 异常架构Exception(异常)
  • Docker学习之路【八】安装主从复制MYSQL8
  • 如何使用小乌龟清除认证缓存、还原版本、定位及常用开发工具集成
  • QT运行ROS工程
  • 【赛题已出】2024数学建模国赛A-E题已发布
  • 如何优雅的使用责任链模式?
  • vue3 置空a-select数据
  • 视频技术未来展望:EasyCVR如何引领汇聚融合平台新趋势