14、W601之AHT10温湿度传感器

14、W601之AHT10温湿度传感器

文章目录

  • 14、W601之AHT10温湿度传感器
    • 一、AHT10简介
    • 二、电路图连接
    • 三、AHT10通信
    • 四、温湿度数据采集
    • 五、代码实现

一、AHT10简介

AHT10 是一款高精度,完全校准,贴片封装的温湿度传感器, MEMS 的制作工艺,确保产品具有极高的可靠性与卓越的长期稳定性。传感器包括一个电容式感湿元件和一个高性能CMOS 微处理器相连接。该产品具有品质卓越、超快响应、抗干扰能力强、性价比极高等优点。AHT10 通信方式采用标准 IIC 通信方式,超小的体积、极低的功耗,使其成为各类应用甚至最为苛刻的应用场合的最佳选择。 AHT10 支持较宽的工作电源电压范围,该器件可为各类常见应用场景提供低成本和低功耗优势,温湿度传感器均在高精度的恒温恒湿腔室中进行出厂校准,直接输出经温度补偿后的湿度、温度等信息,用户无需要对湿度进行温度补偿,便可得到准确的温湿度信息

AHT10主要特点:

  • 工作电压范围:1.8V-3.3V
  • 工作电流 :休眠时 1uA,测量时 0.8mA
  • 具有 I2C 接口与报警等功能
  • 测量范围:湿度 0100%RH,温度-4085℃
  • 精度 :湿度±3%RH(典型值),温度 0.5℃(典型值)
  • 分辨率 :湿度 0.1%RH,温度 0.015℃

PS:I2C协议会在协议专题中

二、电路图连接

14、W601之AHT10温湿度传感器_第1张图片

开发板上使用的是PA0和 PA1来模拟IIC总线与AHT10进行通讯的,因为I2C接口被其他硬件占用了。

三、AHT10通信

默认的 7-bit I2C 设备地址为 011100x。其中最低位 LSB 是可以通过 ADR 引脚(表 7 所示)的电平来随时改变的。将 ADR 接地电平将使 I2C 设备地址为 0111000 (0x38);将 ADR 接 VDD 电平,将使 I2C 设备地址为 1111001(0x79)。

因为W601将ADR接地,所以AHT10的设备地址为0x38

AHT10的读写模式:

在开始位之后,主机将 7 位从机地址发送到 HS300 X;接着是读/写位,这将决定任何后续数据的传送方向,该位设置时为 1 以指示从从属到主的读,设置为 0 时指示从主机到从机的写入。

即:

(0x38 << 1) || 0; //这是写命令
(0x38 << 1) || 1; //这是读命令

四、温湿度数据采集

当传感器启动通信后,先发送命令 0xE1,使输出数据进入校准状态。在 0xE1 发送后需要等待不少于300ms 读取温湿度数据(注意:此命令刚上电只需发送一次),而用于获取数据的指令是 0xAC。采集温湿度命令如下表:

在这里插入图片描述

五、代码实现

/**
 * @brief	ATH10初始化
 *
 * @param   void
 *
 * @return  u8		0,初始化成功
 */
u8 AHT10_Init(void)
{
    u8 res;
    u8 temp[2] = {0, 0};

    IIC_Init();		//初始化IIC

    if(AHT10_Read_Status())	return 1;

    res = AHT10_Write_Data(AHT10_NORMAL_CMD, temp, 2);

    if(res != 0)	return 1;

    delay_ms(300);

    temp[0] = 0x08;
    temp[1] = 0x00;
    res = AHT10_Write_Data(AHT10_CALIBRATION_CMD, temp, 2);

    if(res != 0)	return 2;

    delay_ms(300);

    return 0;
}

int main(void)
{
    u8 t = 0;
    float temperature, humidity;

    delay_init(80);	
    uart_init(115200);
	SPI_Init();
    LCD_Init();
	AHT10_Init();
	POINT_COLOR = BLUE; 
    LCD_ShowString(30, 190, 200, 16, 16, "Temp:   . C");
    LCD_ShowString(30, 210, 200, 16, 16, "Humi:   . %RH");
    while(1)
    {
        if(t % 10 == 0) 
        {
            temperature = AHT10_Read_Temperature();
            humidity = AHT10_Read_Humidity();
            if(temperature < 0)
            {
                LCD_ShowChar(30 + 40, 190, '-', 16);	
                temperature = -temperature;			
            }
            else
                LCD_ShowChar(30 + 40, 190, ' ', 16);	

            LCD_ShowNum(30 + 48, 190, temperature, 2, 16);				
            LCD_ShowNum(30 + 72, 190, (u32)(temperature * 10) % 10, 1, 16);	

            LCD_ShowNum(30 + 48, 210, humidity, 2, 16);						
            LCD_ShowNum(30 + 72, 210, (u32)(humidity * 10) % 10, 1, 16);
        }
        delay_ms(10);
        t++;
    }
}

现象:14、W601之AHT10温湿度传感器_第2张图片

你可能感兴趣的:(#,W601,传感器,单片机,mcu,嵌入式硬件,arm)