一、基本介绍

项目名:利用单片机开发智能垃圾桶
项目编号:mcuclub-dz-748
单片机:STM32F103C8T6
功能简介:
1、通过四个烟雾检测模块MQ-2将当前是否发生火灾,检测到烟雾进行声光报警提醒;
2、通过四个红外避障检测模块检测到人自动控制垃圾桶的开关;
3、通过语音识别模块SU-03T控制垃圾桶的开关;
4、通过四对分离式红外检测垃圾桶是否溢出,检测到溢出红色亮,没满绿灯;
5、通过4G模块AIR780将检测的数据传输到手机端;

二、资料总览

实物资料

请添加图片描述

三、32单片机部分资料展示

1、实物图展示

单片机型号:STM32F103C8T6
供电接口:TYPE-C
板子类型:PCB集成板,厚度1.2,两层板(上下层覆铜接地)
器件类型:元器件基本上为插针式,个别降压芯片会使用贴片式。
请添加图片描述

2、原理图展示

软件版本:AD2013
电路连线方式:网络标号连线方式
注意:原理图只是画出了模块的引脚图,而并不是模块的内部结构图
请添加图片描述

3、PCB图展示

由原理图导出,中间有一个项目编号,隐藏在单片机底座下,插入单片机后不会看到。
两层板,上下覆铜接地。
请添加图片描述

四、系统框图

绘制软件:VISIO
此次设计是基于单片机的智能垃圾桶的设计,该设计主要可以分为三部分:输入、输出和中控。中控部分采用STM32F103C8T6单片机作为主控芯片,主要是对输入进行处理然后控制输出。输入由五部分组成:第一部分是烟雾检测模块,通过该模块可以测量垃圾桶内是否发生火灾;第二部分是红外灯一体检测模块,通过该模块可以监测人手是否放在垃圾桶前以及提示垃圾桶是否满的状态;第三部分是分离式红外对射模块,通过该模块可以检测垃圾桶是否满;第四部分是语音识别模块,通过该模块可以识别打开或关闭各垃圾桶;第五部分是供电电路,通过该模块给整个系统进行供电。输出由三部分组成,第一部分是舵机模块,通过该模块可以控制垃圾桶桶盖的打开和关闭;第二部分是声光报警模块,当发生火灾时进行声光报警提醒。除此之外4G模块即作为输入也作为输出,将监测到的数据发送到手机端,手机端同时可远程控制垃圾桶桶盖。
请添加图片描述

五、部分程序展示

软件版本:keil5
注意:逻辑程序和驱动程序分开,分布于main.c和其他.c文件

/**********************************
函数名:定时器中断回调函数
传参值:无
返回值:无
**********************************/
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
	static uint32_t time_1ms_count = 0;
	static uint32_t time_count_5s = 0;
	
	static uint16_t time_duoji_khs = 0;
	static uint16_t time_duoji_cy = 0;
	static uint16_t time_duoji_yh = 0;
	static uint16_t time_duoji_qt = 0;
	
	static uint16_t time_duoji_khs_num = 0;
	static uint16_t time_duoji_cy_num = 0;
	static uint16_t time_duoji_yh_num = 0;
	static uint16_t time_duoji_qt_num = 0;

	if(htim->Instance == htim1.Instance)		//定时器1触发中断
	{
		time_1ms_count++;
		if(time_1ms_count >= 10)							//10ms计时
		{
			time_1ms_count = 0;
			flag_time_10ms = 1;
		}
		
		if(flag_begin_5s == 1)
		{
			time_count_5s++;
			
			if(time_count_5s >= 5000)						//5s计时
			{
				time_count_5s = 0;
				
				flag_finish_5s = 1;
			}
		}
		else
		{
			time_count_5s = 0;
			flag_finish_5s = 0;
		}
		
		if(flag_duoji_time_begin_khs == 1)		//开始计时
		{
			time_duoji_khs_num++;
			if(time_duoji_khs_num >= 3000)  		//定时3s
			{
				time_duoji_khs_num = 0;
				flag_duoji_time_end_khs = 1;
			}
		}
		else
		{
			time_duoji_khs_num = 0;
			flag_duoji_time_end_khs = 0;
		}
		
		if(flag_duoji_time_begin_cy == 1)				//开始计时
		{
			time_duoji_cy_num++;
			if(time_duoji_cy_num >= 3000)  				//定时3s
			{
				time_duoji_cy_num = 0;
				flag_duoji_time_end_cy = 1;
			}
		}
		else
		{
			time_duoji_cy_num = 0;
			flag_duoji_time_end_cy = 0;
		}
		
		if(flag_duoji_time_begin_yh == 1)				//开始计时
		{
			time_duoji_yh_num++;
			if(time_duoji_yh_num >= 3000)  				//定时3s
			{
				time_duoji_yh_num = 0;
				flag_duoji_time_end_yh = 1;
			}
		}
		else
		{
			time_duoji_yh_num = 0;
			flag_duoji_time_end_yh = 0;
		}
		
		if(flag_duoji_time_begin_qt == 1)				//开始计时
		{
			time_duoji_qt_num++;
			if(time_duoji_qt_num >= 3000)  				//定时3s
			{
				time_duoji_qt_num = 0;
				flag_duoji_time_end_qt = 1;
			}
		}
		else
		{
			time_duoji_qt_num = 0;
			flag_duoji_time_end_qt = 0;
		}
	}
	
	if(htim->Instance == htim4.Instance)			//定时器4触发中断
	{
		time_duoji_khs++;
		if(time_duoji_khs >= 200)
			time_duoji_khs = 0;
		if(time_duoji_khs < pwm_duoji_khs)
			DJ_KHS = 1;
		else
			DJ_KHS = 0;
		
		time_duoji_cy++;
		if(time_duoji_cy >= 200)
			time_duoji_cy = 0;
		if(time_duoji_cy < pwm_duoji_cy)
			DJ_CY = 1;
		else
			DJ_CY = 0;
		
		time_duoji_yh++;
		if(time_duoji_yh >= 200)
			time_duoji_yh = 0;
		if(time_duoji_yh < pwm_duoji_yh)
			DJ_YH = 1;
		else
			DJ_YH = 0;
		
		time_duoji_qt++;
		if(time_duoji_qt >= 200)
			time_duoji_qt = 0;
		if(time_duoji_qt < pwm_duoji_qt)
			DJ_QT = 1;
		else
			DJ_QT = 0;
	}
}
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