这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 高校专区 » 毕业设计专区 » 基于SHT15的温湿度监测系统

共2条 1/1 1 跳转至

基于SHT15的温湿度监测系统

专家
2013-01-28 11:26:46     打赏

作者:塔里木大学 王亮 沈鑫 谢振庭
指导教师:白铁成

  作品简介

  温湿度的测量在仓储管理、生产制造、气象观测、科学研究以及日常生活中被广泛应用,传统的模拟式湿度传感器一般都要设计信号调理电路并需要经过复杂的校准和标定过程,因此测量精度难以保证,且在线性度、重复性、互换性、一致性等方面往往不尽人意。SHT1X是瑞士Sensirion公司推出的新型温湿度传感器。SHT1X温湿度传感器由于将温度传感器、湿度传感器、信号调理、模/数转换器、标定参数及总线接口全部集成到传感器内部,因此,既提高了传感器的性能,又降低了成本、减少了体积。将SHT1X温湿度传感器与STC单片机结合应用实现对温湿度的测量,从而发挥出它们强大的优势互补作用,从而减少了传统传感器测量温湿度模式中的复杂操作和测量精度的误差。  

 

  平台选型说明

  作为系统的控制核心,选择一款合适的微控制器是非常关键的。本次设计中所要测量的是温度、湿度(模拟量),系统要求在野外长时间工作,机构简单,便于携带;单片机的片上功能尽可能完备,不用扩展系统,满足所要测量的任务。经过比较,我们选择了采用宏晶公司最新STC15系列IAP15F2K61S2 芯片。ISP/IAP,应用可编程,无需编程器,无需仿真器。USB连接线可当仿真器使用,它的突出优点是
  (1)、超低功耗和功能集成,非常适合在自动信号采集、液晶显示智能化仪器、电池供电便携式装置等领域应用;
  (2)、增强型8051 CPU,1T,单时钟/机器周期,速度比普通8051快8-12 倍;
  (3)、 61K字节片内片内Flash程序存储器,擦写次数10万次以上;
  (4)、 片内大容量2048字节的SRAM;
  (5)、大容量片内EEPROM,擦写次数10 万次数以上;
  (6)、共8 通道10 位高速ADC,速度可达30 万次/秒,3 路PWM 还可当3 路D/A使用;
  (7)、共3通道捕获/比较单元(CCP/PWM/PCA)。

  设计说明

  1、系统总体方案
  系统设计总体方案如图1所示。  

 

  2、传感器选型及电路设计
  温湿度传感器选择SHT15传感器,规格如下:
  传感器类型:电压输出型;
  供电电压:2.4-5.5V DC;
  测量温度量程:0-100%RH;
  测量湿度度量程:-40-123.8℃;
  测湿精度:±2.0[%RH];
  测温精度:±0.3[℃]在25℃;
  外观如图2所示。  

 

  SHT15信号调理电路如图3所示。  

 

  3、液晶显示模块
  为了便于现场观测,系统中还带有液晶显示模块,ST7920是台湾矽创电子公司生产的中文图形液晶控制器,可作为控制器和驱动器捉供32路com 输出和64路seg输出。与驱动器ST7921组成的模块最多可驱动256×32点阵液晶,主要用于显示汉字及图形,其内置了2 MB中文字型ROM(CGROM),共提供8192个中文字型(16×16点阵);16KB半宽字型ROM(HCGROM),共提供126个西文字型
  (16×8点阵);64×16位字符显示RAM(DDRAM最多16字符×4行,LCD显示范围16×2行);64×16位字符产生RAM(CGRAM);15×16位共240点的ICON RAM(ICONRAM)。
  此外,为了适应多种微处理器与单片机接口需求,该模块还可提供4位并行、8位并行、2线串行以及3线串行等多种接口。利用上述特性方便实现文字与图形混合显示、画面清除、光标归位、显示开/关、光标显示/隐藏、显示字体闪烁、光标移位、显示移位、垂直画面旋转、反白显示、休眠模式等功能。与单片机硬件接口电路如图4所示。  

 

  4、电源模块
  电源电路如图5所示。  

 

  5、软件设计
  (1)软件流程图如图6所示。  

 

  (2)温湿度传感器测量模块
  温湿度传感器将采集到的信息传送到液晶显示模块和串口模块发送到上位机PC端,部分代码如下:
  char s_measure(unsigned char *p_value, unsigned char *p_checksum, unsigned char mode)
  { unsigned error=0;
  unsigned int i;
  s_transstart(); //启动传输
  switch(mode) //选择发送命令
  {
  case TEMP : error+=s_write_byte(MEASURE_TEMP); break; //测量温度
  case HUMI : error+=s_write_byte(MEASURE_HUMI); break; //测量湿度
  default : break;
  }
  for (i=0;i<65535;i++) if(DATA==0) break; //等待测量结束
  if(DATA) error+=1;
  *(p_value) =s_read_byte(ACK); //读第一个字节,高字节 (MSB)
  *(p_value+1)=s_read_byte(ACK); //读第二个字节,低字节 (LSB)
  *p_checksum =s_read_byte(noACK); //read CRC校验码
  return error; // error=1 通讯错误
  }
  void calc_sth10(float *p_humidity ,float *p_temperature)
  {
  const float C1=-4.0;
  const float C2=+0.0405;
  const float C3=-0.0000028;
  const float T1=+0.01; // 14位温度精度 5V条件 修正公式
  const float T2=+0.00008; // 14位温度精度 5V条件 修正公式
  float rh=*p_humidity;
  float t=*p_temperature;
  float rh_lin;
  float rh_true;
  float t_C; // t_C : 温度 ℃
  t_C=t*0.01 - 40; //补偿温度
  rh_lin=C3*rh*rh + C2*rh + C1; //相对湿度非线性补偿
  rh_true=(t_C-25)*(T1+T2*rh)+rh_lin;
  if(rh_true>100)rh_true=100;
  if(rh_true<0.1)rh_true=0.1;
  *p_temperature=t_C; //返回温度结果
  *p_humidity=rh_true; //返回湿度结果
  }
  (3)128*64液晶驱动与显示软件设计
  液晶驱动的源程序文件名为LCD12864.c,头文件为LCD12864.H。在需要使用液晶驱动时,包含LCD12864.H头文件即可,使用Send_LCD(缓冲区指针,缓冲区长度,LCD页号)函数显示字符串。使用液晶前需要用LCD_init();函数初始化液晶,再使用clear_p()函数清屏。主要代码如下:
  void init12864lcd(void)
  {
  delay_50ms(2);
  write_12864com(0x30);
  delay_50us(4);
  write_12864com(0x30);
  delay_50us(4);
  write_12864com(0x0f);
  delay_50us(4);
  write_12864com(0x01);
  delay_50us(240);
  write_12864com(0x06);
  delay_50us(10);
  write_12864com(0x0c);
  delay_50us(10);
  }
  void display1(void)
  {
  uchar i;
  write_12864com(0x80);
  for(i=0;i<18;i++)
  {
  write_dat(table2[i]);
  delay_50us(1);
  }
  }
  void displaywendu(void)
  {
  uchar i;
  write_12864com(0x94);
  for(i=0;i<3;i++)
  {
  write_dat(wendu[i]);
  delay_50us(1);
  }
  for(i=0;i<1;i++)
  {
  write_dat(table5[i]);
  delay_50us(1);
  }
  for(i=4;i<5;i++)
  {
  write_dat(wendu[i]);
  delay_50us(1);
  }
  }
  }
  (4)串口通信模块
  为了实现与PC机通信,设计了串口通信程序,波特率设定为9600bps。
  bit busy;
  bit Flag;
  uchar GetC;
  void InitUART(void);
  void SendData(uchar dat);
  void SendString(uchar *s);
  void InitUART(void)
  { SCON = 0x50;
  AUXR1= AUXR1 & 0x3F;
  AUXR = 0x40; //定时器1为1T模式
  TMOD = 0x20; //定时器1为模式2(8位自动重载)
  TL1 = 0xDC;
  TH1 = 0xDC;
  TR1 = 1;
  ES = 1; //使能串口中断
  EA = 1; }
  void Uart() interrupt 4 using 1
  {
  if (RI)
  { RI = 0;
  GetC = SBUF; //P0显示串口数据
  Flag=1;
  }
  if (TI)
  { TI = 0; //清除TI位
  busy = 0; //清忙标志
  }
  }
  void SendData(uchar dat)
  {
  while (busy);
  busy = 1;
  SBUF = dat;
  }
  void SendString(uchar *s)
  { while (*s)
  {
  SendData(*s++);
  }
  }

  作品特色

  将SHT1X温湿度传感器与STC单片机结合应用实现对温湿度的测量,从而发挥出它们强大的优势互补作用,从而减少了传统传感器测量温湿度模式中的复杂操作和测量精度的误差。这个作品可以被应用到仓储管理、生产制造、气象观测、科学研究以及日常生活中,可以说是非常实用,而且体型小,方便携带,还可以与其他大型设备连接,更加的方便快捷,简单。这更说明了这个产品的通用性高,可实施性强等特点。

系统演示视频:http://v.eepw.com.cn/video/play/id/2661




关键词: 基于     SHT15     温湿度     监测     系统     测量     传感器    

菜鸟
2013-01-28 11:42:25     打赏
2楼
楼主贴得好详细………………

共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]