原创 sht10温湿度传感器

2007-11-8 14:18 4564 10 13 分类: 测试测量

最近在用瑞士的SENSIRIONSHT10温湿度传感器,感觉用起来还不错,挺方便的。就是价格高一些。也有人建议用湿敏电阻,有机会试一下。下面是51c语言代码。参考一下。后面附有原厂提供的c代码的pdf文件


<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

/******************************************************************************************
* 函数名称    :Transstart
* 功能描述    :  
* 参数        :  参数名称: 输入/输出? 类型  描述
*
* 返回值      :
* 作者        :
* 创建日期    :2006-12-19
* 全局变量    :
* 全局静态变量:
* 局部静态变量:
*----------------------------------------修改历史------------------------------------------
* 当前版本    :     修改人:                  修改日期:
* 修改说明    :
******************************************************************************************/
void Transstart(void)
{
 
  DQ=1;
  SCK=0;     
    NOP();
    SCK="1";
    NOP();
    DQ="0";
    NOP();
    SCK="0"; 
    NOP();
    NOP();
    NOP();
    SCK="1";
    NOP();
    DQ="1";   
    NOP();
    SCK="0";  

/******************************************************************************************
* 函数名称    :Hum_write_byte
* 功能描述    :写字节函数
* 参数        :  参数名称: 输入/输出? 类型  描述
*
* 返回值      :
* 作者        :
* 创建日期    :2006-12-19
* 全局变量    :
* 全局静态变量:
* 局部静态变量:
*----------------------------------------修改历史------------------------------------------
* 当前版本    :     修改人:                  修改日期:
* 修改说明    :
******************************************************************************************/
char Hum_write_byte(unsigned char value)
{
   unsigned char i,error=0; 
   for (i=0x80;i>0;i/=2)    //高位为1,循环右移
   { if (i & value) DQ="1";   //和要发送的数相与,结果为发送的位
  else DQ="0";      
  SCK=1;       
  NOP();NOP();NOP();   
  SCK=0;
   }
   DQ="1";       //释放数据线
  
   SCK="1";
   error="DQ";      //检查应答信号,确认通讯正常
   SCK="0";  
   return error;      //error=1 通讯错误
 }



/******************************************************************************************
* 函数名称    :Hum_read_byte
* 功能描述    :读数据
* 参数        :  参数名称: 输入/输出? 类型  描述
*
* 返回值      :
* 作者        :
* 创建日期    :2006-12-19
* 全局变量    :
* 全局静态变量:
* 局部静态变量:
*----------------------------------------修改历史------------------------------------------
* 当前版本    :     修改人:                  修改日期:
* 修改说明    :
******************************************************************************************/
char Hum_read_byte(unsigned char ack)


{
   unsigned char i,val=0;
 
   DQ=1;                           //数据线为高


   for (i=0x80;i>0;i/=2)             //右移位
   {  
  SCK=1;
     if (DQ) val=(val | i);        //读数据线的值
     SCK=0;       
   }
 
   DQ=!ack;                          //如果是校验,读取完后结束通讯;
   SCK=1;                          
   NOP();NOP();NOP();        
   SCK=0;         
   DQ=1;                           //释放数据线
   return val;
}



/******************************************************************************************
* 函数名称    :RESET_SHT10
* 功能描述    :复位湿度传感器
* 参数        :  参数名称: 输入/输出? 类型  描述
*
* 返回值      :
* 作者        :
* 创建日期    :2006-12-19
* 全局变量    :
* 全局静态变量:
* 局部静态变量:
*----------------------------------------修改历史------------------------------------------
* 当前版本    :     修改人:                  修改日期:
* 修改说明    :
******************************************************************************************/
void  RESET_SHT10(void)
{
   unsigned char i;
   DQ = 1;
   SCK = 0;     //准备
   for(i=0;i<9;i++)   //DATA保持高,SCK时钟触发9次,发送启动传输,通迅即复位
   {
    SCK=1;
  SCK=0;
   }
   Transstart();     //启动传输
}
 
/******************************************************************************************
* 函数名称    :Hum_measure
* 功能描述    :进行温度或者湿度转换,由参数mode决定转换内容;
* 参数        :  参数名称: 输入/输出? 类型  描述
*
* 返回值      :
* 作者        :
* 创建日期    :2006-12-19
* 全局变量    :
* 全局静态变量:
* 局部静态变量:
*----------------------------------------修改历史------------------------------------------
* 当前版本    :     修改人:                  修改日期:
* 修改说明    :
******************************************************************************************/
char Hum_measure(unsigned char *p_value, unsigned char *p_checksum, unsigned char mode)
{
   unsigned error="0";
   unsigned char i;
 
   Transstart();     //启动传输
   switch(mode){
  case TEMP: error+=Hum_write_byte(MEASURE_TEMP); break;
  case HUMI : error+=Hum_write_byte(MEASURE_HUMI); break;
  default : break; 
   }
   for (i=0;i<65535;i++)
    {


      if(DQ==0) break;                 //等待测量结束;
     }
   if(DQ) error+=1;    // 如果长时间数据线没有拉低,说明测量错误
   *(p_value)  =Hum_read_byte(ACK); //读第一个字节,高字节 (MSB)
   *(p_value+1)= Hum_read_byte(ACK); //读第二个字节,低字节 (LSB)
   *p_checksum =Hum_read_byte(noACK); //read CRC校验码
   return error;
 }
 
/******************************************************************************************
* 函数名称    :calc_sth10
* 功能描述    :补偿及输出温度和相对湿度
* 参数        :  参数名称: 输入/输出? 类型  描述
*
* 返回值      :
* 作者        :
* 创建日期    :2006-12-19
* 全局变量    :
* 全局静态变量:
* 局部静态变量:
*----------------------------------------修改历史------------------------------------------
* 当前版本    :     修改人:                  修改日期:
* 修改说明    :
******************************************************************************************/
void calc_sth10(float *p_humidity ,float *p_temperature)


{
 const float C1=-4.0;              // for 12 Bit 湿度修正公式
   const float C2=+0.0405;           // for 12 Bit 湿度修正公式
   const float C3=-0.0000028;        // for 12 Bit 湿度修正公式
   const float T1=+0.01;             // for 14 Bit @ 5V 温度修正公式
   const float T2=+0.00008;           // for 14 Bit @ 5V  温度修正公式


   float rh=*p_humidity;            
   float t=*p_temperature;          
   float rh_lin;                    
   float rh_true;                   
   float 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;              //返回湿度结果
}


/******************************************************************************************
* 函数名称    : calc_dewpoint
* 功能描述    :计算绝对湿度值
* 参数        :  参数名称: 输入/输出? 类型  描述
*
* 返回值      :
* 作者        :
* 创建日期    :2006-12-19
* 全局变量    :
* 全局静态变量:
* 局部静态变量:
*----------------------------------------修改历史------------------------------------------
* 当前版本    :     修改人:                  修改日期:
* 修改说明    :
******************************************************************************************/
float calc_dewpoint(float h,float t)


{
 float logEx,dew_point;
   logEx="0".66077+7.5*t/(237.3+t)+(log10(h)-2);
   dew_point = (logEx - 0.66077)*237.3/(0.66077+7.5-logEx);
   return dew_point;
}
 


 


pdf

PARTNER CONTENT

文章评论3条评论)

