فهرست مطالب:

ترموستات بر اساس آردوینو: 6 مرحله
ترموستات بر اساس آردوینو: 6 مرحله

تصویری: ترموستات بر اساس آردوینو: 6 مرحله

تصویری: ترموستات بر اساس آردوینو: 6 مرحله
تصویری: Lesson 68, Home Automation: How to control 16 Channel Relay module using Arduino control 16 AC loads 2024, جولای
Anonim
ترموستات بر اساس آردوینو
ترموستات بر اساس آردوینو
ترموستات بر اساس آردوینو
ترموستات بر اساس آردوینو
ترموستات بر اساس آردوینو
ترموستات بر اساس آردوینو

این بار ما قصد داریم یک ترموستات بر اساس آردوینو ، سنسور دما و رله بسازیم. می توانید در github پیدا کنید

مرحله 1: پیکربندی

پیکربندی
پیکربندی

کل پیکربندی در Config.h ذخیره می شود. می توانید پین های کنترل کننده رله ، دمای خواندن ، آستانه ها یا زمان بندی ها را تغییر دهید.

مرحله 2: پیکربندی رله ها

فرض کنید ما می خواهیم 3 رله داشته باشیم:

  • شناسه: 0 ، پین: 1 ، نقطه تنظیم دما: 20
  • شناسه: 1 ، پین: 10 ، نقطه تنظیم دما: 30
  • شناسه: 2 ، پین: 11 ، نقطه تنظیم دما: 40

ابتدا باید مطمئن شوید که پین انتخابی شما قبلاً گرفته نشده است. همه پین ها را می توانید در Config.h پیدا کنید ، آنها با متغیرهایی که با DIG_PIN شروع می شوند ، تعریف می شوند.

شما باید Config.h را ویرایش کرده و PIN ها ، آستانه ها و میزان رله ها را پیکربندی کنید. بدیهی است برخی از ویژگی ها در حال حاضر وجود دارد ، بنابراین شما فقط باید آنها را ویرایش کنید.

const ثابت uint8_t DIG_PIN_RELAY_0 = 1 ؛ const static uint8_t DIG_PIN_RELAY_1 = 10 ؛ const static uint8_t DIG_PIN_RELAY_2 = 11 ؛

const static uint8_t RELAYS_AMOUNT = 3 ؛

const static int16_t RELAY_TEMP_SET_POINT_0 = 20 ؛

const static int16_t RELAY_TEMP_SET_POINT_1 = 30 ؛ const static 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 پیدا خواهید کرد

من شبیه ساز ساده را در جاوا پیاده سازی کرده ام ، به طوری که امکان تجسم نتایج وجود دارد. این را می توان در پوشه یافت: pidsimulator. در زیر می توانید شبیه سازی های دو کنترل کننده را مشاهده کنید PID a P. PID کاملاً پایدار نیست زیرا من هیچ الگوریتم پیچیده ای برای پیدا کردن مقادیر مناسب اعمال نکرده ام.

در هر دو قطعه دمای مورد نیاز 30 (آبی) تنظیم شده است. دمای فعلی خط خواندن را نشان می دهد. رله دارای دو حالت ON و OFF است. وقتی دمای آن فعال است 1.5 کاهش می یابد ، در صورت غیرفعال شدن آن 0.5 افزایش می یابد.

مرحله 5: گذرگاه پیام

اتوبوس پیام
اتوبوس پیام
اتوبوس پیام
اتوبوس پیام
اتوبوس پیام
اتوبوس پیام
اتوبوس پیام
اتوبوس پیام

ماژول های نرم افزاری مختلف باید با یکدیگر ارتباط برقرار کنند ، امیدوارم نه به هر دو صورت ؛)

مثلا:

  • ماژول آمار باید بداند که رله خاص چه زمانی روشن و خاموش می شود ،
  • فشار دادن یک دکمه باید محتوای صفحه نمایش را تغییر دهد و همچنین باید سرویس هایی را که چرخه CPU زیادی را مصرف می کنند ، به عنوان مثال خواندن دما از حسگر ، به حالت تعلیق درآورد.
  • بعد از مدتی باید دما خوانده شود ،
  • و غیره….

هر ماژول به Message Bus متصل است و می تواند برای رویدادهای خاص ثبت نام کند و می تواند هر رویدادی را تولید کند (نمودار اول).

در نمودار دوم می توان جریان رویداد را با فشار دادن دکمه مشاهده کرد.

برخی از اجزا دارای وظایفی هستند که باید به صورت دوره ای اجرا شوند. ما می توانیم متدهای متناظر آنها را از حلقه اصلی فراخوانی کنیم ، زیرا ما Message Bus داریم فقط باید رویداد مناسب را تبلیغ کرد (نمودار سوم)

مرحله 6: Libs

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

توصیه شده: