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

و اما کد راه اندازی (برای آردینو Due)
موفق باشید
من مدتی قبل سنسور 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);
}
موفق باشید
دیدگاه