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

תרמוסטט המבוסס על ארדואינו: 6 שלבים
תרמוסטט המבוסס על ארדואינו: 6 שלבים

וִידֵאוֹ: תרמוסטט המבוסס על ארדואינו: 6 שלבים

וִידֵאוֹ: תרמוסטט המבוסס על ארדואינו: 6 שלבים
וִידֵאוֹ: חיבור לוח מקשים 1/3 keypad למיקרו מעבד- איך זה עובד? כתיבת רוטינת סריקה ללא חומרה 2024, נוֹבֶמבֶּר
Anonim
תרמוסטט מבוסס על Arduino
תרמוסטט מבוסס על Arduino
תרמוסטט מבוסס על Arduino
תרמוסטט מבוסס על Arduino
תרמוסטט מבוסס על Arduino
תרמוסטט מבוסס על Arduino

הפעם אנו הולכים לבנות תרמוסטט המבוסס על Arduino, חיישן טמפרטורה וממסר. תוכלו למצוא ב- github

שלב 1: תצורה

תְצוּרָה
תְצוּרָה

כל התצורה מאוחסנת ב- Config.h. אתה יכול לשנות מספרים של שליטה על ממסרים, טמפרטורת קריאה, ספים או תזמונים.

שלב 2: הגדרת ממסרים

נניח שנרצה שיהיו לנו 3 ממסרים:

  • מזהה: 0, PIN: 1, נקודת ערך טמפרטורה: 20
  • מזהה: 1, PIN: 10, נקודת ערך טמפרטורה: 30
  • מזהה: 2, PIN: 11, נקודת ערך טמפרטורה: 40

ראשית עליך לוודא ש- PIN לבחירתך לא נלקח כבר. ניתן למצוא את כל הסיכות ב- Config.h, הן מוגדרות על ידי משתנים המתחילים ב- DIG_PIN.

עליך לערוך את Config.h ולהגדיר מספר PIN, ספים וכמות ממסרים. ברור שכמה נכסים כבר קיימים, כך שעליך לערוך אותם.

const static uint8_t DIG_PIN_RELAY_0 = 1; const static uint8_t DIG_PIN_RELAY_1 = 10; const סטטי uint8_t DIG_PIN_RELAY_2 = 11;

const static uint8_t RELAYS_AMOUNT = 3;

const סטטי int16_t RELAY_TEMP_SET_POINT_0 = 20;

const static int16_t RELAY_TEMP_SET_POINT_1 = 30; const סטטי int16_t RELAY_TEMP_SET_POINT_2 = 40;

עכשיו עלינו להתקין ממסרים ובקר, זה קורה ב- RelayDriver.cpp

initRelayHysteresisController (0, DIG_PIN_RELAY_0, RELAY_TEMP_SET_POINT_0); initRelayHysteresisController (1, DIG_PIN_RELAY_1, RELAY_TEMP_SET_POINT_1); initRelayHysteresisController (2, DIG_PIN_RELAY_2, RELAY_TEMP_SET_POINT_2);

xxx

שלב 3: בקר היסטריה

זה הנבחר בדוגמה למעלה, יש לו מספר תצורות נוספות:

const static uint32_t RELAY_DELAY_AFTER_SWITCH_MS = 300000; // 5 דקות קונסט סטטי uint32_t RHC_RELAY_MIN_SWITCH_MS = 3600000;

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

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

שלב 4: בקר PID

בקר PID
בקר PID
בקר PID
בקר PID

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

על מנת להשתמש בבקר PID עליך לשנות initRelayHysteresisController (…..) ל- initRelayPiDController (…) ועליך למצוא את ההגדרות הנכונות עבורו. כרגיל תמצא אותם ב- Config.h

יישמתי סימולטור פשוט ב- Java, כך שניתן יהיה לדמיין את התוצאות. ניתן למצוא אותו בתיקייה: pidsimulator. להלן תוכל לראות סימולציות לשני בקרי PID ו- P. PID אינו יציב לחלוטין מכיוון שלא יישמתי אלגוריתם מתוחכם כדי למצוא ערכים נכונים.

בשתי החלקות הטמפרטורה הנדרשת מוגדרת ל- 30 (כחול). הטמפרטורה הנוכחית מציינת את שורת הקריאה. ממסר יש שני מצבים ON ו- OFF. כשהוא מופעל הטמפרטורה יורדת ב -1.5, כשהוא מושבת היא עולה ב -0.5.

שלב 5: אוטובוס הודעות

הודעת אוטובוס
הודעת אוטובוס
הודעת אוטובוס
הודעת אוטובוס
הודעת אוטובוס
הודעת אוטובוס
הודעת אוטובוס
הודעת אוטובוס

מודולי תוכנה שונים צריכים לתקשר זה עם זה, בתקווה שלא לשני הכיוונים;)

לדוגמה:

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

כל מודול מחובר ל- Message Bus ויכול להירשם לאירועים מסוימים, ויכול להפיק אירועים כלשהם (תרשים ראשון).

בתרשים השני אנו יכולים לראות את זרימת האירוע בלחיצת כפתור.

לחלק מהרכיבים יש כמה משימות ממה שצריך לבצע מעת לעת. נוכל לקרוא לשיטות המתאימות שלהם מהלולאה הראשית, מכיוון שיש לנו Message Bus, יש צורך רק בהפצת אירוע נכון (תרשים שלישי)

שלב 6: ליבס

  • https://github.com/maciejmiklas/Thermostat
  • https://github.com/milesburton/Arduino-Temperature…
  • https://github.com/maciejmiklas/ArdLog.git

מוּמלָץ: