目录
一、项目概述
二、实现功能
1、功能详解:
2、项目清单:
3、演示视频:
三、硬件介绍
PCB硬件设计:
四、程序设计
五、项目成品效果图
六、项目总结
七、包含资料
一、项目概述
本项目基于STM32F103C8T6单片机,设计了一款智能家用垃圾桶。系统通过HC-SR04超声波传感器检测垃圾桶剩余容量并映射为百分比,光电红外传感器检测是否有人靠近,火焰传感器检测是否发生火灾。各项数据实时显示在OLED屏幕上,用户可通过按键调节距离阈值、控制消毒模式,并切换自动/手动模式。自动模式下,垃圾桶未满时指示灯1亮,已满时指示灯2亮并通过蓝牙App推送“垃圾桶已满”;有人且未满时自动开盖,已满时不开盖并蜂鸣报警;检测到火灾时蜂鸣报警且双指示灯亮起;桶盖关闭时自动开启消毒灯。手动模式下可通过按键控制桶盖和消毒灯。系统通过BT04-A蓝牙模块与手机App通信,实现数据接收与指令下发。
二、实现功能
1、功能详解:
1)环境采集:通过HC-SR04超声波传感器检测垃圾桶剩余容量,并映射为百分比显示;光电红外传感器检测是否有人靠近;火焰传感器检测是否发生火灾。
2)数据显示:OLED屏幕显示垃圾桶剩余容量、人体靠近状态及火灾检测状态等信息。
3)阈值设定:可通过按键调节垃圾桶的距离阈值,并控制消毒模式是否开启。
4)模式切换:可通过按键切换自动模式和手动模式。
5)自动模式:
垃圾桶未满时指示灯1点亮,已满时指示灯2点亮,且蓝牙App接收“垃圾桶已满”信息;
检测到有人且垃圾桶未满时自动打开桶盖,垃圾桶已满时不打开桶盖并蜂鸣器报警;
火焰传感器检测到火灾时蜂鸣器报警,且两个指示灯同时亮起;
垃圾桶桶盖关闭时自动打开消毒灯进行消毒。
6)手动模式:可通过按键控制垃圾桶桶盖和消毒灯的开关。
7)蓝牙App:通过蓝牙App可接收环境信息数据并下发控制指令。
2、项目清单:
1)主控:STM32F103C8T6最小系统板
2)显示模块:OLED显示屏(4针IIC协议)
3)容量检测:HC-SR04超声波传感器
4)人体检测:光电红外传感器
5)火焰检测:火焰传感器
6)蓝牙模块:BT04-A蓝牙模块
7)执行模块:舵机(桶盖)、继电器、UV紫外线消毒灯
8)报警模块:蜂鸣器
9)指示模块:LED灯
10)结构件:垃圾桶模型
11)输入模块:按键
3、演示视频:
哔哩哔哩视频链接点击观看: https://www.bilibili.com/video/BV15gtZ6fEeM/?share_source=copy_web&vd_source=f4437c8e4429101e5bf1054c39d5474f
三、硬件介绍
PCB硬件设计:
四、程序设计
#include "delay.h" #include "sys.h" #include "usart.h" #include "key.h" #include "stdio.h" #include "control.h" #include "oled.h" #include "IoData.h" #include "pwm.h" #include "timer.h" #include "hc-sr04.h" #include "timer2.h" #define Tong_h 9 //垃圾桶深度 // 0-连接GND-电平为0V // 1-电平为3.3V // 5V - 电阻 - Led(正)-led(负)- PC13 - 0V // 条件为真 - True - 1 // 条件为假 - False - 0 //extern //函数声明 void OLED_Show_OnePage(); //第一屏显示内容 void OLED_Show_TwoPage(); //第二屏显示内容 void get_all_sensor_data(); // 传感器采集的函数 void Key_event_handle(void); //按键功能函数 void All_Pin_Init(void); //系统初始化函数 void Sensor_Data_Handle(); //不同模式下控制效果 int wind_status = 0; //风扇开关状态 int water_status = 0; //水泵开关状态 int led_status = 0; //照明开关状态 int Lamp_status = 0; int auto_mode = 0; //自动模式开关 0关闭 1开启 int Elim_status = 0; //消毒灯开关状态 int valve_status = 0; //垃圾桶开关状态 uint8_t keu_num = 0; //按键 uint8_t page_num = 1; //界面 uint8_t option = 0; //选项 int main(void) { delay_init(); //系统延时函数初始化 OLED_Init(); //屏幕初始化 uart3_init(9600); //串口3初始化,波特率9600 uart1_init(115200); //串口1初始化,波特率115200 uart2_init(9600); //串口2初始化,波特率9600 KEY_Init(); //按键初始化 IoData_Init(); //火焰传感器、人体传感器 Control_Init(); //声光报警,风扇、水泵初始化 PWM_Init(); LED=1; Lamp=1; HC_SR04_Init(); //超声波测距初始化 Timer2_Init(9,14398); //定时器初始化 PWM_SetCompare2(185); while(1) { Key_event_handle(); //按键监测 if(page_num == 1){ //屏幕更新 OLED_Show_OnePage(); }else if(page_num == 2){ OLED_Show_TwoPage(); } get_all_sensor_data(); Sensor_Data_Handle(); } } void Key_event_handle(void) //(Key)按键 event(事情、逻辑)handle(处理) { keu_num = KEY_Scan(0); //按键=扫描赋值 switch(keu_num) { case 1: //按键1按下 if(page_num==1){ //如果在页面1的状态下 page_num=2; // 按下按键1会跳转在页面2 OLED_Clear(); // 屏幕清楚 option=0; }else if(page_num==2){ //如果在页面2的状态下 page_num=1;; // 按下按键1会跳转在页面3 OLED_Clear(); // 屏幕清楚 option=0; } break; case 2: //按键2按下 if(page_num==2) { option++; //option选项 继续按、按键2会跳到下一个选项, if(option>3){ //如果页面选项是3个、再次按键次数超过3次后 option=0; //先会、不会框选每一个选项,在按后会再次循环 } } break; case 3: //按键3按下 if(page_num==1){ auto_mode=1; }else if(page_num==2){ if(option==1){ Elim=1; Elim_status=1; }else if(option==2){ PWM_SetCompare2(195); valve_status=1; } } break; case 4: //按键4按下 if(page_num==1){ auto_mode=0; }else if(page_num==2){ if(option==1){ Elim=0; Elim_status=0; }else if(option==2){ PWM_SetCompare2(185); valve_status=0; } } break; } } void get_all_sensor_data() //获取所有传感器数据 { Get_Fire_Value(&fire_status); //检测火焰状态(Fire)(status)状态 Get_Body_Value(&body_status); //检测身体状态(body)身体 HC_SR04_Deboanle(&distance); //检测距离 if(distance<=Tong_h)distance=Tong_h-distance; else distance = 0; distance=distance*100/Tong_h; // if(distance>100){ // distance=100; // } // if(distance<0){ // distance=0; // } } void Sensor_Data_Handle() //传感器的采集数据的处理 { if(auto_mode==1){ if(distance<70||fire_status==1){ LED=0; }else { LED=1; } if(distance>70||fire_status==1){ Lamp=0; }else { Lamp=1; } if(valve_status==0){ Elim=1; }else { Elim=0; } if(body_status==1&&distance<70){ PWM_SetCompare2(195); valve_status=1; delay_ms(3000); }else if(body_status==1&&distance>70){ PWM_SetCompare2(185); valve_status=0; } if(fire_status==1||(body_status==1&&distance>70)){ Beep=1; }else { Beep=0; } } } void OLED_Show_OnePage() { OLED_ShowChinese(16*0,16*0,16,16,1);//火 OLED_ShowChinese(16*1,16*0,17,16,1);//焰 OLED_ShowChar(16*2,16*0,':',16,1);// 字符 if(fire_status==1)OLED_ShowChinese(16*2+8,16*0,20,16,1);//有 else OLED_ShowChinese(16*2+8,16*0,21,16,1);//无 OLED_ShowChinese(16*0,16*1,43,16,1);//人 OLED_ShowChinese(16*1,16*1,44,16,1);//体 OLED_ShowChar(16*2,16*1,':',16,1);//:字符 if(body_status==1)OLED_ShowChinese(16*2+8,16*1,20,16,1);//有 else OLED_ShowChinese(16*2+8,16*1,21,16,1); //无 OLED_ShowChinese(16*0,16*2,63,16,1);//桶内容量 OLED_ShowChinese(16*1,16*2,64,16,1); OLED_ShowChinese(16*2,16*2,65,16,1); OLED_ShowChinese(16*3,16*2,66,16,1); OLED_ShowChar(16*4,16*2,':',16,1); OLED_ShowNum(16*4+8,16*2,distance,3,16,1); //数值 OLED_ShowString(16*6,16*2,"%",16,1); if(auto_mode==0){ OLED_ShowChinese(16*7,16*0,31,16,1); //手 OLED_ShowChinese(16*7,16*1,32,16,1); //动 }else{ OLED_ShowChinese(16*7,16*0,30,16,1); //自 OLED_ShowChinese(16*7,16*1,32,16,1); //动 } OLED_Refresh(); } void OLED_Show_TwoPage() { uint8_t a,b,c,d; if(option==1){a=0;b=1;c=1;d=1;} else if(option==2){a=1;b=0;c=1;d=1;} else if(option==3){a=1;b=1;c=0;d=1;} else if(option==4){a=1;b=1;c=1;d=0;} else{a=1;b=1;c=1;d=1;} OLED_ShowChinese(16*0,16*0,59,16,1);//消毒 OLED_ShowChinese(16*1,16*0,60,16,1); OLED_ShowChar(16*2,16*0,':',16,1);// 字符 if(Elim_status==1){ OLED_ShowChinese(16*2+8,16*0,24,16,a);// 开 }else{ OLED_ShowChinese(16*2+8,16*0,25,16,a);//关 } OLED_ShowChinese(16*0,16*1,69,16,1);//垃圾桶 OLED_ShowChinese(16*1,16*1,70,16,1); OLED_ShowChinese(16*2,16*1,67,16,1); OLED_ShowChar(16*3,16*2,':',16,1);// 字符 if(valve_status==1){ OLED_ShowChinese(16*3+8,16*1,24,16,b);// 开 }else{ OLED_ShowChinese(16*3+8,16*1,25,16,b);//关 } OLED_Refresh(); }五、项目成品效果图
六、项目总结
本项目成功实现了垃圾桶容量检测、人体感应、火灾报警、自动开盖及消毒功能的智能化管理,结合蓝牙App远程监控和手动/自动模式切换,提升了家用垃圾桶的实用性与安全性。系统运行稳定,各模块协同良好,具备较强的实用性和扩展性,适用于智能家居及物联网教学实践
七、包含资料
本资料免费分享,获取全套资料请看主页,并将告诉助手需要资料的项目编号,助手收到消息后,会发送资料。文章若对你有所帮助,期待点赞收藏,后续会持续分享各类单片机实战案例。
内容仅作为学习参考,有任何不妥之处,欢迎大家一起探讨!
资料获取:查看主页介绍“充哥单片机设计
以上归充哥单片机设计工作室所有,侵权盗图抄袭必究法律责任!