AHT10温湿度传感器读取例程(51单片机)

Hazel ·
更新时间:2024-09-20
· 965 次阅读

AHT10温湿度传感器读取例程(51单片机)

所需材料:

名称 个数
AHT10温湿度传感器 1
51单片机 1
连接线缆 若干

概述:
AHT10温湿度传感器是以I2C为接口传送数据的器件,所以我们编写程序时是以I2C协议为主,这里我们使用软件模拟的方法来实现I2C通信。

器件简介:
AHT10 配有一个全新设计的 ASIC专用芯片、一个经过改进的MEMS半导体电容式湿度传感元件和一个标准的片上温度传感元件,其性能已经大大提升甚至超出了前一代传感器的可靠性水平,新一代温湿度传感器,经过改进使其在恶劣环境下的性能更稳定。

代码:

#define AHT10AddWr 0x70 //AHT10写数据地址 #define AHT10AddRd 0x71 //AHT10读数据地址 void AHT10Init() //AHT10初始化 { Start_I2c(); SendByte(AHT10AddWr); SendByte(0xe1); //初始化指令 SendByte(0x08); SendByte(0x00); Stop_I2c(); } void AHT10_Init() //初始化 { DelayMs(45); AHT10Init(); if(AHT10_CalEN()==0) { while(AHT10_CalEN()==0) { AHT10_RST(); DelayMs(25); AHT10Init(); if(AHT10_CalEN()==1) { break; } } } } void AHT10_RST() //软复位 { Start_I2c(); SendByte(AHT10AddWr); SendByte(0xba); Stop_I2c(); } void AHT10_Mea() //触发测量 { Start_I2c(); SendByte(AHT10AddWr); SendByte(0xac); //触发测量指令 SendByte(0x33); SendByte(0x00); Stop_I2c(); } unsigned char AHT10_Status() //读取AHT10状态寄存器 { unsigned char byte_first; Start_I2c(); SendByte(AHT10AddRd); byte_first = RcvByte(); //接收数据 NoAck_I2c(); //非应答 Stop_I2c(); return byte_first; } unsigned char AHT10_CalEN() //判断AHT10校准使能 { unsigned char val; val = AHT10_Status(); if((val & 0x68)==0x08) return 1; else return 0; } void AHT11_Read_Data(unsigned long *ct) //接收湿度温度数据 { volatile unsigned char byte_1th=0; volatile unsigned char byte_2th=0; volatile unsigned char byte_3th=0; volatile unsigned char byte_4th=0; volatile unsigned char byte_5th=0; volatile unsigned char byte_6th=0; unsigned long retudata=0; unsigned char cnt=0; AHT10_Mea(); //触发测量 DelayMs(80); //延时80毫秒 cnt=0; while(((AHT10_Status() & 0x80)==0x80)) { DelayMs(3); if(cnt++>=100) { break; } } Start_I2c(); SendByte(AHT10AddRd); byte_1th = RcvByte(); //状态数据 Ack_I2c(); //应答 byte_2th = RcvByte(); //湿度数据 Ack_I2c(); byte_3th = RcvByte(); //湿度数据 Ack_I2c(); byte_4th = RcvByte(); //高4位为湿度 低4位为温度 Ack_I2c(); byte_5th = RcvByte(); //温度数据 Ack_I2c(); byte_6th = RcvByte(); //温度数据 NoAck_I2c(); Stop_I2c(); retudata = 0; //原始湿度数据合成 retudata = (byte_2th<<8)|byte_3th; retudata = ((retudata<>4; retudata = retudata & 0x000fffff; ct[0] = retudata; retudata = 0; //原始温度数据合成 retudata = ((byte_4th % 16)<<8)|byte_5th; retudata = (retudata<<8)|byte_6th; retudata = retudata & 0x000fffff; ct[1] = retudata; }

注:
1.在编程时先调用初始化函数,在调用读取数据函数。

2.在读取到原始数据后,我们还需要对原始数据进行计算,算出所对应的 温度值和湿度值

计算温湿度公式:

h1 = (dt[0]*1000/1024/1024); //计算湿度 t1 = (dt[1]*200*10/1024/1024-500); //计算温度

参考文献:
1.AHT10数据手册

ps:笔者水平有限,如有纰漏或不足之处欢迎指正


作者:Freedom1314520



温湿度传感器 温湿度 51单片机 传感器 单片机

需要 登录 后方可回复, 如果你还没有账号请 注册新账号
相关文章