תוכן עניינים:

מדידת לחות וטמפרטורה באמצעות HTS221 ו- Arduino Nano: 4 שלבים
מדידת לחות וטמפרטורה באמצעות HTS221 ו- Arduino Nano: 4 שלבים

וִידֵאוֹ: מדידת לחות וטמפרטורה באמצעות HTS221 ו- Arduino Nano: 4 שלבים

וִידֵאוֹ: מדידת לחות וטמפרטורה באמצעות HTS221 ו- Arduino Nano: 4 שלבים
וִידֵאוֹ: איך מודדים לחות עם מד טמפרטורה 2024, נוֹבֶמבֶּר
Anonim
Image
Image

HTS221 הוא חיישן דיגיטלי קיבולי אולטרה קומפקטי ללחות וטמפרטורה יחסית. הוא כולל רכיב חישה ומעגל משולב ספציפי ליישום אות מעורב (ASIC) המספק את מידע המדידה באמצעות ממשקים סדרתיים דיגיטליים. משולב עם כל כך הרבה תכונות זהו אחד החיישנים המתאימים ביותר למדידות לחות וטמפרטורה קריטיות.

במדריך זה הודגם הממשק של מודול החיישנים HTS221 עם ננו ארדואינו. כדי לקרוא את ערכי הלחות והטמפרטורה, השתמשנו בארדואינו עם מתאם I2c. מתאם I2C זה הופך את החיבור למודול החיישן לפשוט ואמין יותר.

שלב 1: חומרה נדרשת:

חומרה נדרשת
חומרה נדרשת
חומרה נדרשת
חומרה נדרשת
חומרה נדרשת
חומרה נדרשת

החומרים הדרושים לנו להגשמת מטרתנו כוללים את רכיבי החומרה הבאים:

1. HTS221

2. ארדואינו ננו

3. כבל I2C

4. מגן I2C עבור Arduino Nano

שלב 2: חיבור חומרה:

חיבור חומרה
חיבור חומרה
חיבור חומרה
חיבור חומרה

קטע חיבור החומרה בעצם מסביר את חיבורי החיווט הנדרשים בין החיישן לננו הארדואינו. הבטחת חיבורים נכונים היא ההכרח הבסיסי בעת עבודה על כל מערכת לתפוקה הרצויה. אז, החיבורים הנדרשים הם כדלקמן:

HTS221 יעבוד על I2C. להלן תרשים החיווט לדוגמה, המדגים כיצד לחבר כל ממשק של החיישן.

הלוח מחוץ לקופסה מוגדר לממשק I2C, ולכן אנו ממליצים להשתמש בחיבור זה אם אתה אגנוסטי אחרת.

כל מה שאתה צריך זה ארבעה חוטים! רק ארבעה חיבורים נדרשים סיכות Vcc, Gnd, SCL ו- SDA ואלו מחוברים בעזרת כבל I2C.

קשרים אלה מודגמים בתמונות למעלה.

שלב 3: קוד לחות ומדידת טמפרטורה:

קוד לחות ומדידת טמפרטורה
קוד לחות ומדידת טמפרטורה

נתחיל עם הקוד של Arduino עכשיו.

בעת השימוש במודול החיישנים עם Arduino, אנו כוללים את ספריית Wire.h. ספריית "Wire" מכילה את הפונקציות המאפשרות תקשורת i2c בין החיישן ללוח ה- Arduino.

קוד Arduino כולו ניתן להלן לנוחות המשתמש:

#לִכלוֹל

// כתובת I2C HTS221 היא 0x5F

#define Addr 0x5F

הגדרת חלל ()

{

// אתחל תקשורת 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 (0x20);

// הפעלה, עדכון רציף, קצב פלט נתונים = 1 הרץ

Wire.write (0x85);

// עצור את שידור I2C

Wire.endTransmission ();

עיכוב (300);

}

לולאת חלל ()

