基于51单片机智能垃圾桶
(仿真+程序+原理图+PCB+设计报告)
功能介绍
具体功能:
1.ULN2003驱动步进电机控制打开关闭垃圾桶;
2.一个红外对管检测有没有人,一个红外对管检测垃圾满;
3.若检测到人,垃圾桶自动打开,扔完垃圾后再自动关闭;
4.若检测到垃圾满了,声光报警,垃圾桶就不会自动打开;
5.这时可以按手动按键打开垃圾桶,清理垃圾;
添加图片注释,不超过 140 字(可选)
程序
#include <reg52.h> //包括一个52标准内核的头文件
#include<intrins.h>
#define uchar unsigned char //定义一下方便使用
#define uint unsigned int
#define ulong unsigned long//***********************************************
sbit HW1=P3^3;
sbit HW2=P3^5; //红外IO端口定义,HW1是检测垃圾是否满,HW2是检测是否有人扔垃圾
bit HW2_flag=0; //红外触发标志位
sbit beep=P3^4; //蜂鸣器端口定义
sbit led1=P1^0; //指示灯IO
sbit key1=P1^5; //按键IO
bit key1_flag=0; //按键按下标志位
uchar loop; //步进电机转动变量
bit hand_flag=0;
uint m_i; //电机转动次数计数
uchar ms,c_ms,p_ms=199;
uchar open_time=0;uchar beep_num; //蜂鸣器响次数控制变量
uchar open_flag=0; //控制电机转动与不转动总开关,置一,执行电机控制,否则不执行电机控制
bit open_flag1=1; //该变量,等于0,说明是开盖子,等于1是关盖子
uchar code fz[]= //正转数据
{0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09};uchar code zz[]= //反转数据
{0x09,0x08,0x0c,0x04,0x06,0x02,0x03,0x01};
void Delay800us() //短延时函数
{unsigned char i, j;i = 2;j = 139;do{while (--j);} while (--i);
}void proc() //正反转函数
{if(open_flag==1&&!open_flag1) //关{ P2=zz[loop]; //将正转数据赋值给P2端口,P2接的是步进电机loop=(loop+1)%8; //循环加,Loop变化范围是 0 - 7,这样结合上一句话就可循环将转动数据送给P2Delay800us(); //短延时一下,调节这个短延时,可以控制步进电机的转动速度,越小就越快m_i++; //变量加加,当加到1080,相当于送1080次电机转动数据,就停止加,同时停止驱动电机,1080是目测的,差不多刚好打开盖子的数据if(m_i==1080){m_i=0; //清零open_flag=0; //清零,关电机控制open_flag1=1; //数据反转}}else if(open_flag==2&&open_flag1) //开{P2=fz[loop]; //步骤和上面的基本一致,都是送电机转动数据,使其转动,然后转动1080次,就停止转动loop=(loop+1)%8;Delay800us();m_i++;if(m_i==1080){m_i=0;open_flag1=0;open_flag=0;}}
}
******//完整资料
***//***微信公众号:木子单片机********/
void dis_pose()
{if(!HW1) //当这个红外被触发,相当于垃圾桶满了{led1=0; //指示灯点亮if(!key1) //按键按下{if(key1_flag) //这个标志位只有当按键没按下的时候才会置一,功能是确保只执行一次{key1_flag=0; //清零,这样只有当按键松开之后才回去置一,才会再次执行if(open_flag1) //如果此时为关盖子{hand_flag=1; open_flag=2; //变量置 2 执行开盖子}else {hand_flag=0;open_flag=1; //如果是开盖子,执行这个,会去关盖子} }}else key1_flag=1; //按键松开,就置一}else {led1=1; //指示灯熄灭if(!HW2) //这个红外被触发,有人要扔垃圾{if(HW2_flag) //和按键的功能是一样的,确保只执行一次{HW2_flag=0; //清零,只有人离开才会置一if(open_flag1) open_flag=2; //执行开盖子}}else {HW2_flag=1;}}
}
硬件设计
使用元器件:
单片机:STC89C52;
(注意:单片机是通用的,无论51还是52、无论stc还是at都一样,引脚功能都一样。程序也是一样的。)
蜂鸣器;10uF电解电容;
30p瓷片电容;电源接口;
轻触按键;9012三极管;
5mm红色LED/黄色LED;
5P白插座+步进电机;
1K电阻;10K电阻;自锁开关;
ULN2003电机驱动+DIP16底座;
红外接收模块+3p排针;
12M晶振;导线:若干;
添加图片注释,不超过 140 字(可选)
流程图:
添加图片注释,不超过 140 字(可选)
设计资料
01仿真图
本设计使用proteus7.8和proteus8.9两个版本设计,向下兼容,无需担心!具体如图!
添加图片注释,不超过 140 字(可选)
02原理图
本系统原理图采用Altium Designer19设计,具体如图!
添加图片注释,不超过 140 字(可选)
03程序
本设计使用keil5版本编程设计!具体如图!
添加图片注释,不超过 140 字(可选)
04设计报告
一万一千字设计报告,具体如下!
添加图片注释,不超过 140 字(可选)
05设计资料
全部资料包括程序(含注释)、仿真源文件 、AD原理图、任务书、PCB、设计报告、流程图、实物图、元件清单等。具体内容如下,全网最全! !
添加图片注释,不超过 140 字(可选)
点赞分享一起学习成长。