نظام التحكّم: حسّاس، متحكّم، مشغّل وبيان
سخّان الماء الذي ينطفئ وحده، والمكيّف الذي يحافظ على درجة حرارة الغرفة، والمصباح الذي يضيء عند الغروب: كلها أنظمة تحكّم. في كل واحد منها حسّاس يقيس، ومتحكّم يقرّر، ومشغّل ينفّذ، وبيان يُعلِم المستخدم. في هذا الفصل نتعرّف على بنية نظام التحكّم، ونصف عملية مُتحكَّما بها بالكلمات وبالمخطّطات، ونميّز بين الحلقة المفتوحة والحلقة المغلقة، وننهي ببرنامجنا الأول: منظّم حرارة على لوحة Arduino Uno.
- نرسم مخطّط الكتل لنظام تحكّم ونسمّي كل كتلة فيه.
- نصف عملية مُتحكَّما بها بالكلمات، بمخطّط سير العمليات وبمخطّط الحالات.
- نميّز بين الحلقة المفتوحة والمغلقة، وبين التحكّم المتقطّع والمستمر، ونحسب الخطأ e = r − y.
- نشرح لماذا نضيف التخلّف إلى تحكّم تشغيل-إيقاف.
- نكتب برنامجا في حلقة «اقرأ – قرّر – نفّذ» ونحسب ما سيطبعه على الشاشة التسلسلية.
המבנה העקרוני של מערכת בקרה – البنية الأساسية لنظام التحكّم (Control System Structure)
مهما كان النظام بسيطا أو معقّدا، نجد فيه دائما نفس الكتل. نرسمها في مخطّط الكتل (דיאגרמת מלבנים): كل كتلة مستطيل، وكل سهم يبيّن إشارة أو طاقة تنتقل من كتلة إلى أخرى.
| الكتلة | بالعبرية | وظيفتها | أمثلة |
|---|---|---|---|
| الحسّاس (المستشعر) | חיישן | يحوّل كمية فيزيائية إلى إشارة كهربائية (جهد، تيار أو مستوى منطقي) يقرؤها المتحكّم | حسّاس حرارة، مقاومة ضوئية، مفتاح العوّامة |
| المتحكّم | בקר | يقرأ الحسّاسات وأوامر المستخدم، يقارن بالمطلوب، ويقرّر ماذا يفعل | متحكّم دقيق على Arduino Uno أو ESP32 |
| المشغّل | מפעיל | يحوّل أمر المتحكّم إلى فعل: حرارة، حركة أو ضوء | سخّان، محرّك، صمّام كهرومغناطيسي، ملامس |
| البيان | חיווי | يُعلِم الإنسان بحالة النظام | مصباح بيان، طنّان، شاشة |
| العملية المُتحكَّم بها | תהליך מבוקר | الشيء الذي نتحكّم به | ماء في خزّان، هواء غرفة |
| المستخدم | משתמש | يحدّد المطلوب ويتابع البيان | يضبط درجة الحرارة المطلوبة |
في هذا الكتاب المتحكّم هو متحكّم دقيق (מיקרו-בקר). الحسّاس يصل إليه عبر مدخل (מבוא) رقمي أو تماثلي، والمشغّل والبيان عبر مخرج (מוצא). مخرج المتحكّم ضعيف، ولذلك يعمل المشغّل غالبا عن طريق ترانزستور أو مرحّل.
مثال تطبيقي: إدارة القدرة في بيت – ניהול הספק במערכת חשמל:
أنظمة التحكّم لا تتحكّم بالحرارة فقط. في لوحة الكهرباء نستطيع أن نبني نظاما يدير القدرة: حسّاس التيار (חיישן זרם) يقيس التيار الكلّي للبيت؛ إذا اقترب التيار من الحدّ المسموح، يفصل المتحكّم حملا غير مستعجل، مثل سخّان الماء، بواسطة ملامس (מגען)، ويُضيء مصباح بيان «السخّان مفصول». هكذا نمنع فصل البيت كله بقاطع التيار الرئيسي. الحسّاس هنا حسّاس التيار، المشغّل الملامس، والبيان المصباح.
(أ) نحسب تيار السخّان.
(ب) هل يسمح المتحكّم بتشغيله؟
(ج) يعيد المتحكّم وصل السخّان فقط عندما يبقى هامش 2 A تحت الحدّ. حتى أيّ تيار يجب أن تنخفض باقي الأحمال؟
(أ) تيار حمل مقاوِم يساوي قدرته مقسومة على الجهد:
(ب) التيار الكلّي لو شغّلنا السخّان:
هذه القيمة أكبر من الحدّ 32 A ، ولذلك يُبقي المتحكّم الملامس مفتوحا ويُضيء مصباح البيان.
(ج) نطرح من الحدّ تيار السخّان والهامش:
الهامش يمنع وصل السخّان وفصله مرّة بعد مرّة عندما يكون التيار قريبا من الحدّ. هذه الفكرة نفسها، التخلّف، ستعود في منظّم الحرارة.
תיאור תהליך מבוקר: מילולי, תרשים זרימה ותרשים בועות – وصف عملية مُتحكَّم بها (Describing a Process)
قبل أن نكتب سطرا واحدا من البرنامج نصف ما يجب أن يفعله النظام. نستخدم ثلاث طرق تكمّل إحداها الأخرى. مثالنا في بقية الفصل منظّم الحرارة (תרמוסטט) (الثرموستات): يسخّن غرفة صغيرة ويحافظ على درجة حرارتها بين 23 °C و 25 °C.
الوصف الكلامي – תיאור מילולי:
- عند التشغيل يكون السخّان متوقّفا.
- يقرأ المتحكّم درجة الحرارة T مرّة كل ثانية.
- إذا انخفضت T تحت 23 °C يشغّل السخّان.
- إذا ارتفعت T فوق 25 °C يوقف السخّان.
- بين القيمتين لا يغيّر شيئا: يبقى السخّان في حالته السابقة.
- يعرض المتحكّم T وحالة السخّان على الشاشة.
الوصف الكلامي سهل الكتابة، لكنه قد يكون غير دقيق: ماذا يحدث بالضبط عند 25 °C؟ لذلك نرسمه أيضا.
مخطّط سير العمليات – תרשים זרימה:
نتبع الأسهم من الأعلى: بعد التهيئة تبدأ حلقة لا تنتهي: قراءة، حساب، سؤالان، طباعة وانتظار، ثم العودة إلى القراءة. إذا كان الجواب عن السؤالين «لا» نصل إلى الطباعة بدون تغيير حالة السخّان؛ هذا هو البند 5 في الوصف الكلامي.
مخطّط الحالات – תרשים בועות (תרשים מצבים):
مخطّط الحالات يبيّن بوضوح ما يخفيه الوصف الكلامي: عند T = 24 °C قد يكون السخّان يعمل أو متوقّفا — الجواب متعلّق بالحالة السابقة. نظام كهذا «يتذكّر»، ولذلك نحتاج في البرنامج إلى متغيّر يحفظ الحالة.
חוג פתוח וחוג סגור – الحلقة المفتوحة والحلقة المغلقة (Open and Closed Loop)
- القيمة المطلوبة (ערך רצוי) r: ما يحدّده المستخدم، مثلا 24 °C.
- القيمة الفعلية (ערך מצוי) y: ما يوجد فعلا في العملية، كما يقيسه الحسّاس.
- الخطأ (שגיאה) e: الفرق بين المطلوب والفعلي، وله وحدة الكمية المُتحكَّم بها. المتحكّم يعمل لكي يصغّره:
- الاضطراب (הפרעה): تأثير خارجي يغيّر العملية: نافذة مفتوحة، شمس، حمل إضافي. الحلقة المفتوحة لا تصحّح أثره، والحلقة المغلقة تصحّحه وحدها.
(أ) يقيس الحسّاس y = 21.5 °C.
(ب) بعد دخول الشمس إلى الغرفة يقيس y = 25.8 °C. نحسب الخطأ في كل حالة ونقرّر ماذا يفعل منظّم الحرارة.
نعوّض في قانون الخطأ: (أ) في السطر الأول، (ب) في السطر الثاني.
(أ) الخطأ موجب: الغرفة أبرد من المطلوب، فيشغّل المتحكّم السخّان. (ب) الخطأ سالب: الغرفة أسخن من المطلوب، فيوقف السخّان. الشمس هنا اضطراب.
الحلقة المفتوحة أبسط وأرخص، لكنها لا تصحّح الاضطراب. الحلقة المغلقة تحتاج إلى حسّاس وبرنامج مقارنة، لكنها تصحّح وحدها.
בקרה בדידה ובקרה רציפה – التحكّم المتقطّع والتحكّم المستمر (Discrete and Continuous Control)
لماذا نحتاج إلى التخلّف؟ – בקרה דו-מצבית עם היסטרזיס
لو استعمل منظّم الحرارة قيمة حدّية واحدة، مثلا «شغّل تحت 24 °C وأوقف فوقها»، لتغيّرت حالة السخّان في كل مرّة تعبر فيها الحرارة الحدّ صعودا أو هبوطا — وقرب الحدّ يحدث ذلك في كل قراءة تقريبا. المرحّل أو الملامس يتآكل بسرعة، ويُسمَع «طقطقة» متواصلة.
حسبنا بالحاسوب سلوك غرفة صغيرة في نموذج مبسّط: حرارة المحيط 18 °C ، السخّان يرفع الحرارة بمعدّل 0.8 °C/min ، والغرفة تفقد حرارة كلما كانت أسخن من المحيط. المتحكّم يقرأ مرّة كل ثانية، و TON = 23 °C ، TOFF = 25 °C. هذه أرقام مثال للنموذج وليست قيم جهاز معيّن.
- في البداية الغرفة باردة، فيعمل السخّان حتى تصل الحرارة إلى 25 °C بعد نحو 11.5 min.
- بعدها تتأرجح الحرارة بين 23 °C و 25 °C تقريبا. الدورة الكاملة نحو 10.8 min: السخّان يعمل نحو 4 min ويتوقّف نحو 6.7 min.
- خلال ساعة غيّر السخّان حالته 10 مرّات. في نفس النموذج، مع قيمة حدّية واحدة 24 °C ، تتغيّر الحالة 2280 مرّة في الساعة.
إذن ثمن التخلّف تأرجح الحرارة في مدى ΔT ، وربحه عدد قليل جدا من مرّات التبديل. كلما وسّعنا ΔT قلّ عدد التبديلات وكبر التأرجح.
לולאת הבקר: קריאה, החלטה וביצוע – حلقة المتحكّم الدقيق: اقرأ – قرّر – نفّذ (Read – Decide – Act)
برنامج Arduino (סקיצה) فيه دالّتان: setup() تعمل مرّة واحدة عند التشغيل، و loop() تتكرّر بلا توقّف. في كل دورة من loop() ينفّذ المتحكّم ثلاث خطوات — وهي بالضبط كتل مخطّط الكتل (وفي البرنامج التالي نجدها في التعليقات // 1. read ، // 2. decide ، // 3. act):
- اقرأ: يقرأ الحسّاسات — analogRead() لمدخل تماثلي أو digitalRead() لمدخل رقمي.
- قرّر: يحوّل القيمة الخام إلى وحدة فيزيائية ويقارنها بالقيمة المطلوبة (جملة if).
- نفّذ: يكتب إلى المخارج — digitalWrite() للمشغّل وللبيان، و Serial.print() للشاشة.
(أ) نحسب تردّد أخذ العيّنات وعدد القراءات في الدقيقة.
(ب) بكم تتغيّر الحرارة بين قراءتين؟ هل أخذ العيّنات سريع بما يكفي؟
(أ) Ts = 1 s (المعادلة الأولى)، وفي الدقيقة 60 قراءة. (ب) نقسم التغيّر في الدقيقة على عدد القراءات (المعادلة الثانية):
التغيّر بين قراءتين أصغر بكثير من عرض منطقة التخلّف 2 °C ، إذن أخذ العيّنات سريع جدا لهذه العملية البطيئة. أمّا زرّ يضغطه الإنسان فيحتاج إلى قراءة أسرع بكثير، ولذلك لا نستعمل delay() طويلا داخل الحلقة: خلاله لا يقرأ المتحكّم شيئا.
סקיצה ראשונה: תרמוסטט עם היסטרזיס – البرنامج الأوّل: منظّم حرارة بالتخلّف (First Sketch: Thermostat)
نبني منظّم الحرارة على لوحة Arduino Uno بدون حسّاس حرارة حقيقي: المقاومة المتغيّرة (פוטנציומטר) (المقاومة المتغيّرة) على المدخل A0 يمثّل الحسّاس — ندير مقبضه فـ«تتغيّر الحرارة». ومصباح LED على المخرج D8 يمثّل السخّان. في الفصل 5 نستبدل المقاومة المتغيّرة بحسّاس حرارة حقيقي، وفي الفصل 10 نستبدل المصباح بمرحّل.
حساب مقاومة المصباح – חישוב הנגד הטורי של הנורית:
نختار القيمة التجارية الأكبر الأقرب من سلسلة E12: R = 330 Ω. التيار الفعلي:
هذا أقلّ من 20 mA ، التيار الموصى به لطرف ATmega328P في Uno.
من القيمة الخام إلى «درجة الحرارة» – מהערך הגולמי לטמפרטורה:
المقاومة المتغيّرة 10 kΩ بين 5 V و GND (يمرّ فيه 0.5 mA فقط)، فيتغيّر جهد المنزلق من 0 إلى 5 V. المحوّل التماثلي-الرقمي (ממיר תקבילי-ספרתי) في Uno يعطي قيمة خام (ערך גולמי) N من 0 إلى Nmax = 1023. نقرّر أن مدى «الحسّاس» من 0 إلى Tmax = 50 °C ، فتتحوّل القيمة الخام إلى حرارة بتناسب بسيط:
البرنامج – הסקיצה:
const int SENSOR = A0; // potentiometer = temperature sensor (model)
const int HEATER = 8; // LED = heater (model)
const float T_MAX = 50.0; // N = 1023 -> 50 C
const float T_ON = 23.0; // below this: heater ON
const float T_OFF = 25.0; // above this: heater OFF
const unsigned long PERIOD = 1000; // sampling period [ms]
bool heaterOn = false;
unsigned long last = 0;
void setup() {
pinMode(HEATER, OUTPUT);
Serial.begin(9600);
}
void loop() {
if (millis() - last < PERIOD) return;
last = millis();
int n = analogRead(SENSOR); // 1. read
float t = n * T_MAX / 1023.0;
if (t < T_ON) heaterOn = true; // 2. decide
else if (t > T_OFF) heaterOn = false;
digitalWrite(HEATER, heaterOn ? HIGH : LOW); // 3. act
Serial.print("N = "); Serial.print(n);
Serial.print(" T = "); Serial.print(t, 1);
Serial.println(heaterOn ? " C heater: ON" : " C heater: OFF");
}- الثوابت في الأعلى: الأطراف، مدى الحسّاس، TON ، TOFF وفترة أخذ العيّنات. لتغيير الضبط نغيّر سطرا واحدا.
- المتغيّر heaterOn هو «ذاكرة» مخطّط الحالات. لا يوجد else أخير: إذا كانت T بين القيمتين لا نلمسه.
- السطر if (millis() - last < PERIOD) return; يجعل الدورة تعمل مرّة كل ثانية بدون delay().
ندير المقبض ببطء إلى الأسفل ثم إلى الأعلى. هذه شاشة نموذجية، محسوبة بنفس قانون البرنامج ونفس التقريب إلى منزلة عشرية واحدة:
N = 532 T = 26.0 C heater: OFF N = 501 T = 24.5 C heater: OFF N = 486 T = 23.8 C heater: OFF N = 471 T = 23.0 C heater: OFF N = 460 T = 22.5 C heater: ON N = 452 T = 22.1 C heater: ON N = 466 T = 22.8 C heater: ON N = 481 T = 23.5 C heater: ON N = 497 T = 24.3 C heater: ON N = 512 T = 25.0 C heater: OFF N = 522 T = 25.5 C heater: OFF N = 530 T = 25.9 C heater: OFF
نقارن السطرين N = 486 (في طريق النزول) و N = 481 (في طريق الصعود): الحرارة تقريبا نفسها، داخل منطقة التخلّف، لكن السخّان متوقّف في الأول ويعمل في الثاني. هذا هو التخلّف كما رأيناه في مخطّط الحالات.
(أ) أكبر N يشغّل السخّان (T أقلّ من 23 °C).
(ب) أصغر N يوقفه (T أكبر من 25 °C).
نُخرج N من القانون: N = T·NmaxTmax.
(أ) N عدد صحيح، والشرط «أقلّ من»، لذلك أكبر قيمة تشغّل السخّان N = 470. (ب) الشرط «أكبر من»، لذلك أصغر قيمة توقفه N = 512. نقارن بالشاشة: N = 471 لم يشغّل السخّان، و N = 512 أوقفه.
מפת הספר: חיישנים, מפעילים וחיווי – خريطة الكتاب: الحسّاسات والمشغّلات والبيان (Book Map)
في بقية الكتاب نأخذ كل كتلة من مخطّط الكتل وندرسها: كيف تعمل، كيف نوصلها بالمتحكّم، وكيف نحوّل قراءتها إلى عدد له معنى.
| الفصل | الموضوع | أمثلة |
|---|---|---|
| 2–4 | الأساس: الخصائص والمداخل | الدقّة، مقاومة الرفع، ملاءمة الإشارة |
| 5 | الحرارة والرطوبة | المقاومة الحرارية، LM35، DS18B20، DHT22 |
| 6 | الضوء | المقاومة الضوئية، الديود الضوئي |
| 7 | المسافة والحضور والحركة | الحسّاس فوق الصوتي، حسّاس الحركة |
| 8 | الحسّاسات الصناعية | حسّاسات الاقتراب، مفتاح نهاية المشوار |
| 9 | التيار والجهد والقدرة | حسّاس التيار، مُجزِّء الجهد |
| 10 | تشغيل الأحمال | الترانزستور كمفتاح، المرحّل |
| 11 | المحرّكات | المحرّك المؤازر، محرّك الخطوة |
| 12 | المشغّلات الصناعية | الملامس، الصمّام الكهرومغناطيسي |
| 13 | البيان والعرض | الطنّان، شاشة الكريستال السائل |
| 14 | مشروع ختامي | نظام تحكّم متكامل |
ملخّص قوانين الفصل:
| القانون | الصيغة |
|---|---|
| التيار الذي يأخذه حمل مقاوِم | I = PV |
| الخطأ في الحلقة المغلقة | e = r − y |
| عرض منطقة التخلّف | ΔT = TOFF − TON |
| تردّد أخذ العيّنات | fs = 1Ts |
| الجهد من القيمة الخام | V = N·VrefNmax |
| القيمة الخام إلى درجة حرارة | T = N·TmaxNmax |
| مقاومة المصباح على التوالي | R = VCC − VFIF |
قاموس المصطلحات – מילון מונחים:
| بالعربية | بالعبرية (كما تظهر في الامتحان) | English |
|---|---|---|
| نظام التحكّم | מערכת בקרה | Control system |
| التحكّم المحوسب | בקרה ממוחשבת | Computer control |
| الحسّاس (المستشعر) | חיישן | Sensor |
| المتحكّم · المتحكّم الدقيق | בקר · מיקרו-בקר | Controller · Microcontroller |
| المشغّل | מפעיל | Actuator |
| البيان | חיווי | Indication |
| العملية المُتحكَّم بها | תהליך מבוקר | Controlled process |
| مخطّط الكتل | דיאגרמת מלבנים | Block diagram |
| مخطّط سير العمليات | תרשים זרימה | Flowchart |
| مخطّط الحالات | תרשים בועות / מצבים | State diagram |
| الحلقة المفتوحة | חוג פתוח | Open loop |
| الحلقة المغلقة | חוג סגור | Closed loop |
| التغذية الراجعة | משוב | Feedback |
| القيمة المطلوبة | ערך רצוי | Set point |
| القيمة الفعلية | ערך מצוי | Actual value |
| الخطأ | שגיאה | Error |
| الاضطراب | הפרעה | Disturbance |
| التحكّم المتقطّع | בקרה בדידה | Discrete control |
| التحكّم المستمر | בקרה רציפה | Continuous control |
| تحكّم تشغيل-إيقاف | בקרה דו-מצבית | On/off control |
| التخلّف (الهستيريسيس) | היסטרזיס | Hysteresis |
| منظّم الحرارة (الثرموستات) | תרמוסטט | Thermostat |
| أخذ العيّنات | דגימה | Sampling |
| المقاومة المتغيّرة (البوتنشيومتر) | פוטנציומטר | Potentiometer |
| القيمة الخام | ערך גולמי | Raw value |
| المدخل · المخرج | מבוא · מוצא | Input · Output |
| المحوّل التماثلي-الرقمي | ממיר תקבילי-ספרתי | Analog-to-digital converter |
| حسّاس التيار | חיישן זרם | Current sensor |
| الملامس (الكونتاكتور) | מגען | Contactor |
| البرنامج (sketch) | סקיצה | Sketch |
أسئلة للتمرين:
(أ) إشارة ضوئية تتبدّل كل 30 s.
(ب) مكواة مع منظّم حرارة.
(ج) ري حسب الساعة.
(د) مضخّة مع مفتاحي عوّامة.
(أ) 35.5 °C.
(ب) 38.2 °C. ماذا تعني إشارة الخطأ في كل حالة؟
(أ) ما عرض منطقة التخلّف؟
(ب) نرسم مخطّط الحالات ونكتب الشرط على كل سهم.
(أ) نحسب المقاومة.
(ب) نختار قيمة من E12 ونحسب التيار الفعلي.
(أ) نحسب تيار السخّان.
(ب) هل يسمح المتحكّم بتشغيله؟