版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
目录18816摘要 绪论研究背景随着社会的快速发展与城市化进程的加快,人们的生活水平和生活质量显著提高,但与此同时,城市垃圾的产生量也在不断增长。垃圾的及时处理和分类管理已成为现代城市治理中亟待解决的重要问题[1]。传统垃圾桶因功能单一、操作不便,无法满足人们对健康、便利以及智能化的需求。手动开盖的垃圾桶在疫情期间暴露出了卫生隐患,同时,垃圾桶溢满却无人处理的问题也时有发生,这不仅仅影响环境卫生,还增加了管理成本[2]。这些垃圾如果不及时和得到妥善处理,它不仅会侵蚀我们居住的领地,并且还会污染我们赖以生存的水资源。“垃圾桶”是我们日常生活中,最为常见最为实用的收纳垃圾的装置,随着垃圾分类的风刮来,垃圾桶集千万关注于一身,一枝独秀。垃圾桶的发展史,可以反映出一个社会的发展阶段,甚至还可以反映出一个国家的文化,各个时期的垃圾桶有着其固有的特色。随着城市的发展,科技技术的不断革新,居民的生活垃圾不再是毫无用处的一个废弃物,它拥有着巨大的开发价值。现今,如何有效率的分类和回收这些垃圾至关重要。在20世纪英国,首先实行了垃圾分类回收,在街道上放置分类桶,回收可用的资源,这种方式也在全球盛行。然而“智慧城市”的提出,人们对生活质量的要求越来越高,街道分类桶的智能化已成为了必然趋势。如图1.1各时期的垃圾桶造型。图1.1各个时期的垃圾桶目前的市场上也有很多种垃圾桶,有些普通简易点的垃圾桶、有些带盖子的脚踏垃圾桶、也有带分类属性的环保垃圾桶以及最近市场上火的智能垃圾桶。智能垃圾桶又分为很多种-图像识别垃圾桶、自动声控垃圾桶以及语音识别垃圾桶,它们各有各的优势,也各有各的缺点。但相比于传统的垃圾桶而言,智能垃圾桶在外观上更加时尚,色彩上也充满活力,功能上也更加人性化、多样化,相比起传统垃圾桶,智能垃圾桶的优势是十分明显的-更加的智能化。研究的目的及意义人们对垃圾的数量和种类日益增长,以及对环境污染愈发严重的问题越来越重视,保护环境从我做起的观念逐渐提高,通过对垃圾分类的管理来减少生活垃圾的处置、实现地球资源可再生利用化以及改善人们生存环境的质量,从而使得我们构建的社会更加绿色环保和宜居。传统垃圾桶的不足,让聪慧的人类开发出了新型低功耗的智能垃圾桶,它们能高效的工作,方便快捷,并且具有智能时代的气息,各式各样的垃圾分类处理产品也在应势而生。我想智能垃圾桶诞生的意义在于科技与环保融为一体,人们对于节能环保的观念有更深度的思考,资源反复再利用,整个社会能在某个阶段周而复始、生生不息地运转。同时,智能垃圾桶也是便捷的、易操作的并且也是安全节能的,只有这样开发出来的产品才能够得到市场的认可。当前,智能垃圾桶的种类有很多,但是都有个共同的问题--成本高,降低成本是一个棘手的问题;此外,有的智能垃圾桶电源控制部分设计得并不是很好,待机功耗大,供电的方式比较单一;还有些城市,在一些地方,将智能垃圾箱做得很漂亮,但是并不实用,没有考虑到不同使用者的具体需求,从而浪费了设计的研发费用,这些都是当前智能垃圾箱无法被广泛接受的主要因素。近年来,随着物联网、嵌入式系统和人工智能等领域的快速发展,对废弃物的智能化处理提出了新的要求。因此,研究和研制智能化垃圾箱,不仅有很大的实用价值,而且还有很大的社会效益。首先,在环保方面,利用溢位探测、声、光两种预警功能,能够让环卫工人对其进行有效的清扫,防止其漫溢对周围的环境产生影响。其次,利用声音控制及自动开启等特性,可降低使用者与垃圾箱的直接碰触,提高了垃圾的卫生及方便程度。通过对实际生活中各种环境因素的分析,提出了一种基于环境因素的环境负荷监测方法,为实现智慧城市环境下的废弃物治理工作,提高人们对环境质量的认识,提高人们对环境质量的认识,提高人们对环境质量的认识。该项目通过将先进技术与用户的日常生活融合,促进了智能终端的广泛应用,起到了示范作用,有利于推进“智慧家庭”与“智慧城市”的深入发展。国内外研究现状国内研究现状在中国,以传感器技术、人工智能与物联网技术相结合为代表的智能垃圾箱研究是近几年快速发展起来的一种新技术。为了提高垃圾的检测、分类和管理效率,研究者们还在不断地进行着多维度的革新。清华大学科研小组将红外线和物联网相结合,研制出一套基于无线网路通讯的垃圾箱管理系统[3],极大地改善了城市垃圾箱的运作效能;北京科技大学的研究小组利用多源信息融合与人工智能的方法,完成了对漫溢垃圾的探测与自动分拣[4];华南科技大学在此基础上,采用了语音互动和自然语言处理等方法,使得垃圾箱在使用过程中变得更为友好、智能。上述研究结果显示,中国已经建立起一套比较完备的智能化垃圾箱的技术系统,对城市的公众环保及家居废弃物的治理具有现实意义[5]。国外研究现状在国内外,对垃圾分类的研究也已有较大发展,特别是在深度学习、区块链、机器人操控等领域。麻省理工大学研究小组使用深度学习神经网路,研发出一套高精确度的废弃物分类方法[6],提出了一种新颖的垃圾识别方法;德国慕尼黑科技大学的这项研究利用区块链的方法,使废弃物处理资料变得透明且不易被窜改,极大地提高了废弃物再利用的效能[7];东京大学的研究小组已经让垃圾箱拥有了自动运动的功能,可以让它更容易地应用于家居和办公环境中。随着世界范围内对垃圾筒的研究,各领域的科技相互渗透[8],本项目的研究成果将推动我国的废物管理走向自动化和智能化,并为世界范围内的环保问题提供重要的科技支持。系统方案设计系统总体方案设计智能垃圾桶系统采用单片机进行主控,通过红外传感器进行人体检测,当检测到有人则自动开盖,垃圾桶的开关则是通过步进电机进行控制。系统内通过超声波测距模块进行溢满检测,当检测到距离小于阈值则代表溢满就会控制蜂鸣器进行声光报警。另外还通过压力检测模块检测垃圾桶内的重量,当检测到压力超过设定阈值也会进行声光报警。系统内通过按键进行超声测距以及压力阈值的设定,检测到数据通过显示模块进行显示。为了让垃圾桶的使用更加方便,系统内设置了语音控制开关的方式,大大加强了系统的智能性和便捷性,系统框架如图2.1所示。图2.1系统功能框图系统功能模块选型主控模块选型方案1:STC89C52单片机STC89C52是一种以8051为核心的单片机,其在单片机中的使用已经有很多年了。该体系结构已被广泛证明,其稳定可靠,适用于长时间运行。它的价格比较便宜,特别是对于那些只有很少预算的工程来说。基于8051体系结构的普遍使用,STC89C52拥有强大的软件和软件,包括编译器,调试器,编程器,以及社群资源[9]。方案2:HT48F224单片机HT48F224着重于降低功率消耗,特别适用于那些需要高功率消耗的电源装置,并能增加其寿命。该芯片内部集成了大量的模拟函数,例如:A/D/A/D/A/D变换器,这些都使其能够很好地适应各种模拟信号的要求[10]。针对一般情况下,成本较低或对系统性能的需求较小的情况,STC89C52单片机为系统的设计和实现提供了一种既经济又容易实现的方法。其8051结构保证了该系统的稳定性与稳定性,同时,其外部设备的大量接口以及软件的支援也保证了整个系统的发展。因此选择方案1,STC89C52如图2.2所示。图2.2STC89C52选型图红外检测模块选型方案1:DHT11温湿度检测模块DHT11是一款经济实惠的数字式温湿度传感器,适用于基础的环境监测需求。DHT11提供了一个性价比高的解决方案,非常适合预算有限的项目。DHT11温度测量范围为0-50°C,湿度测量范围为20-80%RH,分辨率为温度1°C,湿度1%RH。模块在湿度测量方面,存在一定精度误差[11]。方案2:SHT40温湿度传感器SHT40是一款高精度的数字式温湿度传感器,适用于要求较高的应用场景。SHT40提供了高精度的测量结果,温度精度为±0.3°C,湿度精度为±2%RH。SHT40具有较快的数据采集和响应速度,适合需要实时反馈的系统。模块使用I²C接口,易于与嵌入式系统集成[12]。DHT11提供了一个价格实惠且易于集成的解决方案。尽管其测量精度不如SHT40,但对于大多数基础应用来说,其性能足以满足需求,同时可以显著降低系统成本。因此选择方案1,DHT11如图2.3所示。图2.3DHT11选型图溢满检测模块选型方案1:HC-SR04超声波测距模块HC-SR04是一款具有广泛用途的超声测距模组,具有性价比高、性价比高等特点,深受用户喜爱。该仪器使用40千赫的超声频段,最远可达到4m,适用于大部分近程或中程的测量。这个模组的界面非常简洁,所以它的复杂度被降低到了最小,因为它可以很容易地与诸如微处理器之类的装置相结合[13]。方案2:MaxBotixMB1240超声波测距模块MaxBotixMB1240是一种具有30-500公分距离的高性能超声距离模组。MB1240具有比HC-SR04更大的射程,更精确的测试结果。这种模组具有更大的探察角度,可以更好地适用于各种不同的环境。该方法具有更高的检测精度和更高的检测精度。HC-SR04超声定位器具有性价比高,界面简单易用,并且得到了广大用户的普遍支持。HC-SR04具有2cm至4m的射程,其成本合理,适用于大部分短距离至中型的使用。因此选择方案1,HC-SR04模块如图2.4所示。图2.4HC-SR04选型图称重检测模块选型方案1:HX711称重检测模块HX711是一款24位模数变换器,它用于称重传感器,测量准确度高,噪音低。HX711能够实现24比特的数码输出,因此能够满足对高精确度的需求。该组件只耗电极少,可有效地提高电池续航能力,适用于那些长期使用的嵌入式装置[14]。方案2:FSR402称重检测模块FSR402是一种利用阻抗改变的力敏元件来测量砝码的方法。FSR402能产生一个与所受压力成比例的类比电压,从而使讯号的处理流程变得简单。具有广泛的质量测试能力,可满足不同的测力值及质量要求。该组件具有更薄的厚度,易于装配,并能与多种建筑结合在一起。HX711由于其精度高、性能稳定等特点,可以用于大部分的嵌入式设备进行称重。虽然其它一些组件,例如FSR402,更灵活,更简洁,但是HX711在性价比与准确度上取得了很好的折中。因此选择方案1,HX711模块如图2.5所示。图2.5HX711选型图语音识别模块选型方案1:LU-ASR01语音识别模块LU-ASR01是一个先进的语音识别解决方案,以其卓越的识别准确度和丰富的功能脱颖而出。该模块能够实现高达95%的语音识别率,并且支持多种语言的识别。LU-ASR01内置了一个大容量的语音命令库,允许用户自定义并保存多达100条指令[15]。方案2:SRS-300语音识别模块VSR-100是一种节能的声音辨识模组,适用于长期使用和由电池驱动的装置。这款手机能完成诸如“开灯”,“关灯”,“播放音乐”等简单的声音指令,同时还能发出8个声音指令。VSR-100的电压调节能力很强,适用于各种类型的嵌入式应用。与VSR-100相比,LU-ASR01的语音辨识准确率高(95%比对75%),且可定制的命令更多(8个比对100个),使其更加灵活多样。LU-ASR01具有更快速的反应能力,特别适用于那些要求立即回馈的场合。因此选择方案1,LU-ASR01如图2.6所示。图2.6LU-ASR01选型图数据显示模块选型方案1:OLED12864显示模块OLED12864是一种128x64象素的普通黑白OLED显示器模组。该产品是基于有机电致发光材料自身的特点,具有较高的反差,广的视野,甚至在太阳直接照射的情况下仍能保持良好的显示。REF_Ref6442\r\h[16]。方案2:TFT彩色显示模块ST7735ST7735作为一种新型的彩色显示器,具有较高的解析度及较强的色彩呈现能力,适用于要求较高之影像及彩色影像之场合。由于使用了背光源,所以TFT萤幕在呈现高亮度的同时,也会消耗大量的电力。OLED12864比TFT屏幕要小得多,特别是在需要长期使用电池的情况下。这个程序只要求只有单纯的文字或者黑白图像,而OLED12864就可以很好地解决这个问题。因此选择方案1,OLED12864如图2.7所示。图2.7OLED12864选型图系统硬件设计系统主控电路设计其中,以STC89C52为控制单元,主要完成了主控电路,时钟电路,复位电路,以及振荡器等电路的实现。其中,控制电路通过在VCC上加上一个去耦电容来实现对+5V的供电,再加上一个去耦的电容来进行稳定的供电,晶振部件使用11.0592MHz的晶振,而负载电容一般是22pF,从而能够给CPU工作、定时器以及通讯等工作。I/O端口(P0,P1,P2,P3)被用作外部设备的控制器,EA管腿用于决定存储器的种类,以及用于编程和资料的内部存储器,以及通过管针和寄存器来设置诸如中断和计时器之类的函数。重置回路由RST引脚,10kΩ的上拉电阻,10µF的退耦合电容及键来实现,当开机或出现故障时,可使MCU回到原来的位置。当重置时,按下按钮将RST管脚向下拉动以启动重置,松开后,通过上拉电阻使其回复到高电平,从而使MCU从重置中返回到普通的工作模式[17],系统主控电路如图3.1所示。图3.1系统主控系统电路图数据采集电路设计红外检测电路设计DHT11传感器的结构设计简单却实用,主要由湿度传感器、温度传感器、信号处理电路和数据通信接口组成。湿度传感器采用电容式原理,通过电极间的电介质层测量环境湿度。温度传感器则通常使用热敏电阻(NTC型),其电阻值随温度变化。模块VCC引脚提供工作电压,通常连接到单片机的3.3V电源;GND引脚连接到单片机的地线,形成完整电路回路;DATA引脚将数字信号传输给单片机的GPIO口;NC引脚不需连接,温湿度检测电路如图3.2所示[18]。图3.2温湿度检测电路图溢满检测电路设计其中,HC-SR04超声定位器的内部部分包括收发两部分。当外界刺激源被激发时,激发式换能器内部的压电片会迅速地发出一系列的高频超声。然后,在该接收线路中,所述的压电陶瓷单元对从所述靶面上所反射回来的超声信号进行接收。该系统采用内置的控制回路对所收到的信号进行分析,并将其变换成脉宽格式,从而得到从发送到接受之间的间隔,并将其转化为可以进行测距的数据。在线路上,VCC管脚与5V供电相连,GND管脚与地线相连,以保证线路的稳定性;三管脚接受微控制器发出的触发讯号,发起发出超声脉冲,回路管脚则用以接受回波讯号,并与MCU的数位输入端子相连。单片机通过读取Echo引脚的返回信号计算超声波往返时间,从而测算物体距离[19]。溢满检测电路如图3.3所示。图3.3溢满检测电路图称重检测电路设计HX711是一种高精密24位A/D变换器组件,它由供电管脚(5V供电,接地)、信号管脚(DT输出的数字信号,SCK输入的时钟信号)以及一个增益选择管脚(VBIAS设置增益)组成。内置高精密可程式增益放大(ProgrammableProgrammableAmplifier,PGA),24位模数变换器,时钟发生器及资料寄存器。主要包括:放大器对负载敏感元件的弱讯号进行放大,ADC完成模数变换,时钟产生电路保证数据的稳定性;利用VCC与GND管脚的电源,DT管脚与MCU的数码管脚相连,再加上VBIAS设置的增益,可以达到高精度的称重,压力检测电路如图3.4所示。图3.4压力检测电路图语音识别电路设计LU-ASR01语音识别模块由麦克风阵列、前置放大器、ADC、语音识别处理单元、存储器、通信接口和控制逻辑组成。麦克风阵列捕捉声音并转换为电信号,经前置放大器增强后由ADC转换为数字信号,处理单元分析后生成识别结果。存储器存储语音模型和指令,通信接口将结果传输至外部设备,控制逻辑管理模块运行。模块VCC(3.3V-5V)和GND连接电源;TXD接单片机UARTRXD发送识别数据;IO1至IO6输出PWM信号,可控制伺服电机或灯光;IO7和IO8支持数字信号输入/输出,用于指示灯或传感器读取;DHT接口连接DHT11或DS18B20温湿度传感器,与单片机通过GPIO通信,语音识别电路如图3.5所示。图3.5语音识别电路图数据显示电路设计OLED12864是一款常见的单色OLED显示模块,分辨率为128x64像素,支持IIC(I2C)通信方式。模块内部由OLED显示面板、驱动IC(SSD1306)和控制电路组成,显示面板通过控制每个像素的发光呈现图像,驱动IC负责电源管理、显示时序控制及存储功能。主要引脚包括VCC(3.3V)、GND(电源地)、SCL(IIC时钟信号)和SDA(IIC数据信号),其中VCC和GND为模块供电,SCL和SDA与单片机I2C接口相连,实现数据通信,数据显示电路如图3.6所示。图3.6数据显示电路图步进电机电路设计步进电机作为执行部件,是机电集成的核心产品之一,并在多种自动化控制系统中得到了广泛应用。随着微电子技术和计算机科技的不断进步,对步进电机的需求也在逐日增长,并在多个国民经济领域得到了广泛应用[20]。步进电动机是把电脉冲信号转化成角信号的驱动器。步进电机在接收到脉冲信号后,将步进电动机按预先设定的方向转动一段时间,即所谓的“步距角”,然后以此为准,一步一步地转动。在此基础上,通过改变激光脉宽的大小,改变激光器转角的位置,从而达到准确的位置;通过调节脉冲的频率,可以对马达转速、加速度进行有效的调节,从而达到调节马达转速的目的。步进电动机具有不累积偏差(精确至100%)的优势,是一类专用的专用电动机,在各种开环系统中具有广阔的用途。当前,常用的步进电动机有感应型步进电动机(responsestepmotor,简称为pm)、永磁步进电动机(phasestepmotor)、混合型步进电动机(hb)和单相(单相)步进电动机。永磁体型步进电动机一般为两相结构,转矩和容积都比较小,一般为7.5~15°;感应型步进电动机一般为三段结构,可实现大扭矩的输出,且步进角一般在1.5°左右,但噪声及震动较大。感应型步进电动机采用软磁性材质构成转子磁路,定子采用多相励磁绕组,利用磁导变化实现转矩输出。本系统采用了一种混合型步进电动机。混合型步进电动机是一种兼有两种形式的新型步进电动机,它又可分为两相、五相两种形式:两相一般是1.8°,五相一般是0.72°。这种类型的步进电动机被广泛地用于各个行业。所以,该方案选用这样的步进电机。28BYJ-48为一种四相八拍子的步进四相八拍子马达,适用于从直流5V到直流12V的操作。只要将一系列的控制脉冲加到步进电动机上,就可以使电动机继续无休止地转动。每次冲击后,步进电动机的一相绕组或两相绕组均有一种激励方式改变,也就是将转子进行一定的转角,称为步距角。当激励条件改变并运行一周后,转子将转动一周。四相步进电动机可在各种电源方式下运行,具体的驱动方法可以参见表3.1所示。表3.1步进电机驱动方式导线颜色123456785红++++++++4橙--3黄2粉1蓝红线接电源5V,橙色电线接P1.3口,黄色电线接P1.2口,粉色电线接P1.1口,蓝色接P1.0口。由于单片机接口信号不够大需要通过ULN2003放大再连接到相应的电机接口。ULN2003的晶体管阵列技术:ULN2003芯片是一种高电压大电流达林顿芯片。该器件采用7对NPN型达林顿晶体管,其高压输出特点和阴极钳位可以实现电感负荷的变换。一个达林顿对收集到的电流为500毫安。并联的达林顿管能经受较高的电压。本产品适用于各种类型的电机,如:继电器驱动、敲字机、电灯驱动、显示器(发光二极管)、线性驱动、逻辑缓冲等。ULN2003公司生产的达林顿晶体管对均具有2.7K欧姆的串联电阻,能够与Tl或5VCMOS器件相匹配。ULN2003的主要特点:(1)500mA额定集电极电流(单个输出)。(2)高电压输出:50V。(3)输入和各种逻辑类型兼容。(4)步进电机驱动器。步进电机电路如图3.7所示。图3.7步进电机电路图系统软件设计系统主程序流程设计智能垃圾桶系统在上电后会首先进行系统初始化,完成单片机接口配置及通信寄存器的初始化,包括红外传感器、超声波测距模块、压力检测模块的接口配置,步进电机驱动的PWM信号初始化,以及语音模块的通信协议配置等。当初始化结束时,进行主循环。该装置利用红外线感应装置侦测到是否有人员接近,若发现有人员,则由步进电动机带动马达开启,设定延迟时间后再停止;如果没有人接近,垃圾箱就会自动关上。然后,利用超声距离模块对垃圾箱中的垃圾进行定位,当垃圾的高度超出设置的临界值时,就会引发声、光、电警报,同时在显示屏上出现“垃圾桶已经装满”的警告声音;如果没有超出这个临界值,就会恢复到原来的状态。在此过程中,利用气压感应装置对垃圾箱内部的体重进行测量,当其超出规定的临界值时,也会发出警报,并发出警告,提醒垃圾桶超载。另外,利用键盘控制功能,可以对超声波的距离、气压等参数进行调节,并将所设置的参数进行实时显示。系统还支持语音控制功能,用户通过语音指令即可实现垃圾桶开盖或关闭的操作,显著提升使用的智能化与便捷性,系统主程序流程如图4.1所示[21]。图4.1系统主程序流程图系统主程序关键部分代码如下:系统程序LCD12864显示屏部分代码如下:Display_Weight函数用于在LCD12864显示屏上显示重量数据。voidDisplay_Weight(){LCD12864_ShuZi(3,6,Temp_Value/10%10);LCD12864_ShuZi(3,7,Temp_Value%10);LCD12864_ShuZi(3,9,13);LCD12864_ShuZi(1,5,Weight_Shiwu/10000%10);LCD12864_ShuZi(1,6,Weight_Shiwu/1000%10);LCD12864_ShuZi(1,7,Weight_Shiwu/100%10);LCD12864_ShuZi(1,8,Weight_Shiwu/10%10);LCD12864_ShuZi(1,9,Weight_Shiwu%10);}系统程序按键部分代码如下:KeyPress函数用于处理按键事件,当按下KEY1时,调用Menu函数进入菜单设置界面。VoidKeyPress(){if(KEY1==0){ Delay_ms(20); if(KEY1==0){Menu();while(KEY1==0);}}}数据采集流程设计红外检测流程设计首先对DHT11传感器进行初始化,设定其输入端(DATA)到输出状态,利用延时保证了对传感器初始化的充分时间。该传感器要求在大约1-2ms的时间内提供一个较小的触发信号。在拔起数据管的前1ms,然后等20-40微秒,让传感器可以做出反应。在此基础上,设定DATA管脚作为输入方式,并在此基础上对传感器进行反馈。该探测器将发出80微秒长的低电位讯号,紧接着80微秒高电位讯号,指示可以传送资料。DHT11传送40比特的温度整数段,温度小数段和8比特的检验总和。该资料以高、低电平的脉冲来代表二进制数值,而每一比特的高电平时长表明它的数值是0还是1。在收到数据之后,对其进行运算,并将其与已收到的结果进行对比。如果是相同的,则资料是正确的;否则需重新采集。最后从数据中提取温度的整数与小数部分,并转换为实际的湿度和温度值。温度检测流程如图4.2所示。-图4.2温度检测流程图温度检测部分代码如下:#include<DS18B20.H>:包含DS18B20相关的头文件。Temp_Value:用于存储处理后的温度值。DS18B20_Enable:控制DS18B20是否启用的标志位。TemperatureLessZero:用于标记温度是否为负数。Temperature:存储最终的温度值。最终将读取到的温度值以整型形式保存在全局变量Temperature中,其中温度值的表示方式为整数部分乘以10加上小数部分,例如182表示18.2°C。#include<DS18B20.H>volatileunsignedintTemp_Value=0;bitDS18B20_Enable=1;bitTemperatureLessZero;unsignedintTemperature=850; //温度值(整型变量)182表示18.2C这个功能被用来对DS18B20进行初始化,它通过发射一个重置脉冲和一个有一个脉冲来判断有无有一个传感器。EA=0,EA=1分别被用来断开或开启一个全局的中断,防止它对初始化进程产生的影响。返回的值x是0意味着有设备,而1是没有设备。unsignedcharInit_DS18B20(void)//估测550us{ unsignedcharx=0; EA=0;DQ=0; //发送复位脉冲DS18_delay(29); //延时(>480us)DQ=1; //拉高数据线DS18_delay(3); //等待(15~60us)等待存在脉冲x=DQ;//获得存在信号(用于判断是否有器件)DS18_delay(25);//等待时间隙结束EA=1;return(x);//返回存在信号,0=器件存在,1=无器件}读取DS18B20传感器的温度值。首先进行初始化,然后发送跳过读序列号和启动温度转换的指令。等待一段时间后,再次初始化并发送读取温度寄存器的指令。读取温度的低位和高位数据。根据数据判断温度是否为负数,并进行温度转换。最终将转换后的温度值存储在Temperature和Temp_Value中。voidReadTemperature(void){unsignedchartempL=0; //临时变量低位(无符号字符变量)unsignedchartempH=0; //临时变量高位bitflag=0;Init_DS18B20(); //初始化,调用初始化函数EA=0;WriteOneChar(0xcc); //跳过读序列号的操作,调用写函数,写0xcc指令码(跳过读序列号)WriteOneChar(0x44); //启动温度转换,调用写函数,写0x44指令码(启动温度转换)EA=1;//Time=get_time();// DS18_delay(125); //转换需要一点时间,延时Init_DS18B20(); //初始化,调用初始化函数EA=0;WriteOneChar(0xcc); //跳过读序列号的操作,调用写函数,写0xcc指令码(跳过读序列号)WriteOneChar(0xbe); //调用写函数,写0xbe指令码,读温度寄存器(头两个值分别为温度的低位和高位)tempL=ReadOneChar(); //读出温度的低位LSBtempH=ReadOneChar(); //读出温度的高位MSBEA=1;TemperatureLessZero=(bit)(tempH&0x80);Temperature=((((tempH&0x7F)<<8)+tempL)*10)>>4;//温度转换,把高低位做相应的运算转化为实际温度,使用DS18B20温度传感器手册规定的公式,结果是十进制数值Temp_Value=Temperature/10;}溢满超声测距流程设计首先要做一个初始化,把三角管腿设定成一个输出方式,这样就能发出一个简短的高电平。双极管脚被设定为一个输入方式,从而可以探测从一个低到一个高的改变。在三角管脚产生10微秒的高电平,激发模组发出超声。当三角针产生一个高水平的脉冲时,监控回路管脚的水平状况。当探测到被反弹的超声信号时,双重管脚将变成高电平。这时就要求开始计时,并将回波管腿从低电平转变为高电平所需的时间。计时器在讯号回到低位之前,会纪录回应脚高电平的期间。此期间表示了从感测器到物件所需的超声波所需的时间。从大气中的声传播速率(大约340m/s),计算传感器和物体之间的距离,超声测距流程如图4.3所示。图4.3超声测距流程图超声测距部分代码如下://定义触发引脚和回声引脚constinttrigPin=9;constintechoPin=10;//定义变量存储距离和脉冲持续时间loatduration,distance;voidsetup(){//初始化串口通信,设置波特率为9600Serial.begin(9600);//将触发引脚设置为输出模式pinMode(trigPin,OUTPUT);//将回声引脚设置为输入模式pinMode(echoPin,INPUT);}voidloop(){//给触发引脚发送低电平信号2微秒,以确保稳定digitalWrite(trigPin,LOW);delayMicroseconds(2);//给触发引脚发送高电平信号10微秒,触发超声波发射digitalWrite(trigPin,HIGH);delayMicroseconds(10);//再次将触发引脚设置为低电平digitalWrite(trigPin,LOW);//读取回声引脚的高电平脉冲持续时间duration=pulseIn(echoPin,HIGH);//根据脉冲持续时间计算距离,单位为厘米distance=duration*0.034/2;//将测量得到的距离信息输出到串口监视器Serial.print("距离:");Serial.print(distance);Serial.println("厘米");//延时1秒后再次进行测量delay(1000);}称重检测流程设计首先对HX711进行初始化,对GPIO管脚进行了设置,并对其进行了工作。在所述电路中,为了产生所述时钟信号,设定所述时钟管针(SCK)为推挽(push)的输出方式;为了接受数据,设定了一个悬浮的输入方式。接着,从HX711中读出24比特的数字资料:首先把DOUT管腿置于高电平,然后把SCK管脚置于低位,以保证该组件已做好了工作。在SCK的高、低两个状态之间进行周期性的转换,将资料一比特一比特地读入变量val。当阅读结束时,执行0x800000XOR操作,并将最后的数值返回。通过对Get_Maopi()的呼叫来获得目前的空载称重(Pullweight),并且利用Get_Weight()来获得目前的称重,并且利用目前的重减重来算出净重。当净重超过零时,用校正因子求出真实的质量;如果净重量是负数,就把它设为0,以保证测试的正确性。压力检测流程如图4.4所示。图4.4压力检测流程图压力检测部分代码如下:#include"HX711.h"//延时函数voidDelay__hx711_us(void){_nop_();_nop_();}//读取HX711unsignedlongHX711_Read(void) //增益128{unsignedlongcount;unsignedchari;HX711_DOUT=1;Delay__hx711_us();HX711_SCK=0;count=0;while(HX711_DOUT);for(i=0;i<24;i++) {HX711_SCK=1;count=count<<1;HX711_SCK=0;if(HX711_DOUT)count++;}HX711_SCK=1;count=count^0x800000;//第25个脉冲下降沿来时,转换数据Delay__hx711_us();HX711_SCK=0;return(count);}HX711是一款专为高精度电子秤设计的24位A/D转换器,常用于连接压力传感器或称重传感器,将模拟信号转换为数字信号,以便微控制器进行处理。在实际应用中,还需要对读取到的数据进行校准和处理,以得到准确的压力值。语音识别流程设计首先,对MCU的USART1串行口进行设置,设置波特率、数据位、停止位和检验位,并将对应的GPIO管脚连接到LU-ASR01组件的串行管腿上。开机后,微控制器对LU-ASR01进行初始化,使其能够正确地进行语言辨识。在模组中,话筒先采集周围的声音,然后由预放大及模数转换成数位讯号,最后进行消噪及语音强化,以提升讯号品质。LU-ASR01采用梅尔频域倒频谱(MFCC)方法,将其与SPIFLASH数据库中的数据进行对比,从而实现对用户的言语指令的准确辨识。该系统通过串行通信方式向MCU发出命令,由MCU进行接收,并将其存入USART_RX_BUF接受缓冲器中。通过对所收到的信息(例如0x31与0xCC或者0x32与0xCC)进行分析,并按照所述的内容对所述的控制标记比特进行设定,从而对所述装置的切换状态进行控制。当过程结束时,将缓存清空,然后按照指示进行相应的动作。语音识别流程如图4.5所示。图4.5语音识别流程图语音识别部分代码如下:一系列函数,包括单片机初始化、中断处理、延时、用户操作处理等函数。voidMCU_init();voidProcessInt0();//识别处理函数voiddelay(unsignedlonguldata);voidUser_handle(uint8dat);//用户执行操作函数voidDelay200ms();voidLed_test(void);//单片机工作指示初始化一些引脚和状态,包括继电器引脚、LED测试、单片机初始化、LD3320复位、串口初始化等。进入一个无限循环,根据nAsrStatus的状态进行不同的处理:当状态为LD_ASR_NONE时,启动一次语音识别任务。当状态为LD_ASR_FOUNDOK时,获取识别结果并调用User_handle函数进行处理。voidmain(void){uint8idatanAsrRes;uint8i=0;P1M0=0xFF;P1M1=0x00;SRD1=SRD2=SRD3=SRD4=0;Led_test();MCU_init();LD_Reset();UartIni();/*串口初始化*/nAsrStatus=LD_ASR_NONE; // 初始状态:没有在作ASR//PrintCom("<G>欢迎使用");while(1){switch(nAsrStatus) {caseLD_ASR_RUNING: caseLD_ASR_ERROR: break; caseLD_ASR_NONE:{ nAsrStatus=LD_ASR_RUNING; if(RunASR()==0) /* 启动一次ASR识别流程:ASR初始化,ASR添加关键词语,启动ASR运算*/ { nAsrStatus=LD_ASR_ERROR; } break; } caseLD_ASR_FOUNDOK:/* 一次ASR识别流程结束,去取ASR识别结果*/ { nAsrRes=LD_GetResult(); /*获取结果*/ User_handle(nAsrRes);//用户执行函数 nAsrStatus=LD_ASR_NONE; break; } caseLD_ASR_FOUNDZERO: default: { nAsrStatus=LD_ASR_NONE; break; }//switch }//while }数据显示流程设计首先配置I2C接口,启用相关时钟,设置用于通信的时钟引脚和数据引脚为开漏输出模式,定义通信的工作模式、时钟频率以及从设备的地址,确保I2C通信正常。接着初始化OLED显示屏,发送命令关闭显示屏,设置显示屏的内存寻址模式、对比度、扫描方向和显示时钟等参数,最后通过发送开启显示的命令激活屏幕。完成初始化后,可以通过填充屏幕背景的方法设置初始画面,再调用清屏函数清空屏幕内容,随后可以使用显示字符串的函数展示字符信息,调用显示汉字的函数输出中文内容,或者通过绘制位图的函数显示图片,从而在指定的屏幕位置完成内容的绘制和显示。数据显示流程如图4.6所示。图4.6数据显示流程图数据显示部分代码如下:判断LCD12864是否处于忙状态。通过读取LCD的状态寄存器,检查最高位(忙标志位)是否为0,若为0则表示LCD不忙。voidbuys(){intdat;RW=1;RS=0do{ P0=0x00;_nop_();E=1;_nop_(); dat=P0;_nop_(); E=0;_nop_(); dat=0x80&dat; }while(!(dat==0x00));}LCD显示汉字字库函数voidlcd_display_hanzi(ucharscreen,ucharpage,ucharcol,uintmun){ //screen:选择屏幕参数,page:选择页参数0-3,col:选择列参数0-3,mun:显示第几个汉字的参数inta;mun=mun*32;select_screen(screen);w_com(0xb8+(page*2));w_com(0x40+(col*16));for( a=0;a<16;a++){ w_date(hanzi[mun++]); }w_com(0xb8+(page*2)+1);w_com(0x40+(col*16));for( a=0;a<16;a++){ w_date(hanzi[mun++]);}}LCD显示数字函数voidlcd_display_shuzi(ucharscreen,ucharpage,ucharcol,ucharmun){ //screen:选择屏幕参数,page:选择页参数0-3,col:选择列参数0-7,mun:显示第几个汉字的参数inta;mun=mun*16;select_screen(screen);w_com(0xb8+(page*2));w_com(0x40+(col*8));for( a=0;a<8;a++){ w_date(shuzi[mun++]); }w_com(0xb8+(page*2)+1);w_com(0x40+(col*8));for( a=0;a<8;a++){ w_date(shuzi[mun++]);}}系统调试及测试结果系统硬件调试智能垃圾桶系统硬件焊接与测试按照电路设计准备STC89C52、DHT11、HC-SR04、HX711、LU-ASR01等核心元件,焊接时确保无虚焊、短路等问题。焊接完成后连接电源引脚、数据引脚及信号接口(I2C、UART等),并与单片机GPIO正确对接。通电后测量模块电源电压,确保供电正常。逐一测试功能,包括红外检测人体信号、超声波测距精度、压力数据采集、语音识别指令返回及显示模块信息显示。通过主控程序调试验证步进电机开关盖动作及蜂鸣器与显示模块的溢满、超重报警功能。测试确保所有模块功能正常及电路稳定,为后续软件调试提供保障,系统硬件调试如图5.1所示[22]。图5.1硬件调试图系统软件调试系统软件使用Keil进行程序设计与编译,通过STLink进行程序下载与调试。依据功能需求,编写模块化代码,包括主控、红外检测、超声测距、压力检测、语音识别和数据显示等模块。在Keil中编译后通过STLink将代码烧录至单片机,并利用断点和变量监控功能逐步调试,验证各模块的功能与协作流程,确保红外检测、超声测距、压力测量、语音识别和数据显示功能准确可靠。调试过程中及时修正问题,经过多次测试,系统功能完整实现,运行稳定,满足设计要求,系统软件调试如图5.2所示。图5.2软件调试图系统功能调试数据采集控制功能调试在数据收集和控制函数的调试中,对各个模块的性能进行了一一的检测,以保证系统的精度和可靠性。首先,对接近人体的红外探测系统进行了仿真,以检验该系统的实时性和步进电动机开启动作的精度。在此基础上,对不同海拔目标进行超声距离模型试验,验证其定位准确性及垃圾箱溢出预警机理。装载各种砝码的试验压力探测模块,检验称量准确性和超载警报。利用OLED12864的显示模组对试验资料进行了即时的修改,保证了所呈现的内容与各个模组所获得的资料相符,并能精确地呈现出垃圾桶的状况、设定的阈值和警报资讯。最后对整个控制方案进行了测试,结果表明该方案总体工作性能良好,达到了预期的效果。数据采集控制功能调试如图5.3所示。图5.3数据采集控制功能调试图语音识别控制功能调试在LU-ASR01中,主要是对语音指令的辨识率及反应速率进行了检测。通过预先设定的命令,监测串口的反馈信息,保证了系统的正确率在95%以上。对该系统进行了静态、噪音条件下的系统性能试验,以检验系统的抗干扰性及自适应性。当识别完成后,可以进行开关动作,并在屏幕上对工作状况进行实时的反馈,提高了使用者的使用感受。实验证明,该方法具有较高的反应速度和较好的辨识能力,大大提高了系统的智能性和人机界面的便利性,语音识别控制功能调试如图5.4所示。图5.4语音识别控制功能调试图系统功能测试红外感应功能测试对红外感应功能,确认在不同距离、角度及环境光照的条件下,垃圾桶能否准确感应物体靠近与离开,实现垃圾桶盖的自动开合,避免出现感应不灵敏、误动作或无动作的情况。测试步骤:使用人体,红外信号装置在垃圾桶正前方不同距离(如5cm、10cm、20cm、30cm)和角度(0°、30°、60°)进行信号检测,观察垃圾桶是否有开盖动作。测试过程:垃圾桶处于待机状态时,测试者伸手,距离垃圾桶大概5cm,垃圾桶感应到——垃圾桶感应开盖。测试结果:在有效感应距离(30cm内)和合理角度范围(30°内),垃圾桶能迅速且准确地打开盖子;而超出有效距离(大于30cm)或角度(大于30°)时,垃圾桶则不开盖。红外感应测试过程可参见表5.1。红外感应测试图如图5.5所示。表5.1红外感应测试表距离/角度0°30°60°5cm开开无反应10cm开开无反应20cm开无反应无反应30cm无反应无反应无反应图A手靠近垃圾桶图B打开状态图5.5红外感应测试图溢满检测功能测试测试溢满检测功能,确定在不同垃圾形状、填充的方式下,垃圾桶能及时、准确地检测到垃圾接近或达到溢满状态,并发出相应提示控制蜂鸣器进行声光报警,防止垃圾溢出后造成环境污染。测试步骤:向垃圾桶内填充垃圾,直至达到垃圾桶的设计容量上限,观察垃圾桶的溢满提示情况(如灯光闪烁等)。测试过程:垃圾桶处于待机状态时,放入比垃圾桶高的物品,垃圾桶检测到桶内垃圾并且达到溢满状态,且垃圾桶不会关闭垃圾盖。测试结果:当垃圾达到溢满状态时,垃圾桶应能及时且准确地发出溢满提示。溢满功能测试可参见表5.2。溢满检测功能测试图如图5.6所示。表5.2溢满检测功能测试表能否检测检测桶内垃圾能达到溢满状态能垃圾溢满后能否声光报警能图A垃圾桶待机状态图B垃圾桶内有较大的物品图5.6溢满检测功能测试图重量检测功能测试重量检测功能,在不同的重量物品、不同的放置方式(如均匀放置、偏心放置)的情况下,测量结果的准确性和稳定性,确保测量值与实际重量误差在合理范围内。测试步骤:将不同标准重量的物品(如0.5kg、1kg、2kg、5kg)依次顺序的放入垃圾桶内,读取并记录垃圾桶显示的重量数据,与实际物品的重量进行对比。测试过程:垃圾桶开盖放入物品之后观察显示屏,是否准确出现读取物品的重量数据。测试结果:垃圾桶准确读取物品数据183g(显示的重量数据与实际重量的物品误差应在允许范围内如±0.1kg)。重量检测过程可参见表5.3。重量检测功能测试图如图5.7所示。表5.3重量检测过程表0.5kg1kg2kg5kg读取重量数据读取成功读取成功读取成功读取成功图A开盖放入物品图B查看显示屏数据图5.7重量检测功能测试图语音识别功能测试对于语音识别功能,测试其在多种口音、语速、音量及不同环境噪音水平下,能否准确的识别预设的各类指令,如开盖、关盖等,并且正确执行相应的操作。测试步骤:使用语音测试设备录制常见的语音指令(如“打开垃圾桶”“关闭垃圾桶”等),在不同音量(低、中、高)和语速(慢、正常、快)下播放语音指令,并观察垃圾桶的响应情况。测试过程:在正常语速,正常音量下,垃圾桶能识别并打开垃圾盖;在正常语速,正常音量下,垃圾桶能识别并关闭垃圾盖。测试结果:垃圾桶应能够准确识别出并执行正确的语音指令,对于错误或者不支持的语音指令,垃圾桶保持当前状态。语音识别功能测试可参见表5.4。语音识别功能测试图如图5.8所示。表5.4语音识别功能测试表低中高打开垃圾桶无响应响应响应关闭垃圾桶无响应响应响应慢正常快打开垃圾桶响应响应无响应关闭垃圾桶响应响应无响应图A语音识别开盖图B语音识别关盖图5.8语音识别功能测试图数据显示功能测试数据显示功能,保证重量数据、垃圾桶的状态(如开盖、关盖状态、溢满状态)等信息能实时、准确并且清晰地展示在显示屏上,无数据丢失、错误显示或显示延迟等问题。测试步骤:向垃圾桶内投放垃圾,触发重量检测和溢满检测等功能,观察垃圾桶显示屏上的数据显示情况,包括重量数据、溢满状态等信息。测试过程:观察垃圾桶在待机状态下,垃圾桶显示屏是否能正常显示重量,高度,温度。测试结果:当垃圾桶在待机状态下,数据准确、清晰地显示在相应界面上,且实时更新,无数据丢失、错误显示或显示延迟的情况。数据显示测试可参见表5.5。数据显示测试图如图5.10所示。表5.5数据显示测试表重量高度温度数据显示能显示能显示能显示图A垃圾桶待机状态图B数据显示图图5.10数据显示测试图用户体验测试对红外线感知和声音识别进行了试验,保证了操作方式的方便、自然,并且与使用者的习惯相吻合,减少了使用者的学习费用,增强了使用者对这个智能垃圾箱的接纳与满意。评价重量探测和数据展示的信息表现形式是否能够直观易懂,使用者是否能够很容易地获得所需的资料(例如垃圾重量、垃圾桶状况等),从而方便使用者进行垃圾管理。检验溢出探测功能(例如语音)的显示方法是否恰当,可以在不影响使用者的情况下,及时地提醒使用者清除水桶中的垃圾,并为使用者创造一个舒服的使用环境。结论该系统采用STC89C52作为核心芯片,通过对垃圾的检测,垃圾的溢出检测,称重的监控,以及声音的操控,来完成垃圾的检测。该装置利用红外线感应装置侦测到有人接近,并启动步进电动机,以达到自动开启及延时关门的目的;利用超声距离测量装置对垃圾箱中的垃圾进行定位,一旦垃圾高度超出设置的临界值,就会发出警报,同时OLED12864显示模块向垃圾箱发出警告;利用气压感应器侦测垃圾筒内部之物料,若超过临界值,则会发出警报,并发出「垃圾筒超载」的警告。另外,该装置还可以通过按钮来调整超声波的距离和气压探测的门限,并且还可以通过声音辨识模块LU-ASR01来控制垃圾箱的声音切换,从而大大提高了该装置的智能化程度和易用性。在设计中,主要进行了硬件的选择和电路的设计,选取了具有高性能价格优势和性能稳定的模块,比如DHT11红外传感器,HC-SR04超声波模块,HX711压力探测模块,以及OLED12864的显示器模块,确保了该系统在具有高性能价格和高可靠性的前提下,能够很好地实现其功能要求。另外,在软件方面采用了模块化的方法,利用Keil编译器和STLink等方法,逐个地对各个功能模块的逻辑进行了验证和优化,保证了整个系统的工作稳定可靠。总之,本发明的智能垃圾箱系统具备了完善的功能、稳固的硬件结构、明确的软件逻辑、方便的使用方法,可以很好地适应每日的垃圾分类与管理需要,是一种值得广泛应用的产品。
致谢在本次毕业论文的撰写和项目研究过程中,我深感来自各方的支持与帮助。在此,我要特别感谢我的指导老师,您不仅在学术上给予了我宝贵的指导和建议,还在我遇到困难时给予了我无私的关怀和鼓励,您的耐心教导让我在研究中不断成长。与此同时,我也要感谢我的同学们,感谢你们在项目合作中的相互支持与鼓励,分享宝贵的经验和知识,使我们的研究过程充满了活力和乐趣。最后,我要向我的父母表达最深的感激之情,感谢你们始终如一的支持和理解,是你们的鼓励和爱让我有勇气迎接挑战,追求自己的梦想。正是因为有了你们的陪伴和帮助,我才能在这段学习旅程中取得今天的成果。再次感谢所有关心和支持我的人,你们的帮助是我前进道路上最强大的动力。
参考文献郑金记,肖昌静.一种基于STC15单片机的智能分类垃圾桶[J].电脑知识与技术,2022,18(07):107-108+119.杨伟兵,陈亚丽.基于STC12单片机的智能垃圾桶的设计[J].无线互联科技,2021,18(22):51-53.张河,张桂梅,段磊鹏,王婷婷.基于51单片机的智能垃圾桶系统开发[J].科技创新与应用,2022,11(30):18-23.李宠,仝倩,胡婷婷,吴玉莲.单片机的智能垃圾桶设计[J].电子世界,2021,47(11):182-183.张林,常远成,赵贝雨.以单片机为基础制作的智能垃圾桶[J].福建电脑,2022,37(02):114-115.陈卓然,王璇,赵东阳,夏丹宁,马鑫泉.基于单片机的智能垃圾桶设计[J].现代制造技术与装备,2022,57(01):83-84.贾成宇,范从勉,张渝,颜思瑞,冯月芹.基于单片机智能语音垃圾桶识别设计[J].电子世界,2021,52(23):192-193.卢睿洁,周泊龙,韩军良.单片机智能环保垃圾桶设计[J].中小企业管理与科技(中旬刊),2021,23(10):184-185.杨咸启,梦伟,解文辰.基于单片机的多功能垃圾桶设计与试验[J].黄山学院学报,2022,22(03):24-28.王涛,马宁,张兰云.基于单片机的智能垃圾桶设计[J].中小企业管理与科技(下旬刊),2022,45(05):180-181.陈春先,曲鸣飞,张丽,辛义.基于单片机的办公桌智能垃圾桶系统设计[J].中国新通信,2020,22(02):119-120.张林,杨建华,赵贝雨,纪发宝,严志龙,王艳.基于单片机设计的的智能垃圾桶[J].中国新通信,2023,22(02):113.[张仁朝,蔡小兰,陈房添.基于单片机控制的智能环保垃圾桶设计[J].电子测试,2022,96(15):28-30+40.于雯,王艳,张佳佳,陈思思.多功能智能垃圾桶结构设计和功能实现[J].工业仪表与自动化装置,2022,(01):117-120.周宇辉,何志琴,胡娟,杨莹.基于OpenMV垃圾分类的智能垃圾桶系统设计[J].智能计算机与应用,2020,10(05):71-75.赵广龙,王一飞,杜峥,张雷.基于NB-IoT的智能垃圾桶研究与设计[J].信息通信,2019,(12):113-114.张浩,李淑青,杜泽英,孙悦,李鑫瑞,张宇华.基于SolidWorks的智能垃圾分类装置设计与控制[J].大学物理实验,2021,34(04):66-69.刘露萍.基于LD3320语音识别技术在智能垃圾分类系统中的应用研究[J].中国设备工程,2021.鲁菁.智能垃圾桶中的语音识别技术应用研究[J].电脑编程技巧与维护,2021,(05):114-116.WangYing,MuthuBalaAnand,AnbarasanM..ResearchonIntelligentTrashCanGarbageClassificationSchemeBasedonImprovedYOLOv3TargetDetectionAlgorithm[J].JournalofInterconnectionNetworks,2022,22(Supp03):853-856.MNarayanaMoorthi.MovableSmartDustBinUsingIoT[J].ElectrochemicalSocietyTransactions,2022,107(1):541-543.黄奕安.基于嵌入式的称重系统的设计与研究[D].北京:北京交通大学,2011:45-47.
附录A附录B44#include<DS18B20.H>/*********************************端口定义**********************************/volatileunsignedintTemp_Value=0;/*******************DS18B20测温程序******************************************运行结果会在函数ReadTemperature()保存3位十进制数字的温度值调用时,要这样 ReadTemperature(); 温度保存在全局变量 unsignedintTemperature; 温度值(整型变量) 182表示18.2C***************************************************************************/bitDS18B20_Enable=1;/*********************************定义全局变量******************************/bitTemperatureLessZero;unsignedintTemperature=850; //温度值(整型变量)182表示18.2C/****************************************************************************函数功能:延时子程序入口参数:k出口参数:****************************************************************************/voidDS18_delay(unsignedcharuseconds) //延迟17US.根据晶振调节{ unsignedchari; while(--useconds) { i=3; while(--i); }}/***************************************************************************函数功能:DS18B20初始化子程序入口参数:出口参数:****************************************************************************/unsignedcharInit_DS18B20(void)//估测550us{ unsignedcharx=0; EA=0; DQ=0; //发送复位脉冲 DS18_delay(29); //延时(>480us) DQ=1; //拉高数据线 DS18_delay(3); //等待(15~60us)等待存在脉冲x=DQ;//获得存在信号(用于判断是否有器件)DS18_delay(25);//等待时间隙结束 EA=1;return(x);//返回存在信号,0=器件存在,1=无器件}/****************************************************************************函数功能:向DS18B20读一字节数据入口参数:出口参数:dat****************************************************************************/ReadOneChar(void)//估测100us { unsignedchari=0; unsignedchardat=0;for(i=8;i>0;i--) { DQ=1; DS18_delay(1); DQ=0; dat>>=1;//复合赋值运算,等效dat=dat>>1(dat=dat右移一位后的值) DQ=1; if(DQ) dat|=0x80; DS18_delay(4); }return(dat);}/****************************************************************************函数功能:向DS18B20写一字节数据入口参数:dat出口参数:****************************************************************************/voidWriteOneChar(unsignedchardat)//有参函数,功能是"写",而写的内容就是括号内的参数{ unsignedchari=0; for(i=8;i>0;i--) { DQ=0; DQ=dat&0x01; DS18_delay(4); DQ=1; dat>>=1;//复合赋值运算,等效dat=dat>>1(dat=dat右移一位后的值) }// DS18_delay(4);} /****************************************************************************函数功能:向DS18B20读温度值入口参数:出口参数:temperature****************************************************************************/voidReadTemperature(void){ unsignedchartempL=0; //临时变量低位(无符号字符变量) unsignedchartempH=0; //临时变量高位 bitflag=0; Init_DS18B20(); //初始化,调用初始化函数 EA=0; WriteOneChar(0xcc); //跳过读序列号的操作,调用写函数,写0xcc指令码(跳过读序列号) WriteOneChar(0x44); //启动温度转换,调用写函数,写0x44指令码(启动温度转换) EA=1;//Time=get_time();// DS18_delay(125); //转换需要一点时间,延时 Init_DS18B20(); //初始化,调用初始化函数 EA=0; WriteOneChar(0xcc); //跳过读序列号的操作,调用写函数,写0xcc指令码(跳过读序列号? WriteOneChar(0xbe); //调用写函数,写0xbe指令码,读温度寄存器(头两个值分别为温度的低位和高位) tempL=ReadOneChar(); //读出温度的低位LSB tempH=ReadOneChar(); //读出温度的高位MSB EA=1; TemperatureLessZero=(bit)(tempH&0x80);Temperature=((((tempH&0x7F)<<8)+tempL)*10)>>4;//温度转换,把高低位做相应的运算转化为实际温度,使用DS18B20温度传感器手册规定的公式,结果是十进制数值 //这里使用*0.0625,直接增加500+字节代码 Temp_Value=Temperature/10;// // if(Temp_Value>99)Temp_Value=99;// if(TemperatureLessZero)Temp_Value=0;// DS18_delay(20);// return(tempa);//运算结果返回到函数:ReadTemperature()调用时需要采用i=ReadTemperature(),然后再对i(任意uchar型变量)进行操作}称重检测模块#include"HX711.h"//****************************************************//延时函数//****************************************************voidDelay__hx711_us(void){ _nop_(); _nop_();}//****************************************************//读取HX711//****************************************************unsignedlongHX711_Read(void) //增益128{ unsignedlongcount; unsignedchari; HX711_DOUT=1; Delay__hx711_us(); HX711_SCK=0; count=0; while(HX711_DOUT); for(i=0;i<24;i++) { HX711_SCK=1; count=count<<1; HX711_SCK=0; if(HX711_DOUT) count++; } HX711_SCK=1;count=count^0x800000;//第25个脉冲下降沿来时,转换数据 Delay__hx711_us(); HX711_SCK=0; return(count);}voiddelayms(ucharz){ intx,y; for(x=z;x>0;x--) for(y=110;y>0;y--);}/*判断LCD忙信号状态*/voidbuys(){ intdat; RW=1; RS=0; do { P0=0x00;_nop_(); E=1;_nop_(); dat=P0;_nop_(); E=0;_nop_(); dat=0x80&dat; }while(!(dat==0x00));}/*LCD写指令函数*/voidw_com(ucharcom){ //buys(); RW=0; RS=0; E=1;_nop_(); P0=com;_nop_(); E=0;_nop_();}/*LCD写数据函数*/voidw_date(uchardate){ //buys(); RW=0; RS=1; E=1;_nop_(); P0=date;_nop_(); E=0;_nop_();}/* LCD选屏函数*/voidselect_screen(ucharscreen){ switch(screen) { case0://选择全屏 CS1=0; CS2=0; break; case1://选择左屏 CS1=0; CS2=1; break; case2://选择右屏 CS1=1;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年汉语文化艺术节活动方案
- 2026年国内交通规划现状调查分析
- 2026年汉堡店抽奖活动策划
- 2026年病理科管理规范及操作常规
- 2026年文化创意营销案例分享
- 2026年人教版高二第二学期英语期末重点高中联考试卷(附答案可下载)
- 京东卖家未开通消保协议书
- 古代诗人名人龚自珍人物介绍课件
- (2026年)医院感染诊断标准院感知识培训
- 2026年人教版高二第二学期数学期末重点高中联考试卷(附答案可下载)
- 2025年山东省济南市初二学业水平地理生物会考真题试卷(+答案)
- 高中思想政治·高一年级主题班会教学设计:铸魂立心担使命·知行合一护国安-2026年公民道德宣传日暨全民国防教育日融合主题班会教学设计
- 雨课堂学堂在线学堂云《中国马克思主义与当代(北京航空航天)》单元测试考核答案
- 2026年发展对象考试测试题库附答案
- 语言符号与视觉符号的编码与解码-重塑“新国潮”品牌形象的符号双轴操作
- 初中英语外研版七年级首字母填空专练1(有答案)
- 《机械制图》职业院校机械类专业全套教学课件
- 2025年高考语文复习备考复习策略讲座
- 齿根弯曲疲劳强度计算
- 分析仪器荧光光谱仪课件
- 教师权力与学生权利
评论
0/150
提交评论