您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 管理学资料 > 基于MSP430单片机的温湿度检测
通信与信息工程学院SchoolofCommunicationandInformationEngineering1基于单片机的温湿度检测【摘要】:作为物联网的重要组成部分,本文描述了一种温湿度传感系统的实现。先描述了系统的总体架构与功能模块实现,而后通过实验测试了系统的性能表现,最后对系统提出了改进的方案。关键词:单片机,温湿度传感器Abstract:AsanimportantpartoftheInternetofthings,thispaperdescribestheimplementationofatemperatureandhumiditysensorsystem.Thefirstdescribestheoverallstructureandfunctionmoduleofsystemimplementation,andthentesttheperformanceofthesystem,theimprovedschemeofthesystemisputforward.Keywords:Singlechipmicrocomputer,temperatureandhumiditysensor1.引言物联网是新一代信息技术的重要组成部分,也是“信息化”时代的重要发展阶段。顾名思义,物联网就是物物相连的互联网。这有两层意思:其一,物联网的核心和基础仍然是互联网,是在互联网基础上的延伸和扩展的网络;其二,其用户端延伸和扩展到了任何物品与物品之间,进行信息交换和通信,也就是物物相息。物联网通过智能感知、识别技术与普适计算等通信感知技术,广泛应用于网络的融合中,也因此被称为继计算机、互联网之后世界信息产业发展的第三次浪潮。物联网是互联网的应用拓展,与其说物联网是网络,不如说物联网是业务和应用。因此,应用创新是物联网发展的核心,以用户体验为核心的创新2.0是物联网发展的灵魂。就物联网技术而言,传感器是实现这一技术的基础,本文以温湿度传感器为例,介绍一种能够实现温湿度采集并反馈给用户的装置。2.系统结构本系统由MCU、温湿度传感器、液晶显示屏三部分构成,所有控制指令由MCU发出,控制温湿度数据的读取与液晶屏的显示。系统结构图如图1所示。MCUSensorOLED图1通信与信息工程学院SchoolofCommunicationandInformationEngineering22.1.传感器模块传感器具有将物理信息转换为电信号的功能。这里我们采用集成一体化温湿度传感器DHT11。DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器,它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有极高的可靠性和卓越的长期稳定性。传感器包括一个电阻式感湿元件和一个NTC测温元件,并与一个高性能8位单片机相连接。因此该产品具有品质卓越、超快响应、抗干扰能力强、性价比极高等优点。每个DHT11传感器都在极为精确的湿度校验室中进行校准。校准系数以程序的形式存在OTP内存中,传感器内部在检测型号的处理过程中要调用这些校准系数。单线制串行接口,使系统集成变得简易快捷。超小的体积、极低的功耗,使其成为该类应用中,在苛刻应用场合的最佳选择。产品为4针单排引脚封装,连接方便。2.2.控制模块为了进行对传感器及液晶屏进行控制,有必要使用一款可编程控制器件。控制方案有很多,但是出于成本与功耗控制考虑,这里我们采用MCU来实现,具体使用的是德州仪器生产的MSP430G2553芯片。MSP430系列单片机是美国德州仪器(TI)1996年开始推向市场的一种16位超低功耗、具有精简指令集(RISC)的混合信号处理器(MixedSignalProcessor)。MSP430单片机称之为混合信号处理器,是由于其针对实际应用需求,将多个不同功能的模拟电路、数字电路模块和微处理器集成在一个芯片上,以提供“单片机”解决方案。该系列单片机多应用于需要电池供电的便携式仪器仪表中。使用IAR集成开发环境配合TI官方的LaunchPad可以很方便的进行开发。2.3.显示模块对于显示方案的选取,这里我们采用有机发光二极管显示方案。有机发光二极管又称为有机电激光显示(OrganicLight-EmittingDiode,OLED),由美籍华裔教授邓青云在实验室中发现,由此展开了对OLED的研究。OLED显示技术具有自发光的特性,采用非常薄的有机材料涂层和玻璃基板,当有电流通过时,这些有机材料就会发光,而且OLED显示屏幕可视角度大,并且能够节省电能。3.关键模块设计3.1.数据获取模块数据获取模块的功能是从传感器中获取数据,并将数据存储在单片机内存中。该模块设计的关键在于控制单片机按照正确时序从传感器中读取数据。数据获取模块的工作流程如图2所示通信与信息工程学院SchoolofCommunicationandInformationEngineering3发送读取数据命令读取数据存储是否收到响应NY图2数据获取模块部分代码如下://复位DHT11voidDHT11_Rst(void){DHT11_IO_OUT();//SETOUTPUTDHT11_DQ_OUT0;//拉低DQdelay_ms(25);//拉低至少18msDHT11_DQ_OUT1;//DQ=1delay_us(30);//主机拉高20~40us}//等待DHT11的回应//返回1:未检测到DHT11的存在//返回0:存在charDHT11_Check(void){charretry=0;DHT11_IO_IN();//SETINPUTwhile(DHT11_DQ_IN&&retry100)//DHT11会拉低40~80us{retry++;delay_us(1);};if(retry=100)return1;elseretry=0;while(!DHT11_DQ_IN&&retry100)//DHT11拉低后会再次拉高40~80us{retry++;delay_us(1);};if(retry=100)return1;return0;}//从DHT11读取一个位//返回值:1/0charDHT11_Read_Bit(void)通信与信息工程学院SchoolofCommunicationandInformationEngineering4{charretry=0;while(DHT11_DQ_IN&&retry100)//等待变为低电平{retry++;delay_us(1);}retry=0;while(!DHT11_DQ_IN&&retry100)//等待变高电平{retry++;delay_us(1);}delay_us(50);//等待40usif(DHT11_DQ_IN)return1;elsereturn0;}//从DHT11读取一个字节//返回值:读到的数据charDHT11_Read_Byte(void){chari,dat;dat=0;for(i=0;i8;i++){dat=1;dat|=DHT11_Read_Bit();}returndat;}//从DHT11读取一次数据//temp:温度值(范围:0~50°)//humi:湿度值(范围:20%~90%)//返回值:0,正常;1,读取失败charDHT11_Read_Data(char*temp,char*humi){charbuf[5];chari;DHT11_Rst();if(DHT11_Check()==0){for(i=0;i5;i++)//读取40位数据{通信与信息工程学院SchoolofCommunicationandInformationEngineering5buf[i]=DHT11_Read_Byte();}if((buf[0]+buf[1]+buf[2]+buf[3])==buf[4]){*humi=buf[0];*temp=buf[2];}}elsereturn1;return0;}//初始化DHT11的IO口DQ同时检测DHT11的存在//返回1:不存在//返回0:存在charDHT11_Init(void){DHT11_IO_OUT();//PORTA.11推挽输出DHT11_DQ_OUT1;//输出1DHT11_Rst();returnDHT11_Check();}3.2.显示控制模块显示模块是实现将单片机内存中数据输出显示的功能。同样该模块的正常工作需要严格遵守单片机与液晶之间的通信协议。显示控制模块的工作流程如图3所示。MCUOLED发送命令与数据图3显示控制部分代码如下:#includeoled.h#includeoledfont.h#includedelay.h//向SSD1306写入一个字节。//dat:要写入的数据/命令//cmd:数据/命令标志0,表示命令;1,表示数据;voidOLED_WR_Byte(u8dat,u8cmd){u8i;if(cmd)OLED_DC_Set();通信与信息工程学院SchoolofCommunicationandInformationEngineering6elseOLED_DC_Clr();OLED_CS_Clr();for(i=0;i8;i++){OLED_SCLK_Clr();if(dat&0x80){OLED_SDIN_Set();}elseOLED_SDIN_Clr();OLED_SCLK_Set();dat=1;}OLED_CS_Set();OLED_DC_Set();}voidOLED_Set_Pos(unsignedcharx,unsignedchary){OLED_WR_Byte(0xb0+y,OLED_CMD);OLED_WR_Byte(((x&0xf0)4)|0x10,OLED_CMD);OLED_WR_Byte((x&0x0f)|0x01,OLED_CMD);}//开启OLED显示voidOLED_Display_On(void){OLED_WR_Byte(0X8D,OLED_CMD);//SETDCDC命令OLED_WR_Byte(0X14,OLED_CMD);//DCDCONOLED_WR_Byte(0XAF,OLED_CMD);//DISPLAYON}//关闭OLED显示voidOLED_Display_Off(void){OLED_WR_Byte(0X8D,OLED_CMD);//SETDCDC命令OLED_WR_Byte(0X10,OLED_CMD);//DCDCOFFOLED_WR_Byte(0XAE,OLED_CMD);//DISPLAYOFF}//清屏函数,清完屏,整个屏幕是黑色的!和没点亮一样!!!voidOLED_Clear(void){u8i,n;for(i=0;i8;i++)通信与信息工程学院SchoolofCommunicationandInformationEngineering7{OLED_WR_Byte(0xb0+i,OLED_CMD);//设置页地址(0~7)OLED_WR_Byte(0x00,OLED_CMD);//设置显示位置—列低地址OLED_WR_Byte(0x10,OLED_CMD);//设置显示位置—列高地址for(n=0;n128;n++)OLED_WR_Byte(0,OLED_DATA);}//更新显示}//在指定位置显示一个字符,包括部分字符//x:0~127//y:0~63//mode:0,反白显示;1,正常显示//size:选择字体16/12voidOLED_ShowChar(u8x,u8y,u8chr){unsignedcharc=0,i=0;c=chr-'';//得到偏移后的值if(xMax_Column-1){x=0;y=y+2;}if(SIZE==16){OLED_Set_Pos(x,y);for(i=0;i8;i++)OLED_WR_Byte(F8X16[c*16+i],OLED_DATA);OLED_Set_Pos(x,y+1);f
本文标题:基于MSP430单片机的温湿度检测
链接地址:https://www.777doc.com/doc-7183282 .html