1、前言
本设计以STM32F103C8T6单片机为主控芯片,WIFI模块ESP8266-01S作为通信模块连接onenet云平台,通过通过MQ-2烟雾传感器检测烟雾浓度是否正常,预防垃圾桶火灾发生。OLED屏幕显示烟雾浓度、当前厨余垃圾,其他垃圾,有害垃圾,可回收垃圾状态和是否满溢。当一级口令识别之后,二级口令说出垃圾的名字,语音识别模块自动识别此垃圾的类型,语音播报出垃圾种类(四种类型:厨余垃圾,其他垃圾,有害垃圾,可回收垃圾。也可自己定位垃圾得类型)并且垃圾桶打开(舵机模拟垃圾桶打开,并在十秒钟自动复位,模拟垃圾桶关闭)。通过WIFI连接ONENET云平台,手机APP连接ONENET云平台,APP可以查看当前环境信息数据,可调节阈值范围。操作简单易懂,手把手教小白完成整套设计,UniAPP开发环境搭建非常简单,可打包生成手机APP。
2、元器件组成
本设计由STM32F103C8T6单片机+WIFI模块ESP8266-01S+OLED屏幕+语音识别模块+JQ8400语音播报模块+红外光电传感器+SG90舵机+MQ-2烟雾传感器+电源电路 组成
3、功能简介
1、火灾预防:通过MQ-2烟雾传感器检测烟雾浓度是否正常,预防垃圾桶火灾发生。
2、屏幕显示:OLED屏幕显示烟雾浓度、当前厨余垃圾,其他垃圾,有害垃圾,可回收垃圾状态和是否满溢。
3、语音唤醒:通过一级口令唤醒语音识别识别功能后,语音回复”您好”。
4、垃圾分类:当一级口令识别之后,二级口令说出垃圾的名字,语音识别模块自动识别此垃圾的类型,语音播报出垃圾种类(四种类型:厨余垃圾,其他垃圾,有害垃圾,可回收垃圾。也可自己定位垃圾得类型)并且垃圾桶打开(舵机模拟垃圾桶打开,并在十秒钟自动复位,模拟垃圾桶关闭)。
5、桶满检测:通过红外光电传感器检测厨余垃圾,其他垃圾,有害垃圾,可回收垃圾内垃圾是否满溢,当检测到垃圾满溢时语音播报并声光提醒。
6、 远程控制:通过WIFI连接ONENET云平台,手机APP连接ONENET云平台,APP可以查看当前环境信息数据,可调节阈值范围
4、设计实现效果
哔哩哔哩视频链接:
https://www.bilibili.com/video/BV1fdpM6jE4a/?spm_id_from=333.1387.homepage.video_card.click
资料分享看文章末尾
5、设计原理图
6、设计PCB图
7、程序设计
#include "stm32f10x.h" #include "delay.h" #include "usart.h" #include "USART2/usart2.h" #include "timer.h" #include "adc.h" #include "menu.h" #include "key.h" #include "modules.h" #include "oled.h" #include "sg90.h" #include "hw.h" #include "mq2.h" #include "play.h" #include "usart3.h" #include "voice.h" /****************洪科单片机工作室******************* *** 破晓单片机 *** 项目:基于STM32单片机WiFi语音识别垃圾分类系统 *** BILIBILI:洪科单片机 *** 小红书:洪科单片机 *** 授权IP:洪科单片机 *** 淘宝:洪科单片机 *** 闲鱼:洪科单片机 *** 版本:V01.01 *** MCU:STM32F103C8T6 ******************洪科单片机***********************/ //显示界面 CaiDanJieGouTi KeyTab[SIZE_CAIDAN]= { {0 ,0 ,0 ,0 ,0 ,Main_Menu0}, / {1 ,1 ,1 ,1 ,1 ,Main_Menu1}, {2 ,2 ,2 ,2 ,2 ,Main_Menu2}, {3 ,3 ,3 ,3 ,3 ,Main_Menu3}, {4 ,4 ,4 ,4 ,4 ,Main_Menu4}, {5 ,5 ,5 ,5 ,5 ,Main_Menu5}, {6 ,6 ,6 ,6 ,6 ,Main_Menu6}, {7 ,7 ,7 ,7 ,7 ,Main_Menu7}, {8 ,8 ,8 ,8 ,8 ,Main_Menu8}, {9 ,9 ,9 ,9 ,9 ,Main_Menu9}, {10,10,10,10,10,Main_Menu10}, {11,11,11,11,11,Main_Menu11}, {12,12,12,12,12,Main_Menu12}, } ; //传感器变量声明 typedef struct { uint16_t HW1;// uint16_t HW2;// uint16_t HW3;// uint16_t HW4;// uint16_t yuyin; uint16_t smoke; }SensorModulesValue; typedef struct { uint16_t smokeTV;// }SensorThresholdValue; typedef struct { uint8_t TM1Flag; uint8_t TM2Flag; uint8_t TM3Flag; uint8_t TM4Flag; uint8_t SG1Flag; uint8_t SG2Flag; uint8_t SG3Flag; uint8_t SG4Flag; uint8_t YC1Flag; uint8_t YC2Flag; uint8_t YC3Flag; uint8_t YC4Flag; uint8_t BB1Flag; uint8_t BB2Flag; uint8_t BB3Flag; uint8_t BB4Flag; uint8_t BB5Flag; uint8_t LJTKZ1; uint8_t LJTKZ2; uint8_t LJTKZ3; uint8_t LJTKZ4; }DriveFlag; int main(void) { delay_init(); TIM3_Int_Init(499,7199);//1MS系统定时 OLEDGUI_Config(); //OLED初始化 OLEDGUI_DispString(30,0,"Init...",16,1); key_Init();//按键初始化 Adc_Init();//Adc初始化 MQ2_Init();//MQ2初始化 HW_Init(); //HW初始化 SG90_Init(); SG90_SetAngle(0); delay_ms(100); delay_ms(100); uart2_init(115200); delay_ms(100); uart1_init(115200); delay_ms(100); OLEDGUI_DispString(0,0,"Hardware init OK",16,1); //WiFi初始化 ESP8266_Init(); //初始化ESP8266 OLEDGUI_Clear(); //OLED清屏 OLEDGUI_DispString(0,0,"Connect MQTTs Server...",16,1); while(ESP8266_SendCmd(ESP8266_ONENET_INFO, "CONNECT")) DelayXms(500); OLEDGUI_DispString(0,16,"Connect MQTT Server Success",16,1); DelayXms(500); OLEDGUI_Clear(); //OLED清屏 OLEDGUI_DispString(0,0,"Device login ...",16,1); while(OneNet_DevLink()) //接入OneNET { OLEDGUI_DispString(0,32,"CONNECT",16,1); ESP8266_SendCmd(ESP8266_ONENET_INFO, "CONNECT"); DelayXms(500); OLEDGUI_DispString(0,32,"CONNECT",16,1); } OneNET_Subscribe(); OLEDGUI_Clear(); //OLED清屏 SensorThresholdSet();//阈值设置 SensorDataGet(); //获取传感器数据 OLEDGUI_Clear(); while(1) { //获取按键值 key_scan(); //进入菜单界面显示处理数据 GetKeylnput(&Keystatus); //获取传感器数据 SensorDataGet(); delay_ms(100); } }