{

נתוני int ללא חתום [2];

int val ללא חתום [4];

int חתום H0, H1, H2, H3, T0, T1, T2, T3, raw;

// ערכי קליברציה של לחות

עבור (int i = 0; i <2; i ++)

{

// התחל את שידור I2C

Wire.beginTransmission (Addr);

// שלח רישום נתונים

Wire.write ((48 + i));

// עצור את שידור I2C

Wire.endTransmission ();

// בקש בתים של נתונים

Wire.requestFrom (Addr, 1);

// קרא 1 בייט של נתונים

אם (Wire.available () == 1)

{

data = Wire.read ();

}

}

// המרת נתוני לחות

H0 = נתונים [0] / 2;

H1 = נתונים [1] / 2;

עבור (int i = 0; i <2; i ++)

{

// התחל את שידור I2C

Wire.beginTransmission (Addr);

// שלח רישום נתונים

Wire.write ((54 + i));

// עצור את שידור I2C

Wire.endTransmission ();

// בקש בתים של נתונים

Wire.requestFrom (Addr, 1);

// קרא 1 בייט של נתונים

אם (Wire.available () == 1)

{

data = Wire.read ();

}

}

// המרת נתוני לחות

H2 = (נתונים [1] * 256.0) + נתונים [0];

עבור (int i = 0; i <2; i ++)

{

// התחל את שידור I2C

Wire.beginTransmission (Addr);

// שלח רישום נתונים

Wire.write ((58 + i));

// עצור את שידור I2C

Wire.endTransmission ();

// בקש בתים של נתונים

Wire.requestFrom (Addr, 1);

// קרא 1 בייט של נתונים

אם (Wire.available () == 1)

{

data = Wire.read ();

}

}

// המרת נתוני לחות

H3 = (נתונים [1] * 256.0) + נתונים [0];

// ערכי שיחות טמפרטורה

// התחל את שידור I2C

Wire.beginTransmission (Addr);

// שלח רישום נתונים

Wire.write (0x32);

// עצור את שידור I2C

Wire.endTransmission ();

// בקש בתים של נתונים

Wire.requestFrom (Addr, 1);

// קרא 1 בייט של נתונים

אם (Wire.available () == 1)

{

T0 = Wire.read ();

}

// התחל את שידור I2C

Wire.beginTransmission (Addr);

// שלח רישום נתונים

Wire.write (0x33);

// עצור את שידור I2C

Wire.endTransmission ();

// בקש בתים של נתונים

Wire.requestFrom (Addr, 1);

// קרא 1 בייט של נתונים

אם (Wire.available () == 1)

{

T1 = Wire.read ();

}

// התחל את שידור I2C

Wire.beginTransmission (Addr);

// שלח רישום נתונים

Wire.write (0x35);

// עצור את שידור I2C

Wire.endTransmission ();

// בקש בתים של נתונים

Wire.requestFrom (Addr, 1);

// קרא 1 בייט של נתונים

אם (Wire.available () == 1)

{

raw = Wire.read ();

}

raw = raw & 0x0F;

// המר את ערכי ההתקשרות לטמפרטורה ל -10 סיביות

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

T1 = ((raw & 0x0C) * 64) + T1;

עבור (int i = 0; i <2; i ++)

{

// התחל את שידור I2C

Wire.beginTransmission (Addr);

// שלח רישום נתונים

Wire.write ((60 + i));

// עצור את שידור I2C

Wire.endTransmission ();

// בקש בתים של נתונים

Wire.requestFrom (Addr, 1);

// קרא 1 בייט של נתונים

אם (Wire.available () == 1)

{

data = Wire.read ();

}

}

// המר את הנתונים

T2 = (נתונים [1] * 256.0) + נתונים [0];

עבור (int i = 0; i <2; i ++)

{

// התחל את שידור I2C

Wire.beginTransmission (Addr);

// שלח רישום נתונים

Wire.write ((62 + i));

// עצור את שידור I2C

Wire.endTransmission ();

// בקש בתים של נתונים

Wire.requestFrom (Addr, 1);

// קרא 1 בייט של נתונים

אם (Wire.available () == 1)

{

data = Wire.read ();

}

}

// המר את הנתונים

T3 = (נתונים [1] * 256.0) + נתונים [0];

// התחל את שידור I2C

Wire.beginTransmission (Addr);

// שלח רישום נתונים

Wire.write (0x28 | 0x80);

// עצור את שידור I2C

Wire.endTransmission ();

// בקש 4 בתים של נתונים

Wire.requestFrom (אדר, 4);

// קרא 4 בתים של נתונים

// לחות msb, לחות lsb, temp msb, temp lsb

אם (Wire.available () == 4)

{

val [0] = Wire.read ();

val [1] = Wire.read ();

val [2] = Wire.read ();

val [3] = Wire.read ();

}

// המר את הנתונים

לחות צפה = (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];

צף cTemp = (((T1 - T0) / 8.0) * (טמפ ' - T2)) / (T3 - T2) + (T0 / 8.0);

צף 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);

}

בספריית תיל Wire.write () ו- Wire.read () משמשים לכתיבת הפקודות וקריאת פלט החיישן.

Serial.print () ו- Serial.println () משמשים להצגת פלט החיישן על הצג הטורי של ה- Arduino IDE.

פלט החיישן מוצג בתמונה למעלה.

שלב 4: יישומים:

יישומים
יישומים

ניתן להשתמש ב- HTS221 במוצרי צריכה שונים כמו מכשירי אדים ומקררים וכו '. חיישן זה מוצא את יישומו גם בזירה רחבה יותר, לרבות אוטומציה ביתית חכמה, אוטומציה תעשייתית, ציוד נשימתי, מעקב אחר נכסים וסחורות.

מוּמלָץ: