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

חישוב לחות, לחץ וטמפרטורה באמצעות ממשק BME280 ופוטון: 6 שלבים
חישוב לחות, לחץ וטמפרטורה באמצעות ממשק BME280 ופוטון: 6 שלבים

וִידֵאוֹ: חישוב לחות, לחץ וטמפרטורה באמצעות ממשק BME280 ופוטון: 6 שלבים

וִידֵאוֹ: חישוב לחות, לחץ וטמפרטורה באמצעות ממשק BME280 ופוטון: 6 שלבים
וִידֵאוֹ: תרמודינמיקה - חום, טמפרטורה ולחץ 2024, יולי
Anonim
חישוב לחות, לחץ וטמפרטורה באמצעות BME280 וממשק פוטון
חישוב לחות, לחץ וטמפרטורה באמצעות BME280 וממשק פוטון

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

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

שלב 1: חקר BME280

BME280 חקירה
BME280 חקירה

המגזר האלקטרוני הגביר את המשחק שלהם עם חיישן BME280, חיישן סביבתי עם טמפרטורה, לחץ ברומטרי ולחות! חיישן זה נהדר לכל מיני מזג אוויר/חישה סביבתית ואף יכול לשמש ב- I2C.

חיישן דיוק זה BME280 הוא פתרון החישה הטוב ביותר למדידת לחות עם ± 3% דיוק, לחץ ברומטרי עם דיוק מוחלט ± 1 hPa וטמפרטורה עם דיוק של ± 1.0 ° C. מכיוון שהלחץ משתנה עם הגובה, ומדידות הלחץ כל כך טובות, אתה יכול להשתמש בו גם כמד גובה עם ± 1 מטר או דיוק טוב יותר! חיישן הטמפרטורה מותאם לרעש הנמוך ביותר ולרזולוציה הגבוהה ביותר והוא משמש לפיצוי טמפרטורה של חיישן הלחץ ויכול לשמש גם להערכת טמפרטורת הסביבה. ניתן לבצע מדידות עם BME280 על ידי המשתמש או לבצע במרווחי זמן קבועים.

גליון נתונים: לחץ כדי לצפות בתצוגה מקדימה או להוריד את גליון הנתונים של חיישן BME280.

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

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

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

  • מודול מיני חיישן BME280 I²C
  • מגן I²C לפוטון חלקיקים
  • חלקיק פוטון
  • כבל I²C
  • מתאם מתח

שלב 3: ממשק

ממשק
ממשק

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

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

שלב 4: קוד ניטור טמפרטורה, לחץ ולחות

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

הגרסה הנקייה של הקוד בו נשתמש כדי להריץ אותו זמינה כאן.

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

לחץ כאן כדי לפתוח את דף האינטרנט לניטור מכשירים

העלה את הקוד ללוח שלך והוא אמור להתחיל לעבוד! ניתן להשיג את כל הנתונים בדף האינטרנט כפי שמוצג בתמונה.

הקוד ניתן להלן:

// מופץ ברישיון רצון חופשי. // השתמש בו בכל דרך שתרצה, להרוויח או בחינם, בתנאי שהוא מתאים לרישיונות של העבודות המשויכות אליו. // BME280 // קוד זה נועד לעבודה עם מודול מיני BME280_I2CS I2C הזמין ב- ControlEverything.com. #include #include // כתובת BME280 I2C היא 0x76 (108) #define Addr 0x76 כפול cTemp = 0, fTemp = 0, לחץ = 0, לחות = 0; הגדרת void () {// הגדר משתנה Particle.variable ("i2cdevice", "BME280"); article.variable ("cTemp", cTemp); Particle.variable ("fTemp", fTemp); Particle.variable ("לחץ", לחץ); Particle.variable ("לחות", לחות); // אתחל תקשורת I2C כ- MASTER Wire.begin (); // התחל תקשורת סדרתית, הגדר קצב שידור = 9600 Serial.begin (9600); עיכוב (300); } לולאת חלל () {int signed b1 [24]; נתוני int ללא חתום [8]; int dig_H1 = 0; for (int i = 0; i <24; i ++) {// התחל I2C Transmission Wire.beginTransmission (Addr); // בחר את רישום הנתונים Wire.write ((136+i)); // עצור את I2C Transmission Wire.endTransmission (); // בקש בייט אחד של נתונים Wire.requestFrom (Addr, 1); // קרא 24 בתים של נתונים אם (Wire.available () == 1) {b1 = Wire.read (); }}} / / המרת הנתונים // מקדמי טמפרטורה int dig_T1 = (b1 [0] & 0xff) + ((b1 [1] & 0xff) * 256); int dig_T2 = b1 [2] + (b1 [3] * 256); int dig_T3 = b1 [4] + (b1 [5] * 256); // מקדמי לחץ int dig_P1 = (b1 [6] & 0xff) + ((b1 [7] & 0xff) * 256); int dig_P2 = b1 [8] + (b1 [9] * 256); int dig_P3 = b1 [10] + (b1 [11] * 256); int dig_P4 = b1 [12] + (b1 [13] * 256); int dig_P5 = b1 [14] + (b1 [15] * 256); int dig_P6 = b1 [16] + (b1 [17] * 256); int dig_P7 = b1 [18] + (b1 [19] * 256); int dig_P8 = b1 [20] + (b1 [21] * 256); int dig_P9 = b1 [22] + (b1 [23] * 256); for (int i = 0; i <7; i ++) {// התחל I2C Transmission Wire.beginTransmission (Addr); // בחר את רישום הנתונים Wire.write ((225+i)); // עצור את I2C Transmission Wire.endTransmission (); // בקש בייט אחד של נתונים Wire.requestFrom (Addr, 1); // קרא 7 בתים של נתונים אם (Wire.available () == 1) {b1 = Wire.read (); }}} // המר את הנתונים // מקדמי לחות int dig_H2 = b1 [0] + (b1 [1] * 256); int dig_H3 = b1 [2] & 0xFF; int dig_H4 = (b1 [3] * 16) + (b1 [4] & 0xF); int dig_H5 = (b1 [4] / 16) + (b1 [5] * 16); int dig_H6 = b1 [6]; // התחל I2C Transmission Wire.beginTransmission (Addr); // בחר רישום נתונים Wire.write (161); // עצור את I2C Transmission Wire.endTransmission (); // בקש בייט אחד של נתונים Wire.requestFrom (Addr, 1); // קרא 1 בייט של נתונים אם (Wire.available () == 1) {dig_H1 = Wire.read (); } // התחל את I2C Transmission Wire.beginTransmission (Addr); // בחר בקרת רטיבות לחות Wire.write (0xF2); // לחות מעל קצב הדגימה = Wire.write 1 (0x01); // עצור את I2C Transmission Wire.endTransmission (); // התחל I2C Transmission Wire.beginTransmission (Addr); // בחר רישום מדידת בקרה Wire.write (0xF4); // מצב רגיל, טמפ 'ולחץ על קצב הדגימה = Wire.write 1 (0x27); // עצור את I2C Transmission Wire.endTransmission (); // התחל I2C Transmission Wire.beginTransmission (Addr); // בחר את קובץ ההגדרות Wire.write (0xF5); // זמן המתנה = 1000ms Wire.write (0xA0); // עצור את I2C Transmission Wire.endTransmission (); for (int i = 0; i <8; i ++) {// התחל I2C Transmission Wire.beginTransmission (Addr); // בחר את רישום הנתונים Wire.write ((247+i)); // עצור את I2C Transmission Wire.endTransmission (); // בקש בייט אחד של נתונים Wire.requestFrom (Addr, 1); // קרא 8 בתים של נתונים אם (Wire.available () == 1) {data = Wire.read (); }}} / / המרת נתוני לחץ וטמפרטורה לאורך 19 סיביות adc_p = (((long) (data [0] & 0xFF) * 65536) + ((long) (data [1] & 0xFF) * 256) + (ארוך) (נתונים [2] & 0xF0)) / 16; long adc_t = (((long) (data [3] & 0xFF) * 65536) + ((long) (data [4] & 0xFF) * 256) + (long) (data [5] & 0xF0)) / 16; // המרת נתוני הלחות long adc_h = ((long) (data [6] & 0xFF) * 256 + (long) (data [7] & 0xFF)); // חישובי קיזוז טמפרטורה כפול var1 = (((כפול) adc_t) / 16384.0 - ((כפול) dig_T1) / 1024.0) * ((כפול) dig_T2); כפול var2 = ((((כפול) adc_t) / 131072.0 - ((כפול) dig_T1) / 8192.0) * (((כפול) adc_t) /131072.0 - ((כפול) dig_T1) /8192.0)) * ((כפול) dig_T3); t_fine כפול = (ארוך) (var1 + var2); cTemp כפול = (var1 + var2) / 5120.0; כפול fTemp = cTemp * 1.8 + 32; // חישובי קיזוז לחץ var1 = ((כפול) t_fine / 2.0) - 64000.0; var2 = var1 * var1 * ((כפול) dig_P6) / 32768.0; var2 = var2 + var1 * ((כפול) dig_P5) * 2.0; var2 = (var2 / 4.0) + (((כפול) dig_P4) * 65536.0); var1 = (((כפול) dig_P3) * var1 * var1 / 524288.0 + ((כפול) dig_P2) * var1) / 524288.0; var1 = (1.0 + var1 / 32768.0) * ((כפול) dig_P1); כפול p = 1048576.0 - (כפול) adc_p; p = (p - (var2 / 4096.0)) * 6250.0 / var1; var1 = ((כפול) dig_P9) * p * p / 2147483648.0; var2 = p * ((כפול) dig_P8) / 32768.0; לחץ כפול = (p + (var1 + var2 + ((כפול) dig_P7)) / 16.0) / 100; // חישובי קיזוז לחות כפול var_H = (((כפול) t_fine) - 76800.0); var_H = (adc_h - (dig_H4 * 64.0 + dig_H5 / 16384.0 * var_H)) * (dig_H2 / 65536.0 * (1.0 + dig_H6 / 67108864.0 * var_H * (1.0 + dig_H3 / 67108864.0 * var_H))); לחות כפולה = var_H * (1.0 - dig_H1 * var_H / 524288.0); אם (לחות> 100.0) {לחות = 100.0; } אחרת אם (לחות <0.0) {לחות = 0.0; } // נתוני פלט ללוח המחוונים Particle.publish ("טמפרטורה בצלסיוס:", מחרוזת (cTemp)); Particle.publish ("טמפרטורה בפרנהייט:", מחרוזת (fTemp)); פרסומת Particle.publish ("לחץ:", מחרוזת (לחץ)); הוצאה לאור Particle.publish ("לחות יחסית:", מחרוזת (לחות)); עיכוב (1000); }

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

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

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

יישומים אחרים עשויים להכיל:

  1. מודעות להקשר, למשל. זיהוי עור, זיהוי שינוי החדר.
  2. ניטור / רווחת כושר - אזהרה לגבי יובש או טמפרטורות גבוהות.
  3. מדידת נפח וזרימת אוויר.
  4. בקרת אוטומציה ביתית.
  5. שליטה על חימום, אוורור, מיזוג אוויר (HVAC).
  6. האינטרנט של הדברים.
  7. שיפור GPS (למשל שיפור הזמן עד לתקן הראשון, חישוב מתים, זיהוי שיפוע).
  8. ניווט פנימי (שינוי זיהוי הרצפה, זיהוי מעלית).
  9. יישומי ניווט בחוץ, פנאי וספורט.
  10. תחזית מזג האוויר.
  11. אינדיקציה למהירות אנכית (מהירות עלייה/שקיעה).

שלב 6: הדרכת וידאו

צפה במדריך הווידאו שלנו כדי לעבור את כל השלבים בממשק והשלמת הפרויקט.

המשך לעקוב אחר ממשקי הממשק והעבודה של חיישן אחרים.

מוּמלָץ: