البيان والعرض وواجهة الإنسان والآلة
المتحكّم يعرف درجة الحرارة وحالة كل مفتاح، لكن الإنسان الواقف أمام الآلة لا يرى شيئا من ذلك. في هذا الفصل نُخرج المعلومات إلى الإنسان: مصابيح بيان بألوان متّفق عليها، طنّان يُنذر بالخطر، عارض أرقام سباعي المقاطع، شاشة نصوص وشاشة رسوم صغيرة. ثم نبني واجهة صغيرة بثلاثة أزرار نغيّر بها القيمة المطلوبة ونحفظها في ذاكرة لا تُمحى، ونختم بمبادئ تصميم واجهة الإنسان والآلة في الصناعة.
- لكل لون في مصباح البيان معنى ثابت حسب المواصفة IEC 60204-1، وأن الوميض يطلب الانتباه.
- نشغّل طنّانا فعّالا أو سلبيا، وننتج نمط إنذار بـ millis() دون أن يتوقّف البرنامج.
- الإنذار يومض حتى يُقرّ به الإنسان، ثم يثبت حتى تزول الحالة.
- نحسب رموز الأرقام في العارض سباعي المقاطع، ونفهم مبدأ المسح المتعدّد.
- نكتب على شاشة 16×2 وعلى شاشة OLED عبر ناقل I2C، ونرسم ما سيظهر عليهما مسبقا.
- نبني قائمة بثلاثة أزرار بحسب مخطّط الحالات، ونحفظ القيمة المطلوبة في EEPROM.
- نميّز بين واجهة الإنسان والآلة وواجهة آلة-آلة، ونعرف لوح اللمس الصناعي ونظام SCADA.
חיווי, התרעה ונוריות חיווי – البيان والإنذار ومصابيح البيان (Indication, Alarm, Indicator Lamps)
أبسط وسيلة بيان هي مصباح البيان (נורית חיווי): في لوحة الكهرباء مصباح بجهد 24 V ، وفي نظام المتحكّم ديود باعث للضوء LED مع مقاومة على طرف رقمي. حتى يفهم كل إنسان اللون بنفس المعنى في كل آلة، تحدّد المواصفة IEC 60204-1 (السلامة الكهربائية للآلات) معنى كل لون:
| اللون | المعنى | حالة الآلة وما يفعله العامل على الآلة | |
|---|---|---|---|
| أحمر | طارئ חירום | حالة خطرة: عمل فوري (فصل التغذية، الابتعاد عن الآلة) | |
| أصفر | غير طبيعي חריג | حالة غير طبيعية أو حرجة وشيكة: مراقبة و/أو تدخّل | |
| أزرق | إلزامي חובה | حالة تتطلّب عملا من العامل: عمل إلزامي | |
| أخضر | طبيعي תקין | حالة طبيعية: لا يُطلب شيء | |
| أبيض | محايد ניטרלי | حالات أخرى، أو عند الشكّ في اللون: مراقبة |
العامل على الآلة (מפעיל המכונה) هو الإنسان الذي يشغّلها؛ لا نخلط بينه وبين المشغّل (المحرّك أو الصمّام). المواصفة تحدّد ألوان الأزرار أيضا: زرّ إيقاف الطوارئ أحمر على خلفية صفراء، زرّ التشغيل لا يكون أحمر، وزرّ الإيقاف لا يكون أخضر.
المصباح الثابت يصف حالة. أمّا الوميض (הבהוב) فيُستعمل حسب IEC 60204-1 لجذب الانتباه ولطلب عمل فوري، وللدلالة على فرق بين الأمر والحالة الفعلية (أمرنا الصمّام أن ينفتح ولم ينفتح بعد)، والمعلومة ذات الأولوية الأعلى تومض أسرع. نتّفق في هذا الفصل على القاعدة الشائعة في الصناعة: أحمر وامض مع طنّان = إنذار جديد، أحمر ثابت = أقرّ به الإنسان والحالة ما زالت قائمة، منطفئ = زالت الحالة.
| الرمز | المعنى | وحدة القياس |
|---|---|---|
| R | المقاومة على التوالي مع LED | [Ω] |
| VCC | جهد الطرف في الحالة HIGH (5 V في Uno) | [V] |
| VF , IF | الجهد الأمامي والتيار الأمامي للـ LED | [V] , [A] |
للأحمر 300 Ω وللأصفر 290 Ω. نختار لها كلّها القيمة القياسية 330 Ω ، فيكون التيار: أحمر 9.09 mA، أصفر 8.79 mA، أخضر 8.48 mA.
זמזם ודפוס התרעה – الطنّان ونمط الإنذار (Buzzer and Alarm Pattern)
مثلا الطنّان الفعّال TMB12A05: 5 V ، حتى 30 mA ، نحو 2300 Hz (قيمة نموذجية حسب ورقة البيانات). tone() تُخرج موجة مربّعة نسبة تشغيلها 50 % وزمن دورتها Tp = 1f حتى نستدعي noTone(). حسب توثيق Arduino: صوت واحد فقط في كل وقت، لا أقل من 31 Hz ، وفي Uno تعطّل تعديل عرض النبضة في الطرفين 3 و 11. 30 mA أكثر من الموصى بها للطرف، فنشغّل الطنّان عبر ترانزستور كمفتاح مع مقاومة قاعدة 1 kΩ (الفصل 10). وفي الطنّان المغناطيسي ملفّ، فنضع معه ديود الحماية.
نمط إنذار لا يوقف البرنامج. لو كتبنا الوميض بـ delay(250) لتوقّف البرنامج في كل مرّة، ولما رأى ضغطة الإقرار في وقتها. بدل ذلك نحسب حالة الوميض من الساعة: الباقي millis() % 500 يتكرّر كل 500 ms ، ويكون أقل من 250 في نصف الوقت. الحلقة تدور آلاف المرّات في الثانية وترى كل زرّ فورا.
const int SENSOR = A0; // LM35: 10 mV per degree C
const int GREEN_LED = 5, YELLOW_LED = 6, RED_LED = 7;
const int BUZZER = 9, ACK_BTN = 2; // buzzer via NPN, button to GND
const float T_WARN = 45.0, T_ALARM = 50.0;
bool alarmOn = false, acked = false, buzzing = false;
float t = 0;
unsigned long tRead = 0;
void setup() {
Serial.begin(9600);
for (int p = 5; p <= 7; p++) pinMode(p, OUTPUT); // three lamps
pinMode(ACK_BTN, INPUT_PULLUP);
}
void loop() {
unsigned long now = millis();
if (now - tRead >= 1000) { // one reading per second
tRead = now;
t = analogRead(SENSOR) * 500.0 / 1023.0;
if (t >= T_ALARM && !alarmOn) { alarmOn = true; acked = false; }
if (t < T_ALARM && acked) alarmOn = false;
Serial.print("T = "); Serial.print(t, 1);
if (!alarmOn) Serial.println(t < T_WARN ? " GREEN" : " YELLOW");
else Serial.println(acked ? " RED steady" : " RED flashing + beep");
}
if (alarmOn && digitalRead(ACK_BTN) == LOW) acked = true;
bool blink = (now % 500) < 250; // 2 Hz, 50 %
digitalWrite(GREEN_LED, !alarmOn && t < T_WARN);
digitalWrite(YELLOW_LED, !alarmOn && t >= T_WARN);
digitalWrite(RED_LED, alarmOn && (acked || blink));
bool beep = alarmOn && !acked && blink;
if (beep != buzzing) { // call tone() only on a change
buzzing = beep;
if (beep) tone(BUZZER, 2000); else noTone(BUZZER);
}
}نسخّن الحسّاس ثم نتركه يبرد. الحرارة الحقيقية في كل ثانية (°C): 41، 44، 46، 48، 51، 53، 54، 52، 49، 47، 44، ونضغط زرّ الإقرار عند t = 7.4 s. القراءة تمرّ بالمحوّل التماثلي-الرقمي، فتختلف قليلا عن الحقيقية:
T = 40.6 GREEN T = 44.0 GREEN T = 45.9 YELLOW T = 47.9 YELLOW T = 50.8 RED flashing + beep T = 52.8 RED flashing + beep T = 53.8 RED flashing + beep T = 51.8 RED steady T = 48.9 YELLOW T = 46.9 YELLOW T = 44.0 GREEN
ب. يرتفع T إلى 52 °C ثم يهبط إلى 47 °C ولم يضغط أحد الزرّ. ماذا يرى العامل؟
תצוגת שבעה מקטעים – العارض سباعي المقاطع (Seven-Segment Display)
في العارض ذي المهبط المشترك (קתודה משותפת, CC) نوصل COM بالأرضي ويضيء المقطع بـ HIGH؛ وفي العارض ذي المصعد المشترك (אנודה משותפת, CA) نوصل COM بـ 5 V ويضيء المقطع بـ LOW (مثلا 5161AS مهبط مشترك و 5161BS مصعد مشترك). نكتب لكل رقم بايتا: الخانة 0 للمقطع a … الخانة 6 للمقطع g ، و 1 = مضاء في المهبط المشترك. في المصعد المشترك نقلب الخانات السبع:
| الرقم | a | b | c | d | e | f | g | الرمز (CC) | الرمز (CA) |
|---|---|---|---|---|---|---|---|---|---|
| 0 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 0x3F | 0x40 |
| 1 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 0x06 | 0x79 |
| 2 | 1 | 1 | 0 | 1 | 1 | 0 | 1 | 0x5B | 0x24 |
| 3 | 1 | 1 | 1 | 1 | 0 | 0 | 1 | 0x4F | 0x30 |
| 4 | 0 | 1 | 1 | 0 | 0 | 1 | 1 | 0x66 | 0x19 |
| 5 | 1 | 0 | 1 | 1 | 0 | 1 | 1 | 0x6D | 0x12 |
| 6 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | 0x7D | 0x02 |
| 7 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 0x07 | 0x78 |
| 8 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0x7F | 0x00 |
| 9 | 1 | 1 | 1 | 1 | 0 | 1 | 1 | 0x6F | 0x10 |
الرقم 4 يضيء b ، c ، f ، g ، أي الخانات 1 ، 2 ، 5 ، 6:
لكل مقطع مقاومة خاصّة: مقاومة واحدة في COM تجعل الرقم 1 ساطعا والرقم 8 خافتا. مع VF ≈ 2 V (قيمة نموذجية حسب ورقة البيانات لـ LED أحمر) تيار المقطع I = 5 − 2330 ≈ 9.1 mA. في البرنامج bitRead(x, i) تقرأ الخانة i ، والتعبير on != COMMON_ANODE يقلب المنطق: للمصعد المشترك نغيّر سطرا واحدا، COMMON_ANODE = true.
const int SEG_PIN[7] = {2, 3, 4, 5, 6, 7, 8}; // segments a..g
const bool COMMON_ANODE = false; // 5161AS: common cathode
// bit 0 = a ... bit 6 = g ; 1 = segment lit
const byte DIGIT[10] = {0x3F, 0x06, 0x5B, 0x4F, 0x66,
0x6D, 0x7D, 0x07, 0x7F, 0x6F};
void showDigit(int d) {
for (int i = 0; i < 7; i++) {
bool on = bitRead(DIGIT[d], i);
digitalWrite(SEG_PIN[i], on != COMMON_ANODE); // anode: lit = LOW
}
}
void setup() {
for (int i = 0; i < 7; i++) pinMode(SEG_PIN[i], OUTPUT);
}
void loop() {
for (int d = 0; d < 10; d++) {
showDigit(d);
delay(1000);
}
}لأربعة أرقام نحتاج 7 + 4 = 11 طرفا بدل 28. طرف COM لكل رقم يمرّ عبر ترانزستور: تيار الرقم 8 7·9.09 ≈ 63.6 mA ، أكثر من 40 mA ، الحدّ الأقصى المطلق لطرف Uno.
مثلا في عارض بأربعة أرقام، كل رقم مضاء 4 ms ، يعود كل رقم بعد 4·4 = 16 ms ، أي نحو 62.5 مرّة في الثانية: أسرع مما تلاحظه العين، فلا نرى رجفة. لكن كل رقم مضاء ربع الوقت فقط، فيبدو أخفت من الإضاءة الثابتة. وفي البرنامج الحقيقي ننتقل للرقم التالي بـ millis() لا بـ delay() ، أو نستعمل رقاقة مسح جاهزة مثل MAX7219.
צג גביש נוזלי 16×2 באפיק I2C – شاشة الكريستال السائل 16×2 عبر I2C (Character LCD over I2C)
خلف الشاشة لوحة فيها الرقاقة PCF8574، فتكفي أربعة أسلاك: التغذية والأرضي و ناقل I2C — سلكان فقط، SDA للبيانات و SCL للساعة، تشترك فيهما عدّة وحدات لكلّ منها عنوان — وفي Uno SDA هو A4 و SCL هو A5. عنوان (כתובת) اللوحة 0x27 مع PCF8574 و 0x3F مع PCF8574A (قيمة نموذجية حسب ورقة البيانات). الأوامر: init() ، backlight() للإضاءة، setCursor(c, r) للعمود c والسطر r (العدّ من 0)، و print().
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
const int SENSOR = A0; // LM35: 10 mV per degree C
const float SET_POINT = 30.0; // [C]
LiquidCrystal_I2C lcd(0x27, 16, 2); // 0x3F on some modules
void setup() {
lcd.init();
lcd.backlight();
}
void loop() {
float t = analogRead(SENSOR) * 500.0 / 1023.0;
bool heat = t < SET_POINT; // heater demand
lcd.setCursor(0, 0); // column 0, row 0
lcd.print("T = "); lcd.print(t, 1);
lcd.print((char)223); lcd.print("C "); // 223 = degree sign
lcd.setCursor(0, 1);
lcd.print("SP = "); lcd.print(SET_POINT, 1);
lcd.print((char)223); lcd.print(heat ? "C ON " : "C OFF");
delay(500);
}الرسمان محسوبان خانة خانة من نفس السلاسل: مثلا N = 50 يعطي T = 50·5001023 = 24.438 °C ، و print(t, 1) يقرّب إلى 24.4. الرمز 223 في جدول حروف HD44780 هو «°». ونكتب مسافات في نهاية السطر: الشاشة لا تمحو ما كُتب سابقا، فلو قصر النصّ (من 100.0 إلى 99.5) لبقي حرف قديم. ولا نستدعي lcd.clear() في كل دورة، فهو يمحو كل الشاشة ونرى رجفة.
צג OLED גרפי 128×64 – شاشة OLED الرسومية 128×64 (Graphic OLED Display)
النقطة (0, 0) في الزاوية العليا اليسرى، x إلى اليمين حتى 127 و y إلى الأسفل حتى 63. المكتبة Adafruit_SSD1306 (مع Adafruit_GFX) ترسم أوّلا في ذاكرة المتحكّم، ثم ترسل الصورة كلّها بـ display(). كل بكسل خانة، فالصورة 128·648 = 1024 بايت: نصف ذاكرة Uno (2048 بايت). المكتبة تحجزها في begin() ، فلا تظهر في تقرير الترجمة، وإذا لم يبق مكان تعيد begin() القيمة false.
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
const int SENSOR = A0; // potentiometer as a level sensor
Adafruit_SSD1306 oled(128, 64, &Wire, -1); // -1: no reset pin
void setup() {
if (!oled.begin(SSD1306_SWITCHCAPVCC, 0x3C))
while (true) {} // no screen or no RAM: stop
}
void loop() {
int pct = map(analogRead(SENSOR), 0, 1023, 0, 100);
int w = map(pct, 0, 100, 0, 124); // bar width [pixels]
oled.clearDisplay();
oled.setTextColor(SSD1306_WHITE);
oled.setTextSize(1); oled.setCursor(0, 0);
oled.print("TANK LEVEL");
oled.setTextSize(2); oled.setCursor(0, 16);
oled.print(pct); oled.print(" %");
oled.drawRect(0, 40, 128, 20, SSD1306_WHITE); // frame
oled.fillRect(2, 42, w, 16, SSD1306_WHITE); // bar
oled.display(); // send the buffer
delay(200);
}الرسم محسوب بكسلا بكسلا من نفس الأوامر. حرف الخطّ الأساسي 5×7 بكسل في خانة 6×8 ، و setTextSize(2) يضاعف الأبعاد. في بعض الوحدات الصفوف الستة عشر العليا صفراء والباقي أزرق، ولذلك العنوان في y < 16.
الدالة map() تحسب بأعداد صحيحة وتحذف الكسر. العمود يبدأ في x = 2 وينتهي في x = 85 ، داخل الإطار.
ממשק קטן: שלושה לחצנים וערך רצוי ב-EEPROM – واجهة صغيرة: ثلاثة أزرار وقيمة مطلوبة في EEPROM (Mini HMI with EEPROM)
في المنظّم الحراري يريد العامل أن يغيّر القيمة المطلوبة (ערך רצוי) بلا حاسوب، وأن تبقى بعد انقطاع الكهرباء. نبني واجهة بثلاثة أزرار UP ، DOWN ، OK، ونصف سلوكها أوّلا بـ مخطّط الحالات (תרשים מצבים)، ثم نكتب البرنامج منه:
- RUN: الشاشة تعرض الحرارة والقيمة المطلوبة. OK ينقل إلى التعديل.
- EDIT: UP و DOWN يغيّران نسخة مؤقّتة spEdit بخطوة 0.5 °C (النجمة في «SP*» تُظهر التعديل)، و OK يحفظ ويعود.
- المهلة: بلا ضغطة 10 ثوانٍ نعود إلى RUN بلا حفظ: قيمة تُركت في منتصف التعديل لا تدخل إلى العملية.
نخزّن القيمة بأعشار الدرجة كعدد صحيح int (بايتان): 25.5 °C تُخزَّن 255. EEPROM.get() تقرأ، و EEPROM.put() تكتب فقط البايتات التي تغيّرت. في الذاكرة الجديدة يُقرأ −1 ، فنفحص المدى ونضع قيمة افتراضية.
#include <Wire.h>
#include <EEPROM.h>
#include <LiquidCrystal_I2C.h>
const int BTN[3] = {2, 3, 4}; // UP, DOWN, OK (to GND)
const int SENSOR = A0, ADDR = 0; // LM35 ; EEPROM address
const int SP_MIN = 100, SP_MAX = 600, STEP = 5; // tenths of C
const unsigned long TIMEOUT = 10000; // ms without a key
LiquidCrystal_I2C lcd(0x27, 16, 2);
int sp, spEdit; // set-point x 10: 255 = 25.5 C
bool editing = false;
unsigned long tKey = 0;
int last[3] = {HIGH, HIGH, HIGH};
bool pressed(int i) { // HIGH -> LOW edge
int now = digitalRead(BTN[i]);
bool edge = (last[i] == HIGH && now == LOW);
last[i] = now;
return edge;
}
void setup() {
Serial.begin(9600);
for (int i = 0; i < 3; i++) pinMode(BTN[i], INPUT_PULLUP);
lcd.init(); lcd.backlight();
EEPROM.get(ADDR, sp);
if (sp < SP_MIN || sp > SP_MAX) sp = 250; // new EEPROM reads -1
Serial.print("SP from EEPROM = "); Serial.println(sp / 10.0, 1);
}
void loop() {
bool up = pressed(0), down = pressed(1), ok = pressed(2);
if (up || down || ok) tKey = millis();
if (!editing) {
if (ok) { editing = true; spEdit = sp; Serial.println("EDIT"); }
} else {
if (up) spEdit = min(spEdit + STEP, SP_MAX);
if (down) spEdit = max(spEdit - STEP, SP_MIN);
if (up || down) {
Serial.print("SP* = "); Serial.println(spEdit / 10.0, 1);
}
if (ok) { // save only on OK
sp = spEdit; editing = false; EEPROM.put(ADDR, sp);
Serial.print("SAVED SP = "); Serial.println(sp / 10.0, 1);
} else if (millis() - tKey > TIMEOUT) {
editing = false; Serial.println("TIMEOUT: no change");
}
}
float t = analogRead(SENSOR) * 500.0 / 1023.0;
lcd.setCursor(0, 0); lcd.print("T = "); lcd.print(t, 1); lcd.print(" C ");
lcd.setCursor(0, 1); lcd.print(editing ? "SP*= " : "SP = ");
lcd.print((editing ? spEdit : sp) / 10.0, 1); lcd.print(" ");
delay(20); // 20 ms sampling: no bounce
}نشغّل المتحكّم لأوّل مرّة (EEPROM جديدة) ونضغط بالترتيب: OK ← UP ← UP ← UP ← DOWN ← OK ← OK ← UP ← انتظار 11 s:
SP from EEPROM = 25.0 EDIT SP* = 25.5 SP* = 26.0 SP* = 26.5 SP* = 26.0 SAVED SP = 26.0 EDIT SP* = 26.5 TIMEOUT: no change
بعد فصل التغذية وإعادتها يطبع البرنامج «SP from EEPROM = 26.0»: القيمة محفوظة. الحلقة تتوقّف 20 ms في كل دورة؛ هذا أطول من ارتداد التلامس فيكفي لإزالة الارتداد، وما زال سريعا جدا للإنسان.
ومع 20 كتابة في اليوم: t = 10000020 = 5000 يوما، أي نحو 13.7 سنة.
لذلك نكتب في EEPROM فقط عند تأكيد الإنسان، وليس في كل دورة من loop().
ממשק אדם-מכונה וממשק מכונה-מכונה – واجهة الإنسان والآلة وواجهة آلة-آلة (HMI and M2M)
الواجهة (ממשק) هي الحدّ الذي تنتقل عبره المعلومات بين طرفين في نظام التحكّم. نصفها بأربعة أسئلة: من الطرفان؟ أيّ معلومات تنتقل وفي أيّ اتّجاه؟ بأيّ وسيلة (أسلاك، جهد، بروتوكول)؟ وبأيّ سرعة وموثوقية؟
| واجهة الإنسان والآلة | واجهة آلة-آلة | |
|---|---|---|
| شكل المعلومة | ألوان، رموز، نصوص، رسوم، أصوات | أعداد وإشارات بحسب بروتوكول |
| السرعة | سرعة الإنسان: أجزاء من الثانية تكفي | من ميكروثوانٍ إلى ثوانٍ |
| أمثلة | المصابيح، العارض، LCD ، OLED ، الأزرار | I2C ، السلك الواحد، حلقة التيار |
لوح اللمس الصناعي (פנל HMI / מסך מגע תעשייתי) شاشة ملوّنة في باب لوحة الكهرباء، موصولة بالـ PLC. عليها رسم مبسّط للآلة تتغيّر ألوانه مع الحالة، أزرار، قيم مطلوبة، وصفحة إنذارات. نظام SCADA (מערכת SCADA – פיקוח ואיסוף נתונים) برنامج في حاسوب بغرفة التحكّم، يجمع البيانات من متحكّمات كثيرة في المصنع أو في محطّات بعيدة، يعرضها، يحفظ سجلّا لها على مرّ الزمن، يدير الإنذارات ويرسل أوامر. التحكّم السريع يبقى في الـ PLC: إذا انقطعت الشبكة تستمرّ الآلة في العمل الآمن.
مبادئ تصميم الواجهة – עקרונות תכנון ממשק:
- الوضوح وردّ الفعل: كل شاشة تجيب على سؤال واحد، والقيم مع وحداتها (°C ، bar)، وكل ضغطة تُرى أو تُسمع.
- ألوان متّسقة: الأحمر للخطر فقط والأخضر للطبيعي فقط، في كل الشاشات والمصابيح. ولا نعتمد على اللون وحده: نضيف نصّا أو رمزا، فبعض الناس لا يميّزون الأحمر من الأخضر.
- تأكيد الأعمال الخطرة: أمر قد يسبّب ضررا («تفريغ الخزّان») يحتاج خطوتين: الأمر ثم «هل أنت متأكّد؟». وإيقاف الطوارئ ليس زرّا على الشاشة أبدا، بل زرّ مستقلّ في دائرة السلامة.
- الإقرار بالإنذارات: إنذار جديد يومض ويُسمع حتى الإقرار، ويقول ماذا حدث، أين، وماذا نفعل. وعدد الإنذارات قليل وبأولويات: مئة إنذار في دقيقة لا يقرؤها أحد.
ملخّص قوانين الفصل:
| القانون | الصيغة |
|---|---|
| مقاومة مصباح البيان | R = VCC − VFIF |
| زمن دورة صوت الطنّان | Tp = 1f |
| القيمة الخام من LM35 إلى درجات | T = N·5001023 |
| رمز الرقم في المصعد المشترك | CA = 127 − CC |
| ذاكرة صورة OLED | buffer = W·H8 |
قاموس المصطلحات – מילון מונחים:
| بالعربية | بالعبرية (كما تظهر في الامتحان) | English |
|---|---|---|
| البيان | חיווי | Indication |
| الإنذار | התרעה | Alarm |
| مصباح البيان | נורית חיווי | Indicator lamp |
| الوميض | הבהוב | Flashing |
| الإقرار بالإنذار | אישור התרעה | Alarm acknowledge |
| العامل على الآلة | מפעיל המכונה | Machine operator |
| الطنّان (البازر) فعّال · سلبي | זמזם אקטיבי · פסיבי | Active · passive buzzer |
| العارض سباعي المقاطع | תצוגת שבעה מקטעים | Seven-segment display |
| المهبط المشترك · المصعد المشترك | קתודה משותפת · אנודה משותפת | Common cathode · common anode |
| المسح المتعدّد (تعدّد الإرسال الزمني) | ריבוב תצוגה | Display multiplexing |
| شاشة الكريستال السائل (LCD) | צג גביש נוזלי | Liquid crystal display |
| ناقل I2C · العنوان | אפיק I2C · כתובת | I2C bus · address |
| شاشة OLED | צג OLED | OLED display |
| القيمة المطلوبة | ערך רצוי | Set-point |
| مخطّط الحالات | תרשים מצבים | State diagram |
| ذاكرة EEPROM | זיכרון EEPROM | EEPROM |
| الواجهة | ממשק | Interface |
| واجهة الإنسان والآلة | ממשק אדם-מכונה | Human-machine interface (HMI) |
| واجهة آلة-آلة | ממשק מכונה-מכונה | Machine-to-machine interface (M2M) |
| لوح اللمس الصناعي | פנל HMI / מסך מגע תעשייתי | Industrial touch panel |
| المتحكّم المنطقي المبرمج | בקר מתוכנת (PLC) | Programmable logic controller |
| نظام SCADA | מערכת SCADA | Supervisory control and data acquisition |
أسئلة للتمرين:
أ. نحسب المقاومة.
ب. نختار القيمة القياسية الأكبر التالية ونحسب التيار الفعلي.
أ. كم صفيرا في الثانية؟
ب. ما نسبة التشغيل؟
ج. نكتب الشرط بـ millis().
أ. نحسب تيار المقطع.
ب. نحسب التيار في COM عند عرض الرقم 8.
ج. هل يمكن وصل COM بطرف من Uno مباشرة؟
أ. ما عرض العمود بالبكسل؟
ب. كم بايتا تحتاج صورة شاشة 128×32؟
أ. بعد كم يوما قد تتلف الخلية؟
ب. نقترح تعديلا في البرنامج.