1.简介 本次主要是利用单片机设计并制作一套智能垃圾箱。要求以单片机为控制核心,通过红外传感器检测是否有人扔垃圾,并自动打开垃圾箱盖,扔完垃圾后再自动关闭。 主要内容包括: (1)红外对管传感器检测是否有人扔垃圾 (2)垃圾桶满报警 (3)步进电机驱动电路的设计
2.硬件设计 (1)总体硬件设计 硬件主要以单片机为核心,通过软件和硬件的结合实现检测到人自动打开垃圾桶盖的效果,并且垃圾桶满了之后有声光提醒。主要通过三大块来设计,包括步进电机驱动电路、检测电路和蜂鸣器报警电路等。 (2)步进电机驱动电路 步进电机驱动电路采用了ULN2003晶体管阵列芯片,它是一个单片高电压、高电流的达林顿晶体管阵列集成电路。它是由7对NPN达林顿管组成的,它的高电压输出特性和阴极箝位二极管可以转换感应负载。单个达林顿对的集电极电流是500mA。 (3)红外检测传感器电路 本次设计采用了两个反射式红外传感器。一个作为周围人体检测,另一个作为检测垃圾是否装满传感器。当红外传感器无检测到目标对象时,传感器为低电平;当传感器检测到目标对象时,传感器为高电平。 (4)硬件电路图 3.软件设计 (1)软件流程图 智能垃圾桶系统的软件需要同时是否有人、垃圾桶是否装满、步进电机驱动等任务。在本设计中,当红外检测到有人时,垃圾桶自动打开,从最后一次检测到无人开始计时,5秒后自动垃圾桶关闭。垃圾桶满了之后会声光报警提醒。 (2)主程序源码
void proc() //正反转函数 { if(open_flag==1&&!open_flag1) //关 { P2=zz[loop]; loop=(loop+1)%8; Delay800us(); m_i++; if(m_i==1080) { m_i=0; open_flag=0; open_flag1=1; } } else if(open_flag==2&&open_flag1) //开 { P2=fz[loop]; 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; } 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; } } } void main() { TMOD=0x10; //定时器0,定时器1,16位工作方式 EA=1; //打开总中断0 TH1=0x4c; TL1=0x00; TR1=1; ET1=1; while(1) { if(open_flag==0) { P2=P2&0xf0; m_i=0; } else { proc(); } } } void time_1() interrupt 3 { TH1=0x4c; TL1=0x00; ms++; dis_pose(); if(!HW1) { p_ms++; if(p_ms>=200) { p_ms=0; beep_num=8; } } else { p_ms=199; } if(!open_flag1) { if(hand_flag==0) { if(HW2) { c_ms++; if(c_ms>=100) { c_ms=0; open_flag=1; } } else { c_ms=0; open_time++; if(open_time>=200) { open_time=0; beep_num=6; } } } else { if(HW2&&HW1) { c_ms++; if(c_ms>=100) { c_ms=0; open_flag=1; hand_flag=0; } } else { c_ms=0; } } } else { c_ms=0; open_time=0; } if(ms>=2) { ms=0; if(beep_num!=0) { beep_num--; beep=~beep; } else { beep=1; } } }
源码+PCB+电路图 下载:关注公众号,首页回复“智能垃圾桶”获取资料