Arduino Nano - HTS221相对湿度和温度传感器教程:4个步骤

Arduino Nano - HTS221相对湿度和温度传感器教程:4个步骤

目录:

Anonim

1. Arduino Nano

2. HTS221

链接:http://www.controleverything.com/content/Temperature?sku = HTS221_I2CS

3.I²C电缆

链接:http://www.controleverything.com/content/I2C-Cabl …

4.I²CShield用于Arduino Nano

链接:http://www.controleverything.com/content/I2C-Master?sku = ANI2C

第2步:连接:

为Arduino Nano取一个I2C屏蔽,轻轻地将它推到Nano的引脚上。

然后将I2C电缆的一端连接到HTS221传感器,另一端连接到I2C屏蔽。

连接如上图所示。

第3步:代码:

HTS221的arduino代码可以从我们的github存储库 - ControlEverythingCommunity下载

这是相同的链接:

HTTP://github.com/ControlEverythingCommunity/HTS2 …

HTS221的数据表可以在这里找到:

HTTP://s3.amazonaws.com/controleverything.media/c …

我们包括库Wire.h,以方便传感器与Arduino板的I2c通信。

您也可以从这里复制代码,具体如下:

//使用免费许可证分发。

//以任何您想要的方式使用它,获利或免费,只要它适合其相关作品的许可证。

// HTS221

//此代码旨在与ControlEverything.com提供的HTS221_I2CS I2C Mini模块配合使用。

// http://www.controleverything.com/content/Humidit …

#包括

// HTS221 I2C地址为0x5F

#define Addr 0x5F

void setup()

{

//将I2C通信初始化为MASTER

Wire.begin();

//初始化串行通信,设置波特率= 9600

Serial.begin(9600);

//启动I2C传输

Wire.beginTransmission(ADDR);

//选择平均配置寄存器

Wire.write(0x10的);

//温度平均样本= 256,湿度平均样本= 512

Wire.write(0x1B);

//停止I2C传输

Wire.endTransmission();

//启动I2C传输

Wire.beginTransmission(ADDR);

//选择控制寄存器1

Wire.write(0×20);

//上电,持续更新,数据输出速率= 1 Hz

Wire.write(0x85);

//停止I2C传输

Wire.endTransmission();

延迟(300);

}

void loop()

{

unsigned int data 2;

unsigned int val 4;

unsigned int H0,H1,H2,H3,T0,T1,T2,T3,raw;

//湿度调用值

for(int i = 0; i <2; i ++)

{

//启动I2C传输

Wire.beginTransmission(ADDR);

//发送数据寄存器

Wire.write((48 + i));

//停止I2C传输

Wire.endTransmission();

//请求1个字节的数据

Wire.requestFrom(Addr,1);

//读取1个字节的数据

if(Wire.available()== 1)

{

data i = Wire.read();

}

}

//转换湿度数据

H0 =数据0 / 2;

H1 =数据1 / 2;

for(int i = 0; i <2; i ++)

{

//启动I2C传输

Wire.beginTransmission(ADDR);

//发送数据寄存器

Wire.write((54 + i));

//停止I2C传输

Wire.endTransmission();

//请求1个字节的数据

Wire.requestFrom(ADDR,1);

//读取1个字节的数据

if(Wire.available()== 1)

{

data i = Wire.read();

}

}

//转换湿度数据

H2 =(data 1 * 256.0)+ data 0;

for(int i = 0; i <2; i ++)

{

//启动I2C传输

Wire.beginTransmission(ADDR);

//发送数据寄存器

Wire.write((58 + i));

//停止I2C传输

Wire.endTransmission();

//请求1个字节的数据

Wire.requestFrom(ADDR,1);

//读取1个字节的数据

if(Wire.available()== 1)

{

data i = Wire.read();

}

}

//转换湿度数据

H3 =(data 1 * 256.0)+ data 0;

//温度calliberation值

//启动I2C传输

Wire.beginTransmission(ADDR);

//发送数据寄存器

Wire.write(0x32);

//停止I2C传输

Wire.endTransmission();

//请求1个字节的数据

Wire.requestFrom(ADDR,1);

//读取1个字节的数据

if(Wire.available()== 1)

{

T0 = Wire.read();

}

//启动I2C传输

Wire.beginTransmission(ADDR);

//发送数据寄存器

Wire.write(0x33);

//停止I2C传输

Wire.endTransmission();

//请求1个字节的数据

Wire.requestFrom(ADDR,1);

//读取1个字节的数据

if(Wire.available()== 1)

{

T1 = Wire.read();

}

//启动I2C传输

Wire.beginTransmission(ADDR);

//发送数据寄存器

Wire.write(0x35);

//停止I2C传输

Wire.endTransmission();

//请求1个字节的数据

Wire.requestFrom(Addr,1);

//读取1个字节的数据

if(Wire.available()== 1)

{

raw = Wire.read();

}

raw = raw&0x0F;

//将温度calliberation值转换为10位

T0 =((raw&0x03)* 256)+ T0;

T1 =((原始&0x0C)* 64)+ T1;

for(int i = 0; i <2; i ++)

{

//启动I2C传输

Wire.beginTransmission(ADDR);

//发送数据寄存器

Wire.write((60 + i));

//停止I2C传输

Wire.endTransmission();

//请求1个字节的数据

Wire.requestFrom(ADDR,1);

//读取1个字节的数据

if(Wire.available()== 1)

{

data i = Wire.read();

}

}

//转换数据

T2 =(data 1 * 256.0)+ data 0;

for(int i = 0; i <2; i ++)

{

//启动I2C传输

Wire.beginTransmission(ADDR);

//发送数据寄存器

Wire.write((62 + i));

//停止I2C传输

Wire.endTransmission();

//请求1个字节的数据

Wire.requestFrom(ADDR,1);

//读取1个字节的数据

if(Wire.available()== 1)

{

data i = Wire.read();

}

}

//转换数据

T3 =(data 1 * 256.0)+ data 0;

//启动I2C传输

Wire.beginTransmission(ADDR);

//发送数据寄存器

Wire.write(0x28 | 0x80);

//停止I2C传输

Wire.endTransmission();

//请求4个字节的数据

Wire.requestFrom(ADDR,4);

//读取4个字节的数据

//湿度msb,湿度lsb,temp msb,temp lsb

if(Wire.available()== 4)

{

val 0 = Wire.read();

val 1 = Wire.read();

val 2 = Wire.read();

val 3 = Wire.read();

}

//转换数据

float humidity =(val 1 * 256.0)+ val 0;

湿度=((1.0 * H1) - (1.0 * H0))*(1.0 *湿度-1.0 * H2)/(1.0 * H3-1.0 * H2)+(1.0 * H0);

int temp =(val 3 * 256)+ val 2;

float cTemp =(((T1-T0)/ 8.0)*(temp-T2))/(T3-T2)+(T0 / 8.0);

float fTemp =(cTemp * 1.8)+ 32;

//将数据输出到串行监视器

Serial.print(“相对湿度:”);

Serial.print(湿度);

Serial.println(“%RH”);

Serial.print(“以摄氏度为单位的温度:”);

Serial.print(CTEMP); Serial.println(“C”);

Serial.print(“华氏温度:”);

Serial.print(fTemp);

Serial.println(“F”);

延迟(500);

}

第4步:申请:

HTS221可用于各种消费产品,如空气加湿器和冰箱等。该传感器还可用于更广泛的领域,包括智能家居自动化,工业自动化,呼吸设备,资产和货物跟踪。