登录后参与讨论

用户412011 2009-10-20 12:16

我公司自行开发生产可完全替换SHT10系列的温湿度传感器,价格只有SHT10一半,有兴趣的可以联系我。QQ:187228082

tengjingshu_112148725 2009-5-18 14:09

谢谢分享

用户145123 2008-4-10 19:12

DQ和SCK没定义?

用户944075 2008-3-21 20:46

谢谢
相关推荐阅读
用户472938 2011-09-02 11:31
edn啊,太慢了。决定搬家了
这里继续保留,而且同步更新...
用户472938 2011-02-25 09:54
一年多了,冒个泡
更新一下...
用户472938 2010-09-18 19:39
总要找一些事情做一做
总要找一些事情做一做。转移一下注意力继续收拾家,逐渐的处理闲置的电子产品。东西挺多的,时间会很久。以前一直没时间走走,打算从事户外运动了,一是锻炼身体,而是放松心情。。。 ...
用户472938 2010-02-07 15:23
二手ks0108驱动19264液晶资料
型号:LG192642资料下载地址http://www.ganasys.co.kr/kor/support_board/pds_file/LG192642.pdf...
用户472938 2010-02-07 15:22
12232液晶资料
 edm1836液晶edm1837液晶原理图 ...
用户472938 2010-02-07 15:21
fm收音机模块(tea5767模块)资料。
...
EE直播间
更多
我要评论
3
10
关闭 站长推荐上一条 /3 下一条