单片机技术在智能垃圾箱中的应用
2022-03-07熊国栋
熊国栋
(荆楚理工学院计算机工程学院,荆门 448000)
0 引言
随着现代城市和科学技术的不断发展和进步,人们的生活水平与过去几年相比有了很大提高,追求健康生活环境的时代已经开启。因此,相关的环保产品和设备也不断涌现。在日常生活中,有相当一部分的垃圾箱露天没有盖子或是盖子需要手动打开。通常有盖子的垃圾箱由于卫生状况不佳,导致人们不愿意用手直接触摸打开,甚至将垃圾直接放在一边放任不管。在炎热的夏天,如果清理不及时,垃圾会散发出难闻的刺鼻气味,增加细菌扩散的机会。同时,一些医疗机构的废物会滋生病毒和传播疾病,从而危及人们的健康。但目前,市场上自动控制垃圾箱开闭及相关产品非常少见,因此,开发一种能自动控制开闭并具有一定智能程度的垃圾箱已成为当前迫切需要解决的问题之一。
1 概述
1.1 国内外发展现状
目前世界上许多国家和地区已经实现了废物的合理处置,一些太阳能设施得到了广泛的应用。例如,英国剑桥大学结合当地环境,开发了符合当地实际需要的垃圾箱控制系统。该设备内置了一个小型压缩机,垃圾被压缩到一定大小以释放更多的存储空间,并由太阳能电池阵列供电。此外,通过手机和相关设备,附近的环卫工人可以快速了解垃圾存放情况,以便及时清理。
进入21 世纪,人工智能技术得到了广泛应用,我国智能家居产业发展迅速。作为智能家居的细分市场,智能垃圾箱的市场规模也在不断扩大。政策方面,随着垃圾强制分类的实施,中国垃圾分类行业的快速发展带动了智能垃圾桶的市场需求。就专利数量而言,中国约有3000 项与智能垃圾箱相关的专利,其中实用新型专利约占60%。自动包装分类技术可以提高垃圾分类和垃圾处理的效率,备受青睐。
1.2 项目开发目的
其目的是开发一种智能垃圾箱,主要实现红外检测、自动开关以及声光提醒等多项功能,以避免其影响人们的日常生活环境,降低细菌传播疾病的风险,保障人们的身心健康,而且也方便提供给人们卫生、清洁的垃圾投放环境。
2 需求分析
2.1 技术可行性
本设计的控制芯片,可以选择以STC89C52型单片机为中心,利用红外传感器检测周围是否有垃圾抛掷行为。如果有,它会自动打开垃圾箱的盖子,然后在一段时间后自动关闭。本设计的主要框架包括:①红外传感器,用于检测是否有人需要扔垃圾;②垃圾箱装满后,打开声光报警器;③驱动步进电机的电路设计。
通过以上分析,基于单片机技术设计智能垃圾箱是可行的。
2.2 经济可行性
本设计经济压力小,设计成本低,市场上同类设施少。此外,如果这种设计被正式使用,它将在废物的储存和管理方面发挥积极作用。
2.3 社会可行性
该设计的实现有利于公共场所和家庭厨房、浴室垃圾的储存,对于社会来说,具有一定的积极意义。
3 硬件设计
3.1 系统框架
本设计的硬件主要基于STC89C52 单片机,采用软硬件结合的方式实现盖子打开的效果,并添加声光报警器,提醒此时垃圾箱已满。主要通过红外检测电路、电机驱动电路和声光报警电路三部分来保证系统的正常运行。总体系统框图如图1所示。
图1 总体设计框图
3.2 单片机最小系统
3.2.1 STC89C52单片机简介
STC89C52 单片机是近年来推出的新一代51核单片机,51 系列单片机均属于8 位的CPU,为确保相应的代码效率稳步提升,需要积极地关注变量长度的合理控制[1]。涵盖闪存程序存储器、脉宽调制、通用异步收发器、串行外围接口模块。由于采用了模块化设计,因此该型号的单片机在扩展性和便携性方面都有良好的性能,在各种工业控制领域都有广泛应用。其封装引脚图如图2所示。
图2 STC89C52引脚图
3.2.2 主要特点
(1)作为8051 单片微控制器的增强版,它有6 或12 个时钟机器周期,并与以前的8051 型号的代码完全兼容。
(2)工作电压为5.5~3.3 V(5 V 微控制器)或3.8~2.0 V(3 V微控制器)。
(3)工作频率在0~40 MHz,而普通8051微控制器的工作频率在0~80 MHz,实际工作频率甚至高达48 MHz。
(4)存储程序的空间可以达到8 k 字节,并且有4096位的操作存储空间。
(5)具有32 个公共导入和导出,P1~P4 复位后上拉较弱,可用作准双向口。漏极开路时可以通过P0 端口输出,当没有上拉电阻时可以使用总线扩展,具有上拉电阻时可以输入和输出信号。
(6)该芯片不需要专业的编程/模拟器。通过引脚P3.0,P3.1 可以在几秒钟内将程序下载到芯片上。
(7)具有重复使用功能,并将提供监控能力。
(8)有3个16位定时/计数器。
(9)PowerDown 可通过下降沿或低电平外部中断唤醒。
(10)通用异步串口、定时器软件可以实现完整的多个UART。
3.2.3 引脚功能
VCC(40针):电源电压。
VSS(20针):接地。
引脚32 至39 分别属于芯片的P0 端口,为P0.0至P0.7,这是一个具有漏极开路功能的8位双向I/O 端口。当所有引脚驱动8 个TTL 负载时,它们可以用作输出端口。通过为端口P0 输入“1”,端口P0 也可以用作高阻抗输入端口。P0端口具有低8位地址和8位多路复用总线,可以在访问外部程序和数据存储时提供服务。由于该接口具有良好的通用性,被广泛应用于各种设备,如计算机、打印机等。当需要从外围设备或存储过程读取或写入信息时,只需从端口将其插入即可。此时,内部上拉电阻将启动电源。使用闪存编程时,此端口起到接收指令信号的功能。在验证程序是否有问题时,需要使用外部上拉电阻来验证指令信号输出。
引脚1 至8 属于端口P1,对应于P1.0 至P1.7。该端口是一个具有上拉电阻的8 位双向输入/输出端口。通过输出缓冲器的输入和输出电流可以实现4 个TTL 输入。端口的“1”输入通过内部阻力增加,然后可以用作输入端口。当用作输出端口时,外部下拉区域将由于内部下拉而输出电流信号。P1 端口还具有一些附加功能,比如计时器。
引脚21 至28 统称为P2 端口,对应于P2.0至P2.7。它们用作8 位双向输入/输出端口,具有内部阻力以传输数据,必要时可用作更高的8位地址总线。
P3 端口作为标准传输接口,每个引脚也有其独特的功能,详见表1。
表1 P3引脚功能表
RST(9引脚):复位输入。
表示允许的地址锁存信号输出(ALE)的引脚为30,当访问其他外部ROM 时,可以锁存较低的输出脉冲。
引脚31 的VPP 是控制外部ROM 访问的引脚。
引脚18 和19(XTAL1 和2)分别用于连接到外部时钟电路的输入和输出端口。
3.3 复位电路
为了在内部执行复位指令,单片机需要在RST 引脚上输入高电平信号并保持两个机器周期。一般情况下,电路中的复位电路会在通电时自动复位并手动复位按钮。
在复位电路中,所谓的上电自动复位通常通过对外部电容器进行充电和放电来实现。一般来说,将电路电压上升时间设置在一毫秒内可以达到自动上电复位的效果。
在某些情况下,通电复位的效果往往很差,因此需要选择按钮手动复位。本系统的设计是使用手动复位按钮。按键手动复位有两种方式,一种是电平复位,另一种是脉冲复位。电平复位可通过RST 和电源连接实现。按下按钮手动复位电路如图3 所示。时钟频率调整为12 M,电容器选择为10 uF,电阻为10 KΩ。
图3 复位电路图
3.4 时钟电路
本设计所用的单片机可以由内部时钟信号产生,也可以由外部来实现。内部时钟电路图见图4。在石英晶体与XTAL1和2连接后,可以形成自激振荡器以产生内部时钟脉冲信号,此时形成振荡电路。在电路中,图4所示的两个电容器C2和C3启动稳定频率并快速启动振动。电容值可从5~300 pF 中选择,典型值为30 pF。晶体振荡的范围通常为1.2~12 MHz,典型值设置为12 MHz。
本设计中的时钟电路采用晶体振荡器电路,具体电路图如图4所示。
图4 晶体振荡器电路图
3.5 步进电机驱动模块
3.5.1 步进电机简介
步进电机是一种通过脉冲信号产生角位移的机械式电机。电机的每个旋转角度表示接收到一个脉冲信号。步进电机是按照稳定的角度一点点地旋转,为了达到精确的定位效果,可以利用输入脉冲信号的个数来控制;同时,可以通过改变输入脉冲信号的频率来操纵电机的速度和加速度,从而达到调速的效果。
本设计使用的步进电机为28BYJ-48 型四相八拍混合式步进电机,工作电压为直流电源电压,5~12 V 之间。当步进电机需要保持旋转时,可以将脉冲信号连续输入。转子旋转幅度是一个固定值,因为每个脉冲信号只改变步进电机的功率状态一次。当转子通过变桨时,表明通电状态已完成一个循环。四相电机的公共功率模式包括单相绕组四拍(A-B-C-D-A-…),两相绕组四拍(AB-BC-CD-DA-AB-……)和八拍(A-AB-B-BC-C-CD-DA-A-…)。
驱动模式如表2所示。橙色、黄色、粉色和蓝色分别对应A、B、C和D相。
表2 步进电机驱动方式
5伏电源连接到红色线,单片机P1.3端口连接到橙色线,P1.2 端口连接到黄色线,粉色线连接到P1.1端口,蓝色线连接到P1.0端口。
3.5.2 ULN2003芯片
STC89C52 单片机端口输出信号小,无法支持电机操作,此时可以使用ULN2003 芯片将信号放大后再传输到相应的电机接口。
ULN2003 芯片是一种高压大电流集成电路,包含7对达林顿管,通过高压输出和钳位二极管实现电感负载的转换。
芯片与MCU 的接口电路相对简单:1 针连接到MCU 的P2.3 端口,2 针连接到单片机的P2.2 端口,3 针连接到MCU 的P2.1 端口,4 针连接到MCU 的P2.0 端口,可用于单片机与电机驱动器之间的数据传输。
ULN2003芯片特点:
(1)输出的额定集电极电流可达到500 mA。
(2)高压输出:50 V。
(3)与多种逻辑类型兼容的输入。
(4)可作为步进电机驱动器使用。
图5是系统的驱动电路,它控制着作为整个系统核心的各个模块的工作。
图5 步进电机驱动电路
3.6 红外传感器模块
设计中使用的红外传感器具有同时发射和接收红外线的功能,对环境光具有良好的适应性。通过发射管发射一定频率的红外线,与障碍物接触后,传感器的接收管反射并接收到红外线。在下一步中,经过比较器电路的进一步处理后,绿色指示灯将点亮,同时,传感器的信号输出端口将输出低电平数字信号。它具有安装速度快、干扰因素少、应用范围广的特点。
人体表面温度通常稳定在一个固定值,因此人体产生的红外光的波长是恒定的。身体释放的红外线被传感器探头吸收,然后菲涅耳透镜将其聚集在热释电元件上,打破电荷平衡,然后输出电荷信号。判断电荷后,便可知周围有人,通过电机打开盖子。在一段时间没有感应到人体后,垃圾桶将关闭盖子。
为了防止人与其他障碍物混淆,可以调整传感器安装的位置,将其固定在垃圾桶的开口处,并与垂直防线的箱壁形成适当的角度,使用电位器调整组件的检测距离,从而大大降低误判的概率。图6是本设计中红外传感器的电路图。
图6 红外传感器模块电路图
3.6.1 配置模块参数
(1)当部件上的绿灯亮起时,表示部件前面有障碍物。此时,低电平信号将继续从输出端口输出。该元件可以以35°的角度检测2~30 cm的范围。电位器顺时针移动,检测范围会更大;否则,它会减少。
(2)传感器的输出口可以直接将信号传输到单片机的输入口,也可以使5 V继电器动作。
(3)传感器的工作电压应保持在直流3~5 V之间。红色LED 灯亮起时,表示电路已连接到电源。
3.6.2 模块接口描述
(1)传感器的VCC 端口可以连接到3.3~5 V的电压(可以直接连接到5 V或3.3 V的单片机);
(2)GND外接GND;
(3)OUT小板数字输出接口(0和1)。
3.7 声光报警模块
红外传感器将低电平信号导入单片机,然后利用单片机使红灯亮起,报警装置的扬声器也启动。没有输入信号会自动关闭。电路图如图7所示。
图7 报警模块电路图
4 程序设计
4.1 系统程序总体设计
智能垃圾箱的软件程序大致可分为三部分:步进电机驱动、红外传感器检测和声光报警。在本系统设计中,要对某人进行传感器检测,垃圾可以自动打开;当最后一次没有检测到人时,时间将开始5秒计时,然后垃圾箱将自动关闭。为了提醒人们垃圾桶已满,系统还安装了声光报警器。系统程序的总体流程如图8所示。
图8 系统程序总体流程图
4.2 控制电机正反转程序设计
为了实现垃圾箱的自动抓斗功能,可以利用电机的正反转来达到预期的效果。系统开始工作后,需要确定电机是否需要向前旋转。如有必要,AB、BC、CD 和DA 的电源应实现正向旋转,并在一定延迟后变为反向,即AB、AD、CD 和CB 充电。图9 是系统驱动子程序的流程图。
图9 驱动子程序流程图
本设计步进电机驱动器如下:
4.3 自动和手动切换程序
在日常生活中,垃圾箱常常是满的。为了确保环境卫生,当垃圾箱装满时,有必要将自动模式切换到按钮打开。此时,可以使用检测内部高度的红外传感器输出低电平信号,并通过判断程序使垃圾箱只能通过按钮打开。按下按钮打开并清洁后,系统将切换回自动模式。图10是该程序的流程图。
图10 模式切换流程图
切换程序的具体代码如下:
4.4 声光报警程序设计
该系统可以使用指示器和蜂鸣器警告人们垃圾桶已满。蜂鸣器直接连接到微控制器的P3.4 端口,红灯连接到P1.0,绿灯连接到P1.1。T0在主功能中配置为16位定时/计数器,并设置一定的初始值。模块的程序代码如下所示。
4.5 系统主程序设计
以上内容完成了各模块程序的设计。在这一部分,将几个模块的内容结合起来形成一个整体,这是整个系统的核心主程序。以下是主程序的具体代码。
5 系统调试
在软硬件设计完成后,有必要对关键部分进行系统调试。通过系统调试,可以显示和解决硬件焊接留下的故障和软件编程中的错误。
整个系统的硬件和软件调试相辅相成。在调试过程中可以发现并纠正一些硬件错误。一般来说,一些明显的硬件故障需要先解决,然后用软件程序进行进一步的调试和解决。可以得出结论,系统的基础是硬件,如果硬件没有通过,软件程序的设计就无法启动。
5.1 硬件调试
在硬件方面,找出制造过程中是否存在布线错误是调试的重点。如果电路板存在错线、虚接或短路、断开等问题,则需要注意电源和地线是否正确。检查芯片和组件是否损坏等。
以上故障排除方法是基于原理图,参考PCB,以确保原理图与物理板一致。检查电源是否异常,尤其是电源短路和正负极连接错误。使用万用表检查地址总线和控制总线是否正常工作。此外,还需要检查组件是否出现故障。根据设计要求,检查其型号、规格和安装,确保部件不烧坏,安全。此过程可通过替换方法消除。
整个系统的原理图如图11所示。
图11 系统示意图
5.2 软件调试
系统软件负责管理整个系统中硬件的各个部分,使其能够协调工作,也就是说,软件决定了整个系统能够实现什么功能,所以软件调试就显得尤为重要。目前在单片机编程过程中主要有汇编语言和C 语言两种[2]。该程序是靠C语言实现的。C语言的开发工作是单片机开发的基础,也是整个开发环节的基本要素[3]。采用“自顶向下、逐步求精”的程序设计原则,才能使整个应用系统程序结构清晰,满足单片机的系统需求[4]。因为系统的设计可以分为几个部分,为了避免编程混乱带来不必要的麻烦,设计采取模块化编写程序。确定每个模块没有问题后,将几个部分组合起来,开始全面准备。
具体开发步骤如下:
(1)安装软件。在KEIL 的网站上可以下载到软件KEILC51 的安装包,跟随软件提示安装即可。
(2)创建C 源文件。首先,建立一个新项目,在新项目中添加已有的程序文件。然后,建立一个新的程序文件,在新文件的文字编辑窗口中编写程序,生成C源文件。
(3)编译并调试。软件操作者将程序调整到调试模式,使用仿真器在源程序一级进行程序调试,对已建立的源文件纠错,同时编译源程序,在使用C51编译器的基础上生成目标文件。
(4)生成.hex文件[5]。
图12 的外观表明程序编译正确,生成了硬件操作所需的.hex文件。
图12 程序编译图
如果软件程序编译无误,则表明语法正确,但不能保证程序能按预期运行。这里测试逻辑是否正确,软件模拟可以选择keil进行调试。
在调试主菜单中debug的start/stop debugSession,以进入调试器的工作模式。调试界面中的按钮控制程序的运行,左边是复位按钮、程序的连续运行、停止、单步执行等。
如果要使程序从头开始运行,可以单击“重置”来模拟MCU 的重置功能。Keil软件在调试模式下,程序可以在单个步骤中执行,当然也可以连续执行语句。所有指令语句都是按顺序执行的,不会停止。优点显而易见:执行速度快,可以看到执行的整体效果,即最终结果是对还是错;缺点也很明显:一旦程序中出现错误,就很难确定问题的确切位置。此时,需要使用单步执行,每执行一条指令即停止,需要手动单击执行按钮将运行以下指令,此时可以查看执行此指令后获得的结果,以及预期的数据比较和分析,以确定程序问题。当程序较大时,效率低下变得更加明显。因此,对于确认无错误的程序段,可以连续运行;对于怀疑有错误或容易出错的地方,可以逐步运行。这样,调试的效率将明显高于逐行检查错误的效率。
本次设计的调试如图13 所示。程序中未发现问题,运行正常。
图13 程序调试图
5.3 系统仿真
仿真可以在Protues软件中进行,作为对电路问题的分析,物理仿真软件特别可靠,功能极其优秀,仿真分析各种模拟器部件以及集成电路等。为了保证芯片和元器件的合理使用,本设计利用它对整个系统进行了全面的检查和调试。
整个系统的仿真图如图14 所示。由于Protues软件中没有红外传感器,因此使用两个按键开关模拟更换。
图14 系统仿真图
6 总体测试
系统软硬件按预期运行后,开始系统设计的整体调试。在前一部分中,Keil 软件用于模拟测试,但它毕竟是一个模拟环境。此时,需要将导入的程序刻录并记录到单片机中,用电源来检测系统是否能完成预期的效果。有些硬件问题可能需要导入软件程序才能发现,软件也需要硬件配合。
在整个调试过程中,发现系统开始运行后垃圾箱的盖子没有按预期工作,而且开口太小,垃圾无法正常放入。在检查电路图并确保硬件连接正确后,确定电机运行角度不够,因为程序输出的脉冲信号数量太少。经过对输入脉冲信号数的反复计算和调试,整个系统最终达到了预期的效果。
在整个调试完成后,对系统设计对象进行了仿真实验。图15 是设计的实物图,杯子代表垃圾箱。在实验中,可以通过在垃圾箱前面放置物体来模拟人扔垃圾的情况,并且可以用废纸覆盖垃圾箱来检测内部传感器。系统接通电源后,系统工作指示灯亮起,红外传感器感应垃圾桶周围的物体,电机旋转90 度,表示垃圾桶自动翻盖,垃圾抛完后5秒内未检测到人,电机反转,从而实现人走后盖子的闭合。
图15 设计实物图
该系统有两个红外传感器,当物体阻挡红外传感器盒的高度检测时,垃圾箱充满光线,蜂鸣器开始工作,以提醒垃圾箱已满,应进行清理。电源关闭后,系统指示灯熄灭。
7 总结与展望
在本实践中,设计了一种具有全报警、自动开闭的控制系统。本设计通过查阅网上相关资源和书籍,获得有效的信息,最终确定了系统的总体设计,并将其分为几个模块,以便于更详细的分析工作。对系统的总体设计和各个组成部分进行了详细的分析和调试。该系统主要依靠红外传感器模块、电机驱动模块、声光报警模块三部分来维持正常运行,考虑到有垃圾箱装满的情形,还增加了手动按钮打开功能。
当然,智能垃圾箱的设计还有很多不足之处,本设计只是对智能垃圾箱内部进行了一个非常初步的设计,也可以在此基础上增加很多实用功能,比如垃圾自动包装可以利用电机驱动的链条来实现,可以通过相应的传感器和组件进行自动垃圾分拣,这在将来都是可能的。