智能垃圾桶检测系统论文19:21_第1页
智能垃圾桶检测系统论文19:21_第2页
智能垃圾桶检测系统论文19:21_第3页
智能垃圾桶检测系统论文19:21_第4页
智能垃圾桶检测系统论文19:21_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

基于物联网技术的垃圾智能管理系统的设计与实现摘要本设计主要以单片机AT89S51为智能控制中心,结合GSM模块、重力检测模块、超声波检测模块及温度检测模块,及其外围辅助电路,构成了一个多种检测功能为一体的多功能垃圾管理系统。首先由各传感器检测重力、高度及温度信号并显示出来,当检测到的信号超出自身的设定值时,将其转化为电信号并传送给单片机处理,再由单片机将电信号传送给GSM模块进行打和发短信通知用户。该系统具有轻便灵巧、电路简单易实现,所使用的各类元器件灵敏度较高的特点。利用单片机编程,可使电路功能易于控制,从而实现了识别不同情况下具有智能的垃圾管理系统。关键词:GSM;单片机;温度模块;超声波检测AbstractThisdesignmainlyintelligentcontrolofthesinglechipAT89S51asthecenter,incombinationwiththeGSMmodule,gravitydetectionmodule,ultrasonicdetectionmoduleandtemperaturedetectionmodule,anditsperipheryauxiliarycircuit,formedavarietyofdetectionfortheintegrationofmulti-functionalwastemanagementsystem.Firstdetectedbythesensorofgravity,altitudeandtemperaturesignals,whenthedetectedsignalisbeyonditsownvalue,istransformedintoelectricalsignalsandtransmittedtothesinglechipmicrocomputerprocessing,againbyMCUwillberoutedtoaGSMmodulecallingandtextingnotifiestheuser.Thesystemhasalightweightflexible,simplecircuittoimplement,ofthevariouscomponentsusedthecharacteristicsofhighsensitivity.Microcontrollerprogramming,canmakethecircuitfunctioniseasytocontrol,soastorealizetherecognitionofdifferentcases,thewastemanagementsystemwithsmart.Keywords:GSM;Singlechipmicrocomputer;Temperaturemodule;目录1.引言12、系统总体设计方案22.1系统总体设计22.1.1设计要求22.1.2设计框架22.1.3GSM通讯技术33、硬件设计与实现53.1主控制器的选择及外围电路设计53.2GSM通讯模块设计53.3温度检测模块设计63.4高度检测模块设计83.5重力检测模块设计103.6显示模块设计124、软件设计与实现144.1软件设计流程分析144.2GSM短消息程序设计154.2.1短消息收发模式154.2.2接收短消息程序设计174.2.3发送短消息程序设计185.系统调试与实现195.1硬件制作与调试195.2软件编程与调试205.3实物验证:216.总结与展望247.致谢25参考文献26附录A:传感器采集显示控制源程序27附录B:传感器采集显示控制源程序421.引言随着人类社会经济的飞速开展和人民生活水平的不断提高,人们对其卫生的要求也越来越高,主要表现在他们不仅希望拥有舒适、温馨的住所,而且对干净整洁、智能性等方面也提出了更高的要求。人们迫切需要一种智能的家庭能垃圾管理系统可靠地进行垃圾管理工作,及时发现垃圾桶是否已满通知户主,以便将病毒消灭在萌芽状态,这样人们的健康能够得到较大的保证,同时也保证了用家庭的干净整洁。垃圾智能管理系统的设计与实现,是一项专业性很强的实用技术。人们普遍认为,所谓的垃圾智能管理系统,就是以清洁为目的,运用各种高科技设备及手段,不间断地垃圾环境进行清理和分类的备的总和。随着社会经济的开展进步,垃圾智能管理系统的应用普及越来越广,科技含量越来越高。先进的垃圾集中管理系统表达了物联网的研究成果,科技产品和技术的一个结晶和缩影。当然,垃圾智能管理系统的研发不能一味地追求高、精、尖,其最根本的立足点还是必须回归实用性,在保障适用性的前提下追求最低的本钱与价格。本文基于上述原因提出一种能够通知用户的垃圾智能管理系统。具体来说,该系统以重力、高度及温度信号等传感器,结合GSM模块,及其外围辅助电路,以单片机为智能控制中心,构成了一个集测量温度、测量重力、测量高度等多种检测功能为一体的垃圾智能管理系统。2、系统总体设计方案2.1系统总体设计2.1.1设计要求本文的目的是设计一个简单实用经济的垃圾智能管理系统,因此在设计的时候需要遵循一定的规那么。〔1〕低功耗现今社会对能源的消耗越来越快,节能成为了一个我们必须考虑的因素,在智能家居系统中在不影响性能的根底上,必须将功耗考虑在内,从器件选择和程序优化上控制功耗;〔2〕低本钱系统针对普通家庭,必须考虑本钱因素,需尽量选择性价比高的元器件;〔3〕实用可靠性任何一个产品的设计,不能光有华美的外表或繁杂的功能,实用性、可靠性才是产品能否取得成功的决定性因素。2.1.2设计框架本文所设计的智能家居监控系统由主控制器模块、GSM通讯模块、重力传感器、温度传感器、超声波测量等局部组成。其架构如图2-1所示。图2-1整体架构图该系统的控制方式为远程控制:通过GSM通讯模块以短消息的方式来实现,同时还能实现远程报警功能。2.1.3GSM通讯技术GSM是全球移动通信系统(GlobalSystemforMobilecommunications)的简称,是由欧洲电信标准组织ETSI制订的一个数字移动通信标准;它的空中接口采用时分多址技术,是当前应用最为广泛的移动标准;自90年代中期投入商用以来,全球超过200个国家和地区超过10亿人正在使用[10]。随着用户的不断增长和数字通信的开展,又出现了GPRS、CDMA以及3G〔WCDMA,CDMA2000和TD-SCDMA〕等数字通信系统,现在正在朝着4G开展。但目前相对来说GSM技术最成熟。而且它以OSI为根底,技术标准公开,开展规模最大,是基于时分多址技术的移动通信体制中应用最广泛的系统。我国地域辽阔,虽然3G移动通讯网最近几年开展非常快,但目前我国公众移动通信的主要方式,仍然是GSM数字蜂窝移动通信网,主要提供话音、短消息等效劳。SMS是短消息效劳(ShortMessageService)的简称,是用收发简短文本消息的一种通信机制。随着GSM移动通信网络的迅速普及和广覆盖,短信息效劳(SMS)作为GSM网络的一种根本效劳,已经得到了空前的开展,我国目前已建成覆盖全国的GSM数字蜂窝移动通信网,为我国移动通信提供了可靠保证。SMS与话音传输及一样,是GSM通信网即2G移动通信提供的主要电信业务,它通过无线控制信道进行传输,是GSM通信网所特有的。SMS采用存储转发模式——短信息被发送出去后,不是直接发送给接收方,而是先存储在短信息中心(SMSC),然后再由SMSC把短信息转发给接收方。如果接收方不在效劳区内或关机,SMSC会自动保存此短信息,等到接收方在效劳区内再发送。与普通的寻呼机制有所不同,SMS是一项有保证的双向效劳。发送方可以在短信息发送出去后得到一条确认信息,以告知传递成功或失败。由此可见,短消息业务作为GSM网络的一种主要的电信业务,它的信息传递是比拟可靠的。因此,选用GSM的短消息业务来实现远程无线数据传输也是可行的。本次课题将有效利用GSM短信通讯技术来实现智能家居系统的远程控制和报警功能。3、硬件设计与实现3.1主控制器的选择及外围电路设计本系统采用的单片机为STC89C52单片机作为主控制器。图3-1单片机最小系统单片机最小系统如图3-1所示,18引脚和19引脚XTAL1、XTAL2分别与外部晶振和电容相连接,第9引脚为复位输入端,接上电容、电阻及开关后够上电复位电路,20引脚为接地端,40引脚为电源端。EA引脚为使能端,接电源VCC置1,P0口因内部没有上拉电阻,故外接10K的上拉排阻。3.2GSM通讯模块设计目前国内使用比拟广泛的GSM模块有西门子的TC35/TC35i;Wavecom的GSM〔Mo3、Mo2〕;中兴的ZXGM18、ZXGM28;华为的GTM900;SIMCOM公司的SIM900等,而这些模块的功能用法差异并不是很大。本系统采用华为GTM900C无线模块。GTM900C是一款双频GSM/GPRS无线模块,并且方便开发以降低产品本钱。其结构图如图3-2所示:GTM900C电路中GTM900_TXD/RXD串口用于与PC或MCU连接,实现命令调度及控制通信,GTM900_CARD用来插入带有GSM网络的SIM卡。LED1红色指示灯用于指示电源状态,LED2绿色指示灯用于指示联网状态,开始联网时闪烁频率比拟快,一旦连接到网络后,闪烁速度变慢。MCU控制TC35开发板收发短信,有两种方式。(1)通过串口线连接。MCU开发板的串口经过RS232交叉串口线与GTM900C模块的九针串口连接。(2)通过杜邦线连接。TC35开发板的RXD、TXD、GND接口通过杜邦线分别与MCU开发板的TXD、RXD、GND口连接。在本系统中,为了设计方便,直接采用了第一种接线方式。3.3温度检测模块设计DS18B20是美国DALLAS半导体公司继DS1820之后最新推出的一种改良型智能温度传感器。与纯铜的热敏电阻相比,它能够直接读出被测温度并且根据实际要求通过简单的编程实现9~12位的数字值读数方式。可以分别在93.75ms和750ms内完成9位和12位的数字量,并且从DS18B20读出的信息或写入DS18B20的信息仅需要一根口线(单线接口)读写。温度变换功率来源于数据总线,总线本身也可以向所挂接的DS18B20供电,而无需额外电源。因而使用DS18B20可使系统结构更趋简单,可靠性更高。他在测温精度、转换时间、传输距离、分辨率等方面较DS1820有了很大改良,给用户带来了更方便的使用和更令人满意的效果。以下对DS18B20的主要特点做简单介绍:(1)独特的单线接口方式:DS18B20与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯;(2)在使用中无需任何外围元件;(3)可用数据线供电,电压范围:+3.0~+5.5V;(4)测温范围:-55~125°C;国有测温分辨率为0.5°C;(5)通过编程可实现9~12位的数字读数方式。(6)用户可自设定非易失性的报警上下限值。(7)支持多点组网功能,多个DS18B20可以并联在惟一的三线上,实现多点测温。(8)负压特性:电源极性接反时,温度计不会因发热而烧毁,但不能正常工作。具体内部原理图和外形图如图3-3所示:图3-33.4高度检测模块设计US-100超声波测距模块可实现2cm~4.5m的非接触测距功能,拥有2.4~5.5V的宽电压输入范围,静态功耗低于2mA,自带温度传感器对测距结果进行校正,同时具有GPIO,串口等多种通信方式,内带看门狗,工作稳定可靠。1.主要技术参数电气参数US-100超声波测距模块工作电压DC2.4V~5.5V静态电流2mA工作温度-20~+70度输出方式电平或UART〔跳线帽选择〕感应角度小于15度探测距离2cm-450cm探测精度0.3cm+1%UART模式下串口配置波特率9600,起始位1位,停止位1位,数据位8位,无奇偶校验,无流控制。2.本模块实物图及尺寸如图3-4和图3-5所示图3-4US-100正面图图3-5US-100反面图3.接口说明本模块共有两个接口,即模式选择跳线和5Pin接口。模式选择跳线接口如图3-6所示。模式选择跳线的间距为2.54mm,当插上跳线帽时为UART〔串口〕模式,拔掉时为电平触发模式。图3-6从左到右依次编号1,2,3,4,5。它们的定义如下:1号Pin:接VCC电源〔供电范围2.4V~5.5V〕。2号Pin:当为UART模式时,接外部电路UART的TX端;当为电平触发模式时,接外部电路的Trig端。3号Pin:当为UART模式时,接外部电路UART的RX端;当为电平触发模式时,接外部电路的Echo端。4号Pin:接外部电路的地。5号Pin:接外部电路的地。4.串口触发测温工作原理在模块上电前,首先插上模式选择跳线上的跳线帽,使模块处于串口触发模式。串口触发测温的时序如图7.1所示:在此模式下只需要在Trig/TX管脚输入0X50〔波特率9600〕,系统便启动温度传感器对当前温度进行测量,然后将温度值通过Echo/RX管脚输出。测量完成温度后,本模块会返回一个字节的温度值〔TData〕,实际的温度值为TData-45。例如通过TX发送完0X50后,在RX端收到0X45,那么此时的温度值为[69〔0X45的10进制值〕-45]=24度。图3-6串口触发测温时序图3.5重力检测模块设计HX711是一款专为高精度称重传感器而设计的24位A/D转换器芯片。与同类型其它芯片相比,该芯片集成了包括稳压电源、片内时钟振荡器等其它同类型芯片所需要的外围电路,具有集成度高、响应速度快、抗干扰性强等优点。降低了电子秤的整机本钱,提高了整机的性能和可靠性。该芯片与后端MCU芯片的接口和编程非常简单,所有控制信号由管脚驱动,无需对芯片内部的存放器编程。输入选择开关可任意选取通道A或通道B,与其内部的低噪声可编程放大器相连。通道A的可编程增益为128或64,对应的满额度差分输入信号幅值分别为±20mV或±40mV。通道B那么为固定的64增益,用于系统参数检测。芯片内提供的稳压电源可以直接向外部传感器和芯片内的A/D转换器提供电源,系统板上无需另外的模拟电源。芯片内的时钟振荡器不需要任何外接器件。上电自动复位功能简化了开机的初始化过程。高精度高增益24位A/D芯片HX711具有以下特点:两路可选择差分输入;片内低噪声可编程放大器,可选增益为64和128;片内稳压电路可直接向外部传感器和芯片内A/D转换器提供电源;片内时钟振荡器无需任何外接器件,必要时也可使用外接晶振或时钟;上电自动复位电路;简单的数字控制和串口通讯:所有控制由管脚输入,芯片内存放器无需编程;可选择10Hz或80Hz的输出数据速率;同步抑制50Hz和60Hz的电源干扰;耗电量〔含稳压电源电路〕:典型工作电流:<.7mA,断电电流:<1μA工作电压范围:2.6~5.5V;HX711管脚说明如图3-7所示:图3-7管脚图HX711管脚描述如下表所示3.6显示模块设计LCD1602采用标准的14脚〔无背光〕或16脚〔带背光〕接口,各引脚接口说明如表所示编号符号引脚说明编号符号引脚说明1VSS电源地9D2数据2VDD电源正极10D3数据3VL液晶显示偏压11D4数据4RS数据/命令选择12D5数据5R/W读/写选择13D6数据6E使能信号14D7数据7D0数据15BLA背光源正极8D1数据16BLK背光源负极4、软件设计与实现在硬件电路确定之后,需要通过软件编程来实现系统的功能,而软件是整个智能家居系统的灵魂。4.1软件设计流程分析本系统采用结构化模块程序设计,所谓“模块”,实质上就是具有一定功能、相对独立的程序段。在编程过程中首先将所要完成的各个功能分别按模块编写和调试,所有模块调试成功以后,再将各个模块连接整合在一起形成系统。模块化程序设计的主要特点是:单个模块比一个完整的程序更容易编写、查错和测试;模块化程序可以实现共享,一个模块化程序可被多个任务在不同的条件下调用;把输入/输出封装起来,可以使程序减少不必要的修改;这样的设计有利于程序代码的优化和共享,而且便于设计、调试和维护,可以增强系统的可靠性。主控制器程序流程图如图4-1所示:图4-1软件设计流程本系统软件设计的核心局部是GSM短信收发,其他次要局部还有传感器程序设计、报警程序设计等。4.2GSM短消息程序设计4.2.1短消息收发模式目前,短消息收发常用基于AT指令的Text和基于AT指令的PDU模式。Text模式只支持传送英文及数字信息,不能收发中文短信,但收发短信代码简单,实现起来比拟容易,故在本系统中为了易于操作,控制阶段将采用Text模式。Text模式在信息传送时通过串口传送的是十六进制ASCII码,其USART通讯默认使用9600比特率,8位数据信息,无奇偶校验,有一位开始位和一位结束位。与短消息有关的AT指令表如表4.1所示:指令作用AT+CNMA新信息确认应答AT+CPMS优先信息存储,这个命令定义用来读写信息的存储区域AT+CMGF优先信息格式,执行格式有TEXT方式和PDU方式AT+CSAS保存设置,保存+CSAS和+CSMP的参数AT+CRES恢复设置AT+CSDH显示文本方式的参数AT+CNMI新信息指示,这个命令选择如何从网络上接收短信息AT+CMGR读短信,信息从+CPMS命令设定的存储器读取。AT+CMGL列出存储的信息AT+CMGS发送信息AT+CMGW写短信息并存储AT+CMSS从存储器中发送信息AT+CSMP设置文本模式的参数AT+CMGD删除短信息AT+CSCA短信效劳中心地址AT+WMSC信息状态〔是否读过、是否发送等等〕修正AT+WMGO信息覆盖写入AT+WUSS不改变SMS状态,在执行+CMGR或+CMGL后仍保持UNREAD表4.1与短消息有关的AT指令PDU模式不仅支持中文短信,也能发送数字和英文信息,但比拟复杂。为了显示直观易懂,本系统的报警阶段将采用PDU模式。PDU模式收发短信有3种编码方式:7-bit、8-bit和UCS2。7-bit编码用于发送普通的ASCII字符,8-bit编码通常用于发送数据消息,UCS2编码用于发送Unicode字符。PDU相当于一个数据包,由0-9,A-F组成,他们是8位字节的十六进制数或BCD码的十进制数。发送和接收的PDU串结构是不同的。4.2.2接收短消息程序设计系统接受短消息其实就是MCU读取GSM模块中SIM卡内新短消息的过程。当从SIM卡内读取短消息时,首先需要设定短信收发模式,其次通过查询和读取指令获取短消息内容,然后将收到的短消息与预先设置好的控制命令比对,从而做出相应的控制操作。程序流程图如图4-2所示:主要程序指令有:USART_Puts(“AT+CMGF=1\r”);//选择以TEXT模式收信息USART_Puts(“AT+CMGL=“RECUNREAD”\r”);//查询是否有未读信息USART_Puts(“AT+CMGR=n\r”);//读取信息图4-2接收短信流程图4.2.3发送短消息程序设计在本系统中当发生紧急情况时,需要主控制器通过GSM模块给用户发送发送报警短信。当系统中的任一传感器检测到异常时,控制系统会按照预先设置好的短消息内容发送给用户。在短消息发送的实现过程中,主要的工作是设置好短消息的发送模式,其次是把预先想好的短信内容加载到要发送的数组中,最后就是把短信发送到设置好的用户号码中。其程序流程图4-3如下图:图4-3发送短信流程图主要程序指令有:USART_Puts(“AT+CMGF=0\r”);//选择以PDU模式发信息USART_Puts(“AT+CMGS=”+86XXXXXXXXXXX”\r”);//输入用户号USART_Puts(message),USART_Puts(“\0xla\r”);//发送短信内容5.系统调试与实现5.1硬件制作与调试硬件的制作是很重要的,它直接关系到整个设计的成败。由于采用的是手工制版,在设计PCB过程中,使用的是单程走线,这就不免出现少量的飞线。在本次系统制作过程中,为了制作简便,使用了市场上现有的GSM模块GTM900C。在与主控板连接时,需预先将其与PC连接进行测试,过程为:图5-1GSM模块测试结果图将GTM900C模块通过RS232转USB线与计算机连接,进行调试。先启动GSM串口调试助手程序,选择好端口,将波特率设为9600,无奇偶效验位。然后翻开串口,依次点选GSM调试专用栏的生产厂商、设备类型、设备初始化和拨号测试等,如图5-1所示结果显示GTM900C模块工作正常。5.2软件编程与调试软件是整个系统的灵魂,本次软件设计采用KeilμVision4开发软件。KeilμVision4编程示意图如图5-2所示:图5-2编程示意图5.3实物验证:1.启动系统后,GSM模块打给预设的提示其开始正常工作,结果如图5-3所示。图5-3正常工作结果图2.当温度超过预设的值时,将接受到如图5-4所示短信〔短信内容以设置〕图5-43.当高度超过预设值时,将接收到如图5-5所示短信〔短息内容可以设置〕图5-54.当重力超过预设值时,将接收到如图5-6所示短信〔短信内容可以设置〕图5-56.总结与展望经过自己的不懈努力,本文设计与实现了一个针对普通家庭的垃圾智能管理系统。本系统将单片机、GSM网络和多传感器有机结合,实现了远程接收,具体为:(1)垃圾桶已满用过电脑提示用户;(2)对于用户的家庭卫生起到很好的保护作用。虽然本次研究和设计根本实现了系统的各项功能,但是系统还有许多需要完善的地方。首先,为了提高系统对险情的检测灵敏性和可靠性,可以考虑利用无线传感网络技术。其次,本次系统远程控制所用的短消息属于第一代无线数据效劳技术,在内容、数据输送等方面存在限制,有时存在短信延迟等现象,可以考虑使用GTM900C自带的GPRS功能,或者利用现在已经大力开展的3G网络及正在不断开展的4G网络,以实现数据的传输。最后,本系统的美观还有待提升。7.致谢本研究及学位论文是在我的导师***老师的亲切关心和悉心指导下完成的。他严肃的科学态度,严谨的治学精神,精益求精的工作作风,深深地感染和鼓励着我。*老师不仅在学业上给我以精心指导,同时还在思想、生活上给我以无微不至的关心,在此谨向*老师致以诚挚的谢意和崇高的敬意。我还要感谢在一起愉快的度过毕业论文小组的同学们,正是由于你们的帮助和支持,我才能克服一个一个的困难和疑惑,直至本文的顺利完成。在论文即将完成之际,我的心情无法平静,从开始进入课题到论文的顺利完成,有多少可敬的师长、同学、朋友给了我无言的帮助,在这里请接受我诚挚的谢意!最后我还要感谢培养我长大含辛茹苦的父母,谢谢你们!最后,再次对关心、帮助我的老师和同学表示衷心地感谢!参考文献[1]MeHome~(TM)全移动智能家居系统[J].数字社区&智能家居,2007,(08)[2]智能家居系统分类——尼科智能家居系统[J].电脑知识与技术(学术交流),2006,(06)[3]李春丽.智能家居产品体系及核心技术[J].建设科技,2009,(09)[4]陈鹏.完整意义的智能家居系统——LonWorks智能家居系统[J].电脑知识与技术(学术交流),2006,(Z1)[5]张鼎盛.看看专业效劳商眼中的智能家居系统[J].建材与装修情报,2007,(04)[6]瑞典PPD智能家居系统——E-PowerSecurity[J].IB智能建筑与城市信息,2004,(10)[7]邓增绍.智能家居DIY方案[J].数字社区&智能家居,2008,(09)[8]陈鹏.Nico智能家居系统特点浅析[J].数字社区&智能家居,2008,(12)[9]智能化生活“触手可及”[J].硅谷,2010,(17)[10]何朝.基于ZigBee技术的智能家居数据采集控制系统[D].太原理工大学,2011,(08).[11]杨琛.智能家居物联网监控终端的研究与设计[D].太原理工大学,2011,(08).附录A:传感器采集显示控制源程序#include<reg52.h>//头文件#include<intrins.h>#include<stdlib.h>#include<stdio.h>#defineucharunsignedchar //数据类型的宏定义#defineuintunsignedint#defineulongunsignedlongsbitlcdrs=P2^2;sbitlcdrw=P2^3;sbitlcden=P2^4;//1602三个控制引脚sbitds=P1^0;//DS18B20信号引脚sbitTX=P3^1;//超声波发射引脚sbitRX=P3^2;//超声波接收引脚sbithx711_dout=P1^3;//AD模块数据IO口sbithx711_sck=P1^4;//AD模块时钟IO口,以上五个接口可以根据自己的需求修改, //如果你需要加四个红外传感器,也可以在这里用sbit定义比方sbithongwai1=P1^1sbitLED1=P2^5;//温度超标指示灯 为了节省IO口资源,与GSM-MCU相连的信号线从这里相对应引出sbitLED2=P2^6;//高度超标指示灯sbitLED3=P2^7;//重量超标指示灯uinttemp;//定义整形的温度数据floatf_temp;//定义浮点型的温度数据uinttime=0;//存放定时器的值unsignedlongS=0;//距离值intweight;//重量 以上这些是变量,一般不需要改动unsignedcharcodetable1[]={'0','1','2','3','4','5','6','7','8','9'};//查表显示数值用于1602显示的数组voiddelay(uintz)//延时函数{ uintx,y; for(x=z;x>0;x--) for(y=110;y>0;y--);}/*uS延时函数,含有输入参数unsignedchart,无返回值unsignedchar是定义无符号字符变量,其值的范围是0~255这里使用晶振12M,大致延时长度如下T=tx2+5uS*/voidDelayUs2x(unsignedchart){while(--t);}/*1602写指令函数*/voidwrite_com(ucharcom){ lcdrs=0; lcden=0; lcdrw=0; P0=com; delay(1); lcden=1; delay(1); lcden=0; delay(1);}/*1602写数据函数*/voidwrite_date(uchardate){ lcdrs=1; lcden=0; lcdrw=0; P0=date; delay(1); lcden=1; delay(1); lcden=0; delay(1);}/*DS18B20初始化*/voiddsreset(){ uinti; ds=0; i=103; while(i>0)i--; //延时750US ds=1; i=4; while(i>0)i--; //延时等待}/*DS18B20读一位数据函数*/bittempreadbit(){ uinti; bitdat; ds=0;i++;//i++延时作用 ds=1;i++;i++; dat=ds; i=8;while(i>0)i--; return(dat);}/*DS18B20读一个字节函数*/uchartempread() { uchari,j,dat; dat=0; for(i=1;i<=8;i++) { j=tempreadbit(); dat=(j<<7)|(dat>>1); } return(dat);}/*DS18B20向DS18B20写一个字节函数*/voidtempwritebyte(uchardat){ uinti; ucharj; bittestb; for(j=1;j<=8;j++) { testb=dat&0x01; dat=dat>>1; if(testb) //写1 { ds=0; i++;i++;//延时15US ds=1; i=8;while(i>0)i--; } else //写0 { ds=0; i=8;while(i>0)i--; ds=1; i++;i++; } }}/*DS18B20开始获取温度并转换*/voidtempchange(){ dsreset();//初始化 delay(1); tempwritebyte(0xcc);//跳过ROM编码直接向18B20发温度转换命令 tempwritebyte(0x44);//启动18B20进入温度转换}/*DS18B20读取存放器中储存的温度数据*/uintget_temp() { uchara,b; dsreset(); //初始化 delay(1); tempwritebyte(0xcc);//跳过ROM编码直接向18B20发温度转换命令 tempwritebyte(0xbe);//读内部RAM中的9字节温度数据 a=tempread();//读低8位 b=tempread();//读高8位把a和b两个字节组合成一个字节 temp=b; temp<<=8; temp=temp|a; f_temp=temp*0.0625; //温度存放器中的12位,分辨率为0.0625 temp=f_temp*10+0.5; //乘以10表示小数点后面只取1位,加0.5是四舍五入 if(temp>200)//这里其实是20℃,以此类推,这里就是你根据系统指标进行修改设置的地方,记住,温度设置值要乘于10 LED1=0; else LED1=1; f_temp=f_temp+0.05; //这里无需修改 returntemp; //temp是整形}/*温度数据发送给1602*/voiddisplay(uchardate){ write_date(date);}/*温度显示*/voiddis_temp(uintt){ ucharj; write_com(0x80+0x40+9); //显示位置在第二行第九个格子 display('T'); display(''); j=t/100; //温度的十位 display(table1[j]); j=t%100/10; //温度的个位 display(table1[j]); display('.');//小数点 j=t%100%10; //小数点后第一位 display(table1[j]); }/*高度检测及显示*/voidhightest(){ uinti;TX=1;//触发信号是高电平脉冲,宽度大于10usDelayUs2x(10);TX=0;while(!RX);//等待高电平TR0=1; //检测到高电平时翻开定时器0,开始计时while(RX);//等待低电平TR0=0; //检测到低电平时关闭定时器0,停止计时time=TH0*256+TL0;//取出定时器值高8位和低8位合并S=time/58;//为什么除以58等于厘米,Y米=〔X秒*340/2,X秒=〔2*Y米〕/340->X秒=0.0058*Y米->厘米=微秒/58,这里推算出来了,你不需要修改 if(S<10) //如果有红外的话你只需要在这里写入if((S<10)&&(hongwai1==0)&&(hongwai2==0)&&(hongwai3==0)&&(hongwai4==0))即可 LED2=0; else LED2=1;TH0=0;TL0=0;//每算完一次要去除定时器0存放器中的值write_com(0x80+0x40);//显示位置设置为第二行最开始的位置 display('H'); display('');i=S/100; //百位 display(table1[i]);i=S%100/10; //十位 display(table1[i]);i=S%10; //个位 display(table1[i]); display(''); display('C'); //单位为厘米 display('M');delay(250);//延时决定采样速度}/*称重模块//AD转换*/voidDelay__hx711_us(void){ _nop_(); _nop_();}ulongReadCount(void) //设置增益为128 ,这个子函数你不需要修改,就是个初始化{ ulongcount; uchari; 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; Delay__hx711_us(); hx711_sck=0; return(count);}voidget_weight() //获取被测物体重量{ ulonghx711_data,a; uintget,jj,aa; hx711_data=ReadCount(); //HX711AD转换数据处理 get=(uint)(hx711_data/100); a=ReadCount(); aa=(ulong)a/10; weight=(uint)((float)aa/2.094+0.05); //重量转换函数,单位为g,这个2.094是大致算看了下调试出来的,对应于我目前寄给你的传感器,不同的型号,不同的量程都是有差异的,我把算法的datasheet也打包发给你了,你自己修改,并调试 weight=weight-1001; //lkg的皮重,这个数值可以自己根据实测数据进行修改 if(weight>2000) //这里就是2kg,如果你要设置为50kg,这里就应该是50000 LED3=0; else LED3=1; jj=weight/100000;//显示程序kg的百位 write_com(0x80); //显示位置设置为第一行最开始的位置 display('G'); display(''); display(table1[jj]);//kg的十位 jj=weight/10000%10; display(table1[jj]);//kg的个位 jj=weight/1000%10; display(table1[jj]); display('.'); jj=weight/100%10; //小数点后一位 display(table1[jj]); display('K'); display('g');}/*定时器0初始化,主要用于超生波模块,用于计脉冲数,不可缺少的函数*/voidTIM0init(void){TMOD|=0x01;//定时器0工作方式1TH0=0x00;TL0=0x00;ET0=1;EA=1;}/*1602初始化*/voidinit(){ P0=0x00; lcden=0; lcdrw=0; write_com(0x38); write_com(0x0c); write_com(0x06); write_com(0x01);}/*主函数,单片机开始供电之后程序就main函数开始执行,前面的都是子程序,从main函数里调用,所以看代码应该先看主函数,其子函数的放置顺序可以按主程序调用的顺序编写*/voidmain(){ init(); TIM0init(); while(1) //while〔1〕,一直为1就是为真,就一直执行这里,也即执行函数里面的程序 { hightest();//调用高度检测子函数 tempchange(); //调用温度获取子函数 dis_temp(get_temp()); //调用温度显示子函数 get_weight(); //调用称重子函数 }}voidTimer0()interrupt1 //中断的调用{RX=0;//Echo脚置为低电平}附录B:GSM控制源程序#include<reg52.h> //头文件#include<intrins.h>#include<string.h>#include<stdio.h>#defineuintunsignedint //数据类型宏定义#defineucharunsignedchar#defineMAXCHAR81ucharaa[MAXCHAR];//数组定义,GSM的缓存数据会存在里面codeucharATE0[]="ATE0\r\n";codeucharCREG_CMD[]="AT+CREG?\r\n"; codeucharATCN[]="AT+CNMI=2,1\r\n"; //选择如何从网络上接受短信息codeucharCMGF0[]="AT+CMGF=0\r\n"; //信息格式为PUDcodeucharCMGF1[]="AT+CMGF=1\r\n"; //信息格式为TEXTcodeucharCMGR[12]="AT+CMGR=1\r\n"; //读短信指令codeucharCMGD[12]="AT+CMGD=1\r\n"; //删除短信息//以上均为初始化设置,你不需修改codeucharSMS_sendzhongliang[]="AT+CMGS=22\r\n"; //这三个就是你需要修改的,他是短信代码的长度信息,在你用软件获取代码的时候可以查到这个数值是多少codeucharSMS_sendwendu[]="AT+CMGS=22\r\n";codeucharSMS_sendgaodu[]="AT+CMGS=22\r\n";sbitwendu=P1^0; //连接传感器MCU的P2^5sbitgaodu=P1^1 ; //连接传感器MCU的P2^6sbitzhongliang=P3^2; //连接传感器MCU的P2^7sbitdeng=P2^7; //这个接口留给你,作为你以后进行二次开发进行控制的一个调试参考点,发送短信内容:kd时灯亮,gd时灯灭uchara,j=0,flag=0; //变量定义及初值设定intg_timeout=0;voiddelay(uintms)//延时子程序{uchari;while(ms--){for(i=0;i<120;i++);}}/***********************************************************函数名称:Print_Char函数功能:发送单个字符 你无需修改入口参数:ch出口参数:无***********************************************************/Print_Char(ucharch)//发送单个字符{SBUF=ch;//送入缓冲区while(TI!=1);//等待发送完毕TI=0;//软件清零}/***********************************************************函数名称:Print_Str函数功能:发送字符串 你无需修改入口参数:*str出口参数:无***********************************************************/Print_Str(uchar*str)//发送字符串{while(*str!='\0'){Print_Char(*str);delay(2);str++;}}/***********************************************************函数名称:Ini_UART函数功能:串口初始化、定时器初始化你无需修改入口参数:无出口参数:无***********************************************************/Ini_UART(void)//串口初始化、定时器初始化{SCON=0x50;//SCON:serailmode1,8-bitUART,enableucvr//UART为模式1,8位数据,允许接收TMOD|=0x20;//TMOD:timer1,mode2,8-bitreload//定时器1为模式2,8位自动重装PCON|=0x80;//SMOD=1;TH1=0xFA;//Baud:19200fosc="11".0592MHzTL1=0xFA;IE|=0x90;//EnableSerialInterruptTR1=1;//timer1runTI=1;ES=1;}voidclearBuff(void)//去除缓存的子函数{for(j=0;j<MAXCHAR;j++){aa[j]=0x00;}j=0;}intHand(){delay(10);if(strstr(aa,"OK")!=NULL)//检测单片机和模块的连接,连接成功返回1{g_timeout=0;return1;}if(g_timeout>50){g_timeout=0;return-1;}g_timeout++;return0;}voidAT(void){clearBuff();Print_Str(ATE0);delay(50);while(strstr(aa,"OK")==NULL){delay(50);//led(0x01);clearBuff();Print_Str(ATE0);}//led(0x02);Print_Str(ATCN);delay(20);while(1){clearBuff();Print_Str(CREG_CMD);delay(20);if(((aa[9]=='0')&&(aa[11]=='1'))||((aa[9]=='0')&&(aa[11]=='5'))) //注册基站,通过即说明可以通信{clearBuff();//led(0x04);break;}else{clearBuff();//led(0xff);delay(20);}}}voidsend_call() //拨打子函数无须修改{clearBuff();delay(100);Print_Str(CALL_YOU_TELNUMBER);//打clearBuff();delay(300);}voidsend_pduzhongliang() //发送重量提醒信息{clearBuff();Print_Str(CMGF0);delay(100);Print_Str(SMS_sendzhongliang);//发送中文短信delay(500);Print_Str(zhongliangpdu);

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论