ماژول دما و رطوبت AHT10

saalek110

Well-Known Member
من مدتی قبل سنسور ATH10 را از فروشگاه ECA خریداری کردم اما با کد نمونه (در گیت هاب) موفق به راه اندازی آن نشدم پس تصمیم گرفتن از صفر و بدون کتابخانه راه اندازی را انجام دهم. این سنسور یک سنسور دما و رطوبت دیجیتال با رابط I2C است. راه اندازی با برد آردینو Due صورت گرفته است. دقت کنید از سایر بردها مثل UNO و MEGA استفاده نشود چرا که رابط I2C این سنسور در سطح 3.3 ولت کار می کند و با ولتاژ بیشتر دچار مشکل خواهد شد. (احتمالا) همچنین دیتاشیت این سنسور یکی از گنگ ترین دیتاشیت های عالم هستی است!!!


و اما کد راه اندازی (برای آردینو Due)



کد:
// IN THE NAME OF ALLAH //
// ATH10 Humidity & Temperature I2C Sensor //
// Code by : Javad Moosavi //
// www.ECA.ir //
 
 
#include <Wire.h>
int result[6];
int Humidity;
int temp;
float B;
float Q;
int i;
 
 
 
 
void setup()
{
  Serial.begin(9600); //Begin Serial Communication for show data
  Serial.println("IN THE NAME OF ALLAH");
  Serial.println("AHT 10 T/H Sensor");
  Serial.println("www.ECA.ir");
  Wire.begin(); //Begin I2C Communication
}
 
 
 
 
void loop()
{
  Wire.beginTransmission(0x38); //Send Slave address to I2C bus
  Wire.write(byte(0xAC)); //Send Measure command
  Wire.write(byte(0x33)); //Command 1
  Wire.write(byte(0x00)); //Command 2
  Wire.endTransmission(); //Send data and wait for response
 
  delay(1000);
 
 
    Wire.requestFrom(0x38, 6); //Request Slave Response (accodrding to datasheet it is 6 bytes)
 
 
    int C = Wire.available(); //Get bytes!
    if(C != 6) { Serial.println("incompelete data!");} //Check if data is compelete or not!
   
    //Put result in an array
    for(i = 0; i <= 5; i++)
      {
         result[i] = Wire.read();
      }
 
 
      int M = result[3] & 0xF;
//Note! we get 6 bytes from sensor
//first 8 bits are status
//other 40 bits are for humidity and temp
//first 20 bits issuing hiumidity
//second 20 bits issuinig temp
//formulas are expressed in datasheet
 
 
   //Humidity
   Humidity = (result[1] << 12) | (result[2] << 4) | (result[3] >> 4);
 
 
 
   Q = float(Humidity) / 1048576;
   Q = Q * 100;
   Serial.print("Humidity : ");
   Serial.print(Q,2);
   Serial.print(" %");
 
 
   //Temperature
   temp = (M << 16) | (result[4] << 8) | (result[5]);
   B = float(temp) / 1048576;
   B = B * 200;
   B = B -50;
   Serial.print(" | Temp : ");
   Serial.print(B, 2);
   Serial.println(" C");
   
   delay(2000);
}




 

جدیدترین ارسال ها

بالا