资源描述
北京理工大学珠海学院2020届毕业设计智能循迹垃圾桶智能循迹垃圾桶摘 要智能寻迹垃圾桶以单片机为主控制中心,可以实现智能化地处理垃圾,当垃圾桶的感应装置感应到人或垃圾时就会实现自动开盖的操作, 当检测到人离开后,执行一定的延时操作并自动关盖;当垃圾达到最大容量后,检测模块便将检测到的相关信息传递给主控制中心,然后通过语音播报模块发出相应的提示信息,提醒相关处理人员该垃圾桶的情况。 该系统为垃圾的回收提高了多种方便,使环保工作人员的工作压力大大地降低了,让人们的生活向智能化更近一步,对保证社会环境的干净卫生具有重要意义。 关键词:单片机;智能感应;智能寻迹Intelligent tracking trash canABSTRACTThe intelligent trash can based on the single chip microcomputer takes the single chip microcomputer as the main control center, which can realize the intelligent garbage processing. When the trash can sensor senses the person or garbage, it will realize the operation of automatically opening the lid. When the garbage reaches the maximum capacity, the detection module will transfer the detected information to the main control center, and then issue the corresponding prompt message through the voice broadcast module to remind the relevant personnel of the trash can. This system improves various conveniences for garbage recycling, greatly reduces the working pressure of environmental protection workers, and makes peoples life more intelligent, which is of great significance for ensuring the clean and sanitary environment of the society. Key words: single chip computer; intelligent induction; voice prompt 北京理工大学珠海学院2020届毕业设计目 录1 前言11.1本设计的目的、意义及应达到的技术要求11.2本设计在国内外的发展概况及存在的问题21.3本设计应解决的主要问题22 本设计32.1总体方案设计32.2感应电路的设计42.3主控芯片设计42.4驱动电路的设计42.5电机的设计53 硬件设计53.1单片机模块53.1.2时钟电路73.1.3复位电路83.2语音处理模块83.3红外感应模块93.4 驱动模块94系统软件设计94.1编译工具keil简介94.2系统的软件设计94.3软件主程序流程图105 总结与展望105.1调试总结105.1系统总结11谢辞12参考文献13附录一:电路图141前言1.1本设计的目的、意义及应达到的技术要求随着科技的日新月异社会经济的高速发展生活水平的不断提高,人们经济水平逐步提高对应的对生活的品质追求也越来越高,城市化的发展不断地快速高效,城市规模快速增长所带来的高效快速的生活节奏、人口数量急剧增长所用所需也不断增多,这些增长同时也带来环境清洁的问题,垃圾的处理问题已经成为了人们思考的问题。而同样的传统的垃圾清理方式和工具也在被逐渐改良与淘汰垃圾桶在人们的生活中扮演了一个不可或缺的角色,它出现在了着人类走过了每一个时代并且是以不同的样式。而走到了当今的社会中成为了居家用品中的一员、酒店用品中更是必不可少不可或缺的。该如何更好地去保持环境的卫生呢?智能寻迹垃圾桶的出现就是一种可靠、低成本、可行的方案之一。随着人们逐渐意识到环保的重要和对于美观便捷的追求的普遍提高,清洁垃圾所使用的方法和工具的种类和数量也在不断改良和创新,人们更加注重所使用工具是否影响居家美观和是否能更加便捷更加多功能同时使用简单,而产品的研究方向也逐渐走向智能生活小巧便捷用最小的力达到最大的效果。智能垃圾桶也就应运而生这种可以实现智能感应的垃圾回收方式也就走进人们的视野,当智能循迹垃圾桶的感应装置感应到人或垃圾时就会实现自动开盖的操作,当检测到人离开后带有一定延时便会实现自动关盖的操作;当检测到垃圾桶中的垃圾已到达最大的容量时,单片机受到信息后通过语音模块提示相应信息,方便相关人员进行处理工作。 该系统为垃圾的回收提供方便,使环保工作人员的工作压力大大地降低,让人们的生活向智能化更近一步,恰恰生活智能化以此来解放人类劳动力以及生活质量的提升也是一直以来人们所追求的同时对保证社会环境的干净卫生具有重要意义。 新事物的出现有一定的意义,本文设计的智能寻迹垃圾桶的出现也有其自身的意义。垃圾桶的作为是回收垃圾的容器和清洁环境必要工具,如果垃圾桶的形象与周围环境不相容,那么垃圾桶的存在本身就是一种视觉垃圾。就比如现代化的高楼大厦却没有电梯一样,传统的普通垃圾桶不仅会与未来智能化生活家居产生违和感同时在实用性和便捷性上也远远不如创新的智能寻迹垃圾桶,它可以与周围环境融为一体。在保证环境卫生的同时,还能让人们在视觉上感到舒适。不仅如此,在垃圾桶的表面设计中还可以注入一些新颖的元素,充分利用垃圾桶的广告功能,来进一步提高人们的环保意识。 同时现在人们所追求的高生活质量很重要的一部分就是智能化,便捷化,美观化。智能循迹垃圾桶的出现并非是锦上添花而是进入新时代,科技智能化生活的不可或缺的一部分。干净,整洁,高效,智能这四点既是本设计的初衷与目标也是人们在对于家庭清洁乃至公共卫生未来的发展方向和目标。在大学四年的学习下,通过对本课题的研究,完成了对自身能力的测试,也在一方面开始与社会实际的运用接轨,在另一方面可以清楚地认识到电子方面的硬件知识以及嵌入式编程,同时在对课题的实现过程中也可以发现智能化程度的高低与资金投入之间的关系,为日后在电子方面的发展提供了参考依据;另一方面在对整个系统的搭建和调试过程中不断发现和解决问题,以及对该系统的控制方案不断进行改进和创新,自己的思维能力和调试能力都能得到有效提高。本次研究通过对STC系列单片机编程,C语言的学习,SPI通信协议等方面的深入学习,打牢了后续学习电子方面的基础,也通过这次实物的制作研究激发以后探索电子类设计的热情。通过本次设计也可以有效的提升自己对控制器的理解和使用熟练度,以待日后能够更好的使用它们服务社会。同时也期望此次设计能提升自己的技术水准与知识储备以期待能做出更好的作品。1.2本设计在国内外的发展概况及存在的问题在国外,垃圾桶的重要性得到了很早的认识,因此垃圾桶控制系统的设计和研究要比国内早得多。到目前为止,世界上许多国家已经实现了垃圾的分类和回收利用,比如许多太阳能垃圾箱,广泛使用太阳能设备的控制系统。例如早期的太阳能设备来控制的垃圾箱就出现在美国的纽约,它因为容量比传统的垃圾桶要大很多,所以它也被称为“大胃王”11。“大胃王”的工作原理是:利用阳光作为操作系统的能源,对垃圾的处理进行自动压缩,以此来实现大容量的操作。 “大胃王”大容量的功能,大大减少了环卫工人的工作压力,但它也有自己的弊端:第一、它的造价很高;第二、“大胃王”如果其受到损坏很难修复。“大胃王”出现后,英国剑桥学者结合英国当地环境和在前者研究的基础上,开发了另一种类似“大胃王”的太阳能垃圾桶控制系统13。它的原理跟大胃王差不多,不过它并不需要太多的阳光。因为它的结构里存在蓄电池提供动力能源,所以它正常工作所需外界的能源比较少。这种设计是基于英国经常出现雾天的环境而发明的。除此之外,环卫人员还可以通过手机智能地了解垃圾存放的问题,当手机接收到信息时,环卫工人就可以知道他们需要去哪个垃圾箱进行清洁。 目前,我国大多数智能垃圾桶控制系统都比较简单,基本上可以从功能及能源上分为两类:第一种智能垃圾桶是利用红外测距技术或超声波传感来检测是否有物体靠近,当有物体靠近垃圾桶的时时候,传感器会驱动电机运行,使垃圾箱具有自动翻转功能。第二种类型是太阳能垃圾箱,就像“大胃王”的原理一样。但这种太阳能垃圾箱需要在阳光充足的地方才能使用,商业价值不高、使用范围小。这两类智能垃圾桶的功能还不够完善,但它们存在一定的价值,有待我们去更近一步的挖掘和研究。1.3本设计应解决的主要问题针对传统的垃圾桶,不能满足人们的卫生要求,不够美观、不利于垃圾的放置和处理等。传统垃圾桶实际作用仅仅只是容器用来对垃圾的储存而本设计的实用将不止于此。本设计将单片机STC89C52引入垃圾桶的结构中,设计了一种智能寻迹垃圾桶,其通过红外传感器的感应,给予单片机进行相应指令,从而实现垃圾桶的自动开盖和延时关盖,同时通过红外传感器来判断垃圾桶里的垃圾是否已满,如果达到了它的最大容量,传感器便会给予单片机相关的信息,单片机通过相应的处理后,启动语音模块播报来提示相关信息。该设计实现了保护环境的作用,提高了人们的卫生理念,对社会及家庭的卫生清洁具有重要作用。2 本设计 为了解决人们在日常生活行为中传统垃圾桶仅仅作为固定容器使用而非清洁环境的一环所带来的不便。本设计通过添加自动循迹动能使得使用者无需到其他房间寻找垃圾桶或是准备多个垃圾桶放在房间各处既不美观也会导致空间的浪费或者遗忘导致没装满的垃圾产生异味或细菌。同时添加语音控制开关盖,使得既不用担心传统垃圾桶开盖麻烦不卫生也不会像无盖开放式垃圾桶那样影响美观或是垃圾产生异味影响居家整洁。2.1总体方案设计基于单片机来工作的智能垃圾桶的整体组成结构如下图2.1所示,在本次毕业设计中以单片机作为为主要控制模块,感应模块检测是否有人来扔垃圾或扔垃圾的人已经离开,然后将信息传递给单片机做相关的处理;驱动模块在收到单片机的指令之后,驱动电机进行自动开盖或自动关盖的智能操作;语音模块在垃圾桶里的垃圾满了之后,收到单片机的指令进行播报相关的信息提醒处理人员垃圾已满。以此相结合来构成一个智能寻迹垃圾桶。电机驱动模块单片机语音模块传感器模块 图2.1 整体结构图2.2感应电路的设计传感器模块在本次设计里相当于充当眼睛的作用,所以传感器的选择十分重要,既要考虑到成本方面,同时还要考虑它的灵敏度和抗干扰16。经过多种方案的对比本次设计选择使用光红外传感器。它的工作方式是将感应到的待测目标的红外辐射特性进行红外系统的设定,所以它的检测不容易受到一些无关因素的影响。红外传感器在当今现代化社会的各行业生产实践中都具有不可替代的作用,红外传感器的使用将伴随一些探测设备还有许多的高新技术的应用而更加成熟,灵敏度和性能都将得到很大程度的提高17。由于其技术的成熟度比较高,所以本设计里选择用红外传感器来实现智能寻迹垃圾桶的自动开盖操作的检测和自动关盖的检测、以及检测垃圾的容量情况等,可以说是一种不错的方案。2.3主控芯片设计本次智能寻迹垃圾桶的主控制模块的芯片是单片机,它是STC公司旗下的51系列中的一款产品,此芯片使用的是CMOS8位控制器。它本身就具有8K大小的Flash存储,相比较之下比以前那些STC89C52系列单片机内存更大,多了一倍不止,而且芯片上的引脚也都兼容市场上其它的一些51单片机,使用得很普遍的编程器都能够在它的内部进行程序编程以及代码烧录2。诸多的优点使得它能够更大程度烧录非常多的程序进去,常用的编辑器足够满足很多开发来使用,进而比许多传统的51单片机更具优势与竞争力。同时它的编写代码方式更加的高效以及灵活,能够更加有效的解决问题。因为它内部具有8K大小的可编程存储FLASH,所以在进行嵌入式开发时遇到困难,都能够通过使用STC89C52单片机来编程以及解决问题,实现效率更高、使用更加的方便。STC89C52的功能还包括掉电保护,在发生掉电的时候,如果它的内部RAM内容出现暂时有效的冻结,并且出现了停止单片机的工作状态,那就只有等到下一个复位或中断信号发生才结束,而单片机在这时候才能够重新开始工作,从而能够对单片机起到掉电保护的作用。因此本次使用STC89C52单片机相对于本系统的设计理念以及功能实现来说,都是最合适的。2.4驱动电路的设计智能寻迹垃圾桶的设计,驱动电路实现当收到单片机指令时,驱动直流减速电机进行智能开关盖的操作;经过多方资料的分析对比,本次驱动电路选择的是H桥驱动,其具有驱动效率高,安全性好,能够承受本次设计的驱动电压,能够通过本次设计的驱动电流等特点。2.5电机的设计在本次智能寻迹垃圾桶中,电机是很重要的一个元器件,其在实现垃圾桶的智能开关盖中占据着重要地位。在本次设计中我选择的电机是直流减速电机,匀速直流电动机具有方便操控、高过载能力可经受多次的来自负载的冲击,并且具有广泛的范围调整能力,同时能够进行多次快速无级启动、制动以及反转;从而实现非常多的不一样的特殊运行要求5。经检验,本次设计所使用的电机符合本人对本次设计的需求。273 硬件设计3.1单片机模块本次我所设计的单片机部分所使用的的执行元件 我们采用STC-51系列的STC89C52。STC89C52是一种低压、高性能的CMOS 8位微处理器,具有4K字节可编程和擦除只读存储器(FPEROM)。该装置采用ATMEL高密度非易失性存储器制造技术制造,与工业标准的McS-51指令集和输出引脚兼容。ATMEL的STC89C52是一个高效的微控制器,因为它将一个多功能的8位CPU和一个闪烁存储器集成在一个芯片中2。STC89C52单片机为许多嵌入式控制系统提供了一种灵活、廉价的解决方案。所以本次选择以其作为单片机部分的主要器件,主要特性:与MCS-51 兼容 4K字节可编程闪烁存储器 寿命:1000写/擦循环数据保留时间:10年全静态工作:0Hz-24Hz三级程序存储器锁定128*8位内部RAM32可编程I/O线两个16位定时器/计数器5个中断源可编程串行通道低功耗的闲置和掉电模式管脚说明:VCC:供电电压。 GND:接地。P0口:P0口为8位漏电开路双向I/O口,每脚可吸收8TTL门电流。当P1端口的引脚第一次写入1时,定义为高阻输入。P0可用于外部程序数据存储,可以定义为数据/地址的第8位。在FIASH编程中,P0端口作为源代码的输入端口。当FIASH得到验证时,P0输出源代码,此时必须打开外部P0。P1口:P1端口为8位双向I/O端口,内部有上拉电阻,P1端口缓冲器可以接收输出4TTL门电流。当P1端口的引脚被写入1时,它被内部拉高,可以作为输入。当P1端口从外部向下拉至较低时,会输出电流,这是由内部上拉造成的。在FLASH编程和验证中,P1端口作为第8位地址接收。P2口:P2端口是一个8位双向I/O端口,内部有一个上拉电阻,可以被P2缓冲器接收,输出4 TTL门电流。当“1”写在P2端口上时,它的引脚被内部上拉电阻拉起并用作输入。P2引脚作为输入,从外部降至输出电流。这是由于内部拉升。当用于访问外部程序内存或16位外部数据存储时,P2端口输出地址的高八位。当地址“1”被给出时,它利用了内部上拉。当读写外部8位地址数据存储时,P2端口输出其特殊功能寄存器的内容。P2端口在FLASH编程和验证过程中接收高8位地址信号和控制信号。P3口:P3引脚为8个内部上拉电阻的双向I/O端口,可接收和输出4个TTL门电流。当P3写入“1”时,它们被内部拉到一个较高的级别并用作输入。作为输入,由于外部下拉处于较低水平,P3端口将输出电流(ILL),这是由于上拉。P3口也可作为STC89C52的一些特殊功能口,如下表所示:表3.1 P3口的一些特殊功能口口管脚 备选功能P3.0 RXD(串行输入口)P3.1TXD(串行输出口)P3.2 /INT0(外部中断0)P3.3 /INT1(外部中断1)P3.4 T0(记时器0外部输入)P3.5T1(记时器1外部输入)P3.6 /WR(外部数据存储器写选通)P3.7/RD(外部数据存储器读选通)P3口同时为闪烁编程和编程校验接收一些控制信号。3.1.1芯片选择方案一:采用STC89C52微型控制芯片,STC89系列单片机是STC公司推出的以8位微处理器芯片,以低耗高能为主打旗号,采用的是冯诺依曼结构,是一款非常适宜新手学的单片机,因其I/O口很多,以前的不少家用东西都可以看到它的身影,但这款单片机不能采集模拟量,对我们在需要采集电压时会很不方便,所以只要在没有AD采集的功能用处上这是一款比较实用的单片机,一般造价也比较低,因其本身结构以及位数限制了处理速度,因此逐渐被功能更加强大并且功耗也低的STM32系列所取代。方案二:采用STM32F103RCT6单片机作为主控芯片,STM32系列单片机是意法半导体公司推出的32位微处理器,STM32系列芯片主要以ARM Cortex-M为核心,这种单片机的内部是自己可以采集到模拟量的,能够进行AD模数转化,而且它的处理速度是传统单片机的好多倍,比STC89系列单片机处理速度快许多倍,而且它还不需要我们外部电路的复位,自身带有复位,使用起来非常方便。综合以上分析和未来改进方面的情况,还有操作难易程度以及资源的最大利用化等情况,最终确定选择STC89C52的芯片。3.1.2时钟电路时钟电路在单片机的构成里是占据很重要的一部分,它由一个晶体和两个陶瓷电容器构成。其在单片机系统中所起到的主要作用和功能就是结合内部的电路,产生单片机如果正常运行的话所必须要具备的时钟频率,可以说它的作用及功能就是为单片机能欧正常执行命令提供了所需的重要的保障,通常情况下我们使用的时钟电路饰所提供的时钟频率越高,那么整体的单片机的运行速度也就会越快,从而就使得所属系统的工作的效率也会提高。重要的是在设计时钟电路时,我们需要注意晶振频率的选择,选择合适的晶振频率可以使本次系统所能够发挥的效果达到最佳6。 3.1.3复位电路为了更方便的对本次的设计进行调试,本次设计还设置了复位电路,当系统运行不稳定时,便可通过复位按键使CPU及系统各个部件达到初始态状态。本次设计中所使用的的复位电路由按键、电阻和电容组成,外接至单片机的RST引脚。复位电路中的电容器一开始是没有电的,当通电后,电源便会给电容器充电,然后电容器两端的电压逐渐发生变化,这时候电容器电阻的两端的电压接近于0.0V,RST处于低电平,所以系统正常工作。 当按下复位按钮后,相当于电路导通,电容从两端放电,电容电压返回到0V,电阻两端电压升高,RST引脚变为高电平,单片机系统自动复位。其电路原理图如下所示:3.2语音处理模块ISD是美国生产的语音芯片系列,其电源电压3-5V,在录放模式下, 在纵贯模式下,直接开关闭合,对麦克风说话会从喇叭里扩音播放出来,组成喊话器功能,因为该模式下的麦克风放大同时通过AGC自动增益调理和带通滤波器,其音质比一般的话筒放大器要良好,而且不会呈现喇叭过载的情况8。如若用户不需要纵贯模式,并且对电路的静态耗电有请求,就能够改变麦克风的接入方法,将麦克风下端的偏置电阻接到RECLED端,如许,在日常由于RECLED端为高电平麦克风没有电压电流,全部电路的耗电几乎为零。但是此方式下纵贯模式无法工作。若是用户只需要电路做放音用,可以在芯片录好音测试无误后,将芯片的REC端持久接低电平。取消REC按键,这样可以防止意外抹音8。若是用户想建造变调电路,此刻ISD芯片也可以了,本来的ISD系列芯片的内部时钟牢固,小几率产生变调效果,而ISD1820P可以便利的实现,只需要灌音和放音时的外部振荡电阻不同就可以改变声音的录入和播放速率,详见振荡电阻和取样率表。将ROSC端所接的振荡电阻改成电位器可以无级调节语音的快慢,录入的时候越短音质越好,录入的时候越长音质越差。ISD1820P的分量拷贝,允许借助ISD1425的编程复制和ISD1820P复制模块的方案。用户可以先将所需的音编程建造在ISD2532或ISD2560芯片上,然后即可向ISD1820P拷贝模块上的芯片拷贝即可,时间长度在模块上事前设定8。3.3红外感应模块本次使用的反射式光电传感器所涵盖的工作原理是由传感器红外发射管发射出红外光,而接收管根据反射回来的红外光强度大小来进行控制的,故被检测的工件或物体其外部表面必须有能够吸收并反射红外光的相间部位,这样传感器的接收管才能有效的截止和饱和,达到计数检测的目的。而如果使用中光电传感器的话其前端面与被检测的工件或物体表面必须保持平行,这样光电传感器的转换效率最高。光电传感器的前端面与反光板的距离保持在规定的范围内。通过小车感应黑线来作为寻迹手段。3.4 驱动模块 本次驱动模拟是通过电机的转动实现窗帘打开关闭的功能,其驱动模块是高电压,大电流的电动机驱动器芯片ULN2003。该芯片的额定功率为25W,包含两个H桥高压和大电流全桥驱动器,可以驱动直流电动机和步进电动机。标准逻辑电平信号控制使用驱动电机。该芯片可以驱动两相步进电动机或四相步进电动机,并且还可以驱动两个直流电动机。在本次智能寻迹垃圾桶的设计中,电机是很重要的一个元器件,其在实现窗帘的转换占据着重要地位。在本次设计中我选择的电机是直流减速电机,匀速直流电动机具有方便操控、高过载能力可经受多次的来自负载的冲击,并且具有广泛的范围调整能力,同时能够进行多次快速无级启动、制动以及反转;从而实现非常多的不一样的特殊运行要求。经检验,符合本次设计的需求。3.5 电源模块基于单片机的语音控制小车控制系统中的所有模块基本都是由5V直流来进行供电的。电源的整体电压通过USB或者简单的电池盒进行逻辑正常工作的供电,当开关按下的时候就能实现整个系统的供电。系统的稳定供电电压必须是5.0V如果低于5.0V则会造成模块供电不足,会直接引起系统硬件电路故障,而设计电源模块的目的就是为了保证整个系统的电压维持在稳定的5.0V。在设计的过程中,要保证无论输入一个怎么样的电压,经过电源模块后,供给每一个模块的电压必须能够使各模块正常运行。在本系统的电源模块中,我们所使用的模块都是由5V供电,所以我们使用电容对输入电源进行滤波处理,以保证每一个模块的正常工作电压14。4系统软件设计4.1编译工具keil简介KEIL是微软公司推出的专门用于硬件变成调试的工作软件,能够给开发人员一个统一的开发病平台,便于各部门的统一调用,本平台所编成以及生成的代码能够快速的变成对应的文件,在整个系统的调用以及调试工程中也能够在友好快捷的界面提示系完成,这个平台在系统完成调试编码后就能够把整个代码转化为让硬件系统识别的机器代码格式。然后通过硬件数据进行上位的代码烧录工作,整个过程能够方便快捷的实现。4.2系统的软件设计本系统的软件设计将基于系统硬件组成及功能要求来开展,分别对各模块来完成软件设计及程序的编写工作。最后将系统的软硬件部分结合进行调试,排查可能存在的相关问题。根据系统描述,系统的软件设计将按照以下几方面的内容来开展:(1)基础模块功能对比,测试方案是否具有可行性。(2)主程序设计。即系统总体的软的设计,主要为单片机控制单元的程序设计;(3)数据采集模块软件的设计。主要包括红外传感数据和语音模块的采集设计。源程序展示#include REG51.h#include oled.h#include bmp.h#include sfr P1M1=0x91;sfr P1M0=0x92;sbit ALERT_PIN=P20;#define ALERT_ON ALERT_PIN = 0#define ALERT_OFF ALERT_PIN = 1 volatile unsigned char gucUartRcvData = 0xaa;volatile unsigned char gucBatteryVoltage = 0xff; unsigned char gucWorkMode = 0; sbit ZuoPinQain = P21; sbit ZuoPinHou = P20; sbit YouPinQain = P22; sbit YouPinHou = P23; unsigned int guiAlertCount = 0; unsigned int gui1msCount = 0; unsigned int gui10msCount = 0; unsigned int gui1sCount = 0; unsigned int gui2sCount = 0; extern unsigned char gucCheState; void Delay5us() _nop_();_nop_();_nop_();_nop_(); _nop_();_nop_();_nop_();_nop_(); _nop_();_nop_();_nop_();_nop_(); _nop_();_nop_();_nop_();_nop_(); _nop_();_nop_();_nop_();_nop_(); _nop_();_nop_();_nop_();_nop_(); _nop_();_nop_();_nop_();_nop_(); _nop_();_nop_();_nop_();_nop_(); _nop_();_nop_();_nop_();_nop_(); _nop_();_nop_();_nop_();_nop_(); _nop_();_nop_();_nop_();_nop_(); _nop_();_nop_();_nop_();_nop_(); void DelayN5us(unsigned int count) unsigned int i = 0; for (i = 0; i count; i+) Delay5us(); sbit LeftHongwai = P35; sbit RightHongwai = P34; void XunjiProcess() if (0 = LeftHongwai) & (0 = RightHongwai) ZuoPinQain = 1; ZuoPinHou = 0; YouPinQain = 1; YouPinHou = 0; else if (1 = LeftHongwai) & (0 = RightHongwai) ZuoPinQain = 0; ZuoPinHou = 0; YouPinQain = 1; YouPinHou = 0; else if (0 = LeftHongwai) & (1 = RightHongwai) ZuoPinQain = 1; ZuoPinHou = 0; YouPinQain = 0; YouPinHou = 0; extern void DAC_WR_Val(unsigned int dat);unsigned char gucPwmCount = 0; void Interrupt() interrupt 1 TH0 = (65536 - 922) / 256; / TL0 = (65536 - 922) % 256; gui1msCount+;gucPwmCount+;if (10 = gucPwmCount)gucPwmCount = 0;if (1 = gucCheState)if (gucPwmCount 5)XunjiProcess();elseZuoPinQain = 0;ZuoPinHou = 0;YouPinQain = 0;YouPinHou = 0; if (0 = gui1msCount % 1000) gui1sCount+; void Timer1() interrupt 3 void SendData(unsigned char Dat) unsigned char i=0; SBUF = Dat; while (1) if(TI) TI=0; break; unsigned char gucCheState = 0;/0 1unsigned char gucDianjiCommand = 0; void serial () interrupt 4 using 3 if (RI) RI = 0; gucUartRcvData=SBUF; if (1 = gucUartRcvData) gucCheState = 0;ZuoPinQain = 0;ZuoPinHou = 0;YouPinQain = 0;YouPinHou = 0; else if (2 = gucUartRcvData) gucCheState = 1; if (3 = gucUartRcvData) gucDianjiCommand = 1;/ else if (4 = gucUartRcvData)gucDianjiCommand = 2; void XiaocheProcess(void)if (0 = gucCheState)/0 1 2 3 4ZuoPinQain = 0;ZuoPinHou = 0;YouPinQain = 0;YouPinHou = 0;else if (1 = gucCheState)ZuoPinQain = 1;ZuoPinHou = 0;YouPinQain = 1;YouPinHou = 0;else if (2 = gucCheState)ZuoPinQain = 0;ZuoPinHou = 1;YouPinQain = 0;YouPinHou = 1;else if (3 = gucCheState)ZuoPinQain = 0;ZuoPinHou = 0;YouPinQain = 1;YouPinHou = 0;else if (4 = gucCheState)ZuoPinQain = 1;ZuoPinHou = 0;YouPinQain = 0;YouPinHou = 0;#define MOTOR_MODE_QUANBU 0#define MOTOR_MODE_MOTOR1 1#define MOTOR_MODE_MOTOR2 2#define MOTOR_MODE_SLOW 0#define MOTOR_MODE_NORMAL 1#define MOTOR_MODE_QUICK 2 unsigned chargucMotorMode = MOTOR_MODE_QUANBU;unsigned char gucMotorSpeedMode = MOTOR_MODE_SLOW;#define MotorData P1 unsigned char code phasecw18 =0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09; unsigned char code phaseccw18=0x01,0x09,0x08,0x0c,0x04,0x06,0x02,0x03; unsigned char code phasecw28 =0x10,0x30,0x20,0x60,0x40,0xc0,0x80,0x90; unsigned char code phaseccw28=0x10,0x90,0x80,0xc0,0x40,0x60,0x20,0x30; void MotorShangsheng(void) unsigned char i; unsigned int j; for (j = 0; j 80; j+) for(i=0;i8;i+) if (MOTOR_MODE_MOTOR1 = gucMotorMode) MotorData=phasecw1i; else if (MOTOR_MODE_MOTOR2 = gucMotorMode) MotorData=phasecw2i; else MotorData=phasecw1i | phasecw2i; DelayN5us(10);/ MotorData=0; void MotorXiajiang(void) unsigned char i; unsigned int j; for (j = 0; j 80; j+) for(i=0;i8;i+) if (MOTOR_MODE_MOTOR1 = gucMotorMode) MotorData=phaseccw1i; else if (MOTOR_MODE_MOTOR2 = gucMotorMode) MotorData=phaseccw2i; else MotorData=phaseccw1i | phaseccw2i; DelayN5us(10); MotorData=0; / void MotorStop(void) MotorData=0xff; void LajitongPro(void)if (1 = gucDianjiCommand)MotorShangsheng();gucDianjiCommand = 0;else if (2 = gucDianjiCommand)MotorXiajiang();gucDianjiCommand = 0;sbit HongwaiGanyingPin = P36; int main(void) u8 t; unsigned int ui1msCount = 0; unsigned int ui1sCount = 0;P2 = 0xff;HongwaiGanyingPin = 1; TMOD = 0x21; TH0 = (65536 - 922) / 256; TL0 = (65536 - 922) % 256; ET0 = 1; TR0 = 1; TH1 = 0xFD; TL1 = 0xFD; PCON = 0; TR1 = 1; ET1 = 0; SCON = 0x40; REN = 1; PT1 = 0; PT0 = 1; ES = 1; EA = 1; while(1) if (ui1msCount = gui1msCount % 11) continue; ui1msCount = gui1msCount % 11; if (ui1msCount 10) continue; ui1msCount = 0;LajitongPro();if (0 = HongwaiGanyingPin)MotorShangsheng();delay_ms(1000);delay_ms(1000);delay_ms(1000);MotorXiajiang(); if (0 = gui10msCount % 10)/500ms gui10msCount+; 4.3软件主程序流程图智能寻迹垃圾桶的主要程序红外模块数据的处理,也就是寻迹,还有语音信号的处理,其中包括中断优先级的设计,大体程序流程图如下所示:图4.1 程序流程图主要程序如下:int main(void) u8 t; unsigned int ui1msCount = 0; unsigned int ui1sCount = 0;P2 = 0xff;HongwaiGanyingPin = 1; TMOD = 0x21; /初始化TMOD,定时器0,方式1 TH0 = (65536 - 922) / 256; /装填计数 TL0 = (65536 - 922) % 256; ET0 = 1; /开放定时器0中断控制位 TR0 = 1; /定时器0开始计时 TH1 = 0xFD;/波特率9600 TL1 = 0xFD; PCON = 0;/SMOD置0,波特率不加倍 TR1 = 1; ET1 = 0; SCON = 0x40; REN = 1; PT1 = 0; PT0 = 1; ES = 1; EA = 1; /开放所有中断while(1) if (ui1msCount = gui1msCount % 11) continue; ui1msCount = gui1msCount % 11; if (ui1msCount 10) continue; ui1msCount = 0;LajitongPro();if (0 = HongwaiGanyingPin)MotorShangsheng();delay_ms(1000);delay_ms(1000);delay_ms(1000);MotorXiajiang(); if (0 = gui10msCount % 10)/500ms任务 gui10msCount+; 5 总结与展望5.1调试总结在首先整体进行硬件排查以及调试的过程中,首先就要进行各个模块以及主要的处理主单片机之间的管脚引线师傅安装合理,如果相对应的数据传输引脚没有完成合理的接通,那么在后期软件逻辑处理的时候不能得到关键的数据值,那么对于整个系统的软件错误排查就不能方便快速的找到对应的问题,然后检查设备的规格和极性是否有错误。然后,如果电路板和电源之间存在短路,请使用万用表解决此问题。 当整个硬件完成连接后,确保不同的硬件模块都能正常数据传输后,然后要实现的工作就是进行逻辑的处理,首先就是检测各个模块数据的获取进行检测,是否能够进行相关数据的完美获取以及数据获取格式是否是我们所要求的具体格式。然后也要对于不同模块接口之间的数据传输进行相关的调试,使得整个数据处理流程能够稳定安全的处理下去,然后在各个数据获取时候进行相关页面的提示以至于用户用来进行系统运行阶段的检测,软件代码逻辑调试也是整个系统需要的重要步骤。在整个系统的软件以及硬件各模块测试调试后,我们要进行相关的整体错误提示工作的完成,就是在相应的数据监测警报后,我们要实现其中界面的友好提示,使得用户能够清楚系统具体那个模块出现了问题,通过不同的模块函数的编写以及调试的实现,真个系统功能的开发并不是一帆风顺的,只有通过不同的反复调试以及不同的反复揣摩工作,然后才能实现相关的功能,再多测的编码调试中才能发现不同的问题bug,在最后以一个完美的系统展现在用户面前,能够顺利的完成整个基于单片机的智能寻迹垃圾桶控制系统的设计与实现。5.2系统总结在这个设计中,我花了大量的时间去理解系统开发中使用的知识,经过这段时间的努力工作最终完成了智能寻迹垃圾桶的设计。 本文以实现智能寻迹垃圾桶的设计与实现为开发为目标,详细地阐述了它的软硬件的设计与实现。首先就智能寻迹垃圾桶的设计与实现的背景与发展作了简单的介绍,并阐述了本项目的研究目标;接下来根据模块设计需求讲述了系统实现所需要使用到的相关技术以及该技术在本设计中的应用;其次展示了系统总体设计图以及模块的软硬件设计;接下来就是各子模块功能的实现,包括STC89C52开发板、传感器等等进行AltiumDesigner硬件画板设计,以及软件功能模块的keil5编写实现和创建云平台项目;最后对模块进行了相关测试,并对项目进行了总结。通过本课题的研究,设计的智能寻迹垃圾桶的设计与实现基本达到了预期的效果,实现了一个垃圾桶红外感应检测是否有人自动开关盖等功能。但由于模块设计的复杂度以及精确度还不够高,实用性和易用性方面有待探讨。在设计实现的过程中,遇到了很多问题,也深深体会到自己知识度的缺乏,虽然最后都解决了,但是系统功能完善性并不是很强。谢辞本项目从设计到实现再到最后的测试经历了漫长而艰辛的过程,我要衷心地感谢那些帮助我和关心我的人。首先,能够完成本毕业设计及论文,要感谢我的导师,不仅在毕业设计中给予我们建议,同时也在实习期间关心我们的住宿生活以及毕业设计完成情况,在她耐心的指导下,论文的不足被一一修改,严谨的教学态度和平易近人的工作作风,使我收获匪浅,感受良深,感谢导师提供的宝贵意见以及耐心教导,希望我不厌其烦的请教没有让你感到烦恼。我的论文指导老师,真的是让我感到非常值得尊敬的老师。当我心中有疑惑的时候面临迷茫的时候,她总能孜孜不倦地引导我,一步一步地让我找到前进的方向,让我知道该怎么做,我们必须认真对待。勇于克服困难,相信未来,我会做得更好。本项目从设计到实现再到最后的测试经历了漫长而艰辛的过程,我要衷心地感谢那些帮助我和关心我
展开阅读全文