جدول المحتويات:

ترموستات على أساس الأردوينو: 6 خطوات
ترموستات على أساس الأردوينو: 6 خطوات

فيديو: ترموستات على أساس الأردوينو: 6 خطوات

فيديو: ترموستات على أساس الأردوينو: 6 خطوات
فيديو: كاميرا مراقبه ترصد خططف فتاه الجامعه داخل سياره فيديو للتوعيه؟! الجزء الاول 2024, شهر نوفمبر
Anonim
ترموستات على أساس اردوينو
ترموستات على أساس اردوينو
ترموستات على أساس اردوينو
ترموستات على أساس اردوينو
ترموستات على أساس اردوينو
ترموستات على أساس اردوينو

هذه المرة سنقوم ببناء منظم حرارة يعتمد على Arduino ومستشعر درجة الحرارة ومرحل. يمكنك العثور على جيثب

الخطوة 1: التكوين

إعدادات
إعدادات

يتم تخزين التكوين بالكامل في Config.h. يمكنك تغيير أرقام التعريف الشخصية التي تتحكم في المرحلات أو قراءة درجة الحرارة أو العتبات أو التوقيت.

الخطوة 2: تكوين المرحلات

لنفترض أننا نود أن يكون لدينا 3 مرحلات:

  • المعرف: 0 ، رقم التعريف الشخصي: 1 ، نقطة ضبط درجة الحرارة: 20
  • المعرف: 1 ، رقم التعريف الشخصي: 10 ، نقطة ضبط درجة الحرارة: 30
  • المعرف: 2 ، رقم التعريف الشخصي: 11 ، نقطة ضبط درجة الحرارة: 40

عليك أولاً التأكد من أن رقم التعريف الشخصي الذي تختاره لم يتم أخذه بالفعل. يمكن العثور على جميع المسامير في Config.h ، يتم تحديدها بواسطة متغيرات تبدأ بـ DIG_PIN.

يجب عليك تحرير Config.h وتكوين أرقام التعريف الشخصية والعتبات ومقدار المرحلات. من الواضح أن بعض الخصائص موجودة بالفعل ، لذلك عليك فقط تعديلها.

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

ثابت ثابت uint8_t RELAYS_AMOUNT = 3 ؛

ثابت ثابت int16_t RELAY_TEMP_SET_POINT_0 = 20 ؛

ثابت ثابت int16_t RELAY_TEMP_SET_POINT_1 = 30 ؛ ثابت ثابت 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: وحدة تحكم التخلفية

إنه الخيار المختار في المثال أعلاه ، ويحتوي على عدد قليل من التكوينات الإضافية:

ثابت ثابت uint32_t RELAY_DELAY_AFTER_SWITCH_MS = 300000 ؛ // 5 minutesconst ثابت 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: Libs

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

موصى به: