الحسّاسات والمشغّلات للمتحكّمات · الفصل 5 — حسّاسات درجة الحرارة والرطوبةחיישני טמפרטורה ולחות · 33.102⌂📚🏠
الفصل 5

حسّاسات درجة الحرارة والرطوبة

חיישני טמפרטורה ולחות
الصفّان الحادي عشر والثاني عشر · 6 ساعات تعليمية

درجة الحرارة هي المقدار الذي نقيسه أكثر من أي مقدار آخر في أنظمة التحكّم: في منظّم الحرارة في البيت، في الدفيئة الزراعية، في خزّان الماء الساخن وفي الفرن الصناعي. في هذا الفصل نتعرّف على حسّاسات الحرارة الشائعة وعلى حسّاس الرطوبة: ماذا يقيس كل حسّاس، هل مخرجه تماثلي أم رقمي، ما مدى قياسه، كيف نوصله بالمتحكّم، والبرنامج الذي يقرؤه. في النهاية نقارن بينها ونتعلّم كيف نختار الحسّاس الملائم.

في نهاية هذا الفصل سنعرف أن:
  • نوصل المقاومة الحرارية NTC بمُجزِّء الجهد، ونفهم لماذا تتغيّر القيمة الخام مع الحرارة.
  • نحوّل جهد LM35 إلى درجات، ونقارن دقّة التمييز في Uno (10 خانات) وفي ESP32 (12 خانة).
  • نوصل عدّة حسّاسات DS18B20 على طرف واحد مع مقاومة رفع، ونقرؤها بمكتبة جاهزة.
  • نقرأ الحرارة والرطوبة النسبية من DHT22 مرّة كل ثانيتين على الأقل، ونفحص القراءة الفاشلة.
  • نعرف مبدأ الحسّاس الصناعي PT100، ولماذا نقرؤه في المصنع عبر مرسِل وحلقة تيار.
  • نقارن بين الحسّاسات ونختار الحسّاس الملائم لتطبيق معيّن.

تعرّفوا على الحسّاسات – הכירו את החיישנים:

قبل أن ندرس الحسّاسات واحدا واحدا، هذه كلّ الحسّاسات في الكتاب: الاسم، ماذا يقيس كلّ واحد، ونوع مخرجه. نرى الحسّاس نفسه مرّة أخرى بجانب تعريفه في الفصل الذي يتناوله.

tactile زرّ لحظيضغطة يدرقمي
10k بوتنشيومترموضع الزالقتماثلي
NTC 10kمقاومة حرارية NTCحرارةمقاومة
LM35 + O G LM35حرارةتماثلي
DS18B20 1-Wire DS18B20حرارةرقمي
1 2 3 4 DHT22حرارة ورطوبةرقمي
PT100PT100حرارة صناعيةمقاومة
مقاومة ضوئيةضوءمقاومة
HC-SR04 HC-SR04مسافةرقمي (نبضة)
HC-SR501 PIRحركةرقمي
NO NCمفتاح نهاية المشواروصول إلى موضعتلامس
Pمفتاح ضغطضغط فوق حدّتلامس
FLOATمفتاح العوّامةمستوى سائلتلامس
M18حسّاس اقتراب حثّيمعدن قريبرقمي
CAPحسّاس اقتراب سعويأيّ مادّة قريبةرقمي
OPTحسّاس اقتراب ضوئيجسم يقطع الشعاعرقمي
4-20mAمُرسِل 4–20 mAضغط أو مستوىتيار
ACS712 IP ACS712تيارتماثلي

נגד תלוי-טמפרטורה (NTC) – المقاومة الحرارية NTC (NTC Thermistor)

NTC 10k
المقاومة الحرارية (الثرمستور) (נגד תלוי-טמפרטורה, תרמיסטור): مقاومة تتغيّر قيمتها بشدّة مع درجة الحرارة. في النوع NTC يكون المعامل الحراري سالبا (מקדם טמפרטורה שלילי): كلما ارتفعت درجة الحرارة نقصت المقاومة. هي حسّاس سلبي (חיישן סביל): لا تُنتج جهدا، ولذلك نمرّر فيها تيارا ونقيس الجهد عليها.

الوحدة الشائعة في المختبر مقاومتها 10 kΩ عند 25 °C (قيمة نموذجية حسب ورقة البيانات). العلاقة بين المقاومة ودرجة الحرارة غير خطّية (المنحنى الأيمن). المتحكّم يقيس جهدا لا مقاومة، ولذلك نوصل NTC على التوالي مع مقاومة ثابتة R = 10 kΩ فنحصل على مُجزِّء الجهد (الرسم الأيسر): NTC في الأعلى نحو 5 V ، فيرتفع الجهد في A0 عندما ترتفع الحرارة.

0255075100102030T [°C]R [kΩ]R₀ = 10 kΩ1.49 kΩ
مقاومة NTC (10 kΩ عند 25 °C) مقابل درجة الحرارة
Arduino Uno5VA0GNDNTC10 kΩ@ 25 °CR10 kΩVA0
NTC بين 5V و A0 ، و 10 kΩ بين A0 و GND

الجدول يبيّن السلسلة كلها: الحرارة ترتفع ← مقاومة الحسّاس تقلّ ← الجهد في A0 يرتفع ← القيمة الخام تزداد.

T0 °C25 °C50 °C75 °C100 °C
RNTC33621 Ω10000 Ω3588 Ω1492 Ω698 Ω
VA01.15 V2.5 V3.68 V4.35 V4.67 V
N235512753890956

البرنامج يقرأ القيمة الخام ويحوّلها إلى جهد، ويطبع رسالة خطأ إذا كانت القراءة 0 أو 1023 (سلك مقطوع أو قصر):

قراءة NTC: القيمة الخام والجهد Arduino Uno · ntc_read.ino
const int NTC_PIN = A0;          // NTC to 5V, 10k to GND

void setup() {
  Serial.begin(9600);
}

void loop() {
  int n = analogRead(NTC_PIN);
  float v = n * 5.0 / 1023.0;    // raw value -> volts
  if (n > 0 && n < 1023) {       // 0 or 1023: open or short
    Serial.print("N = "); Serial.print(n);
    Serial.print("  V = "); Serial.print(v, 2);
    Serial.println(" V");
  } else {
    Serial.println("NTC error");
  }
  delay(1000);
}
Serial Monitor · قراءة نموذجية
N = 475  V = 2.32 V
N = 510  V = 2.49 V
N = 537  V = 2.62 V
N = 580  V = 2.83 V

أمسكنا الحسّاس باليد، فارتفعت القيمة الخام والجهد. التحويل الدقيق إلى درجات نأخذه من جدول ورقة البيانات (المقاومة عند كل درجة) أو من مكتبة جاهزة؛ وكثيرا ما يكفي أن نقارن القيمة الخام بعتبة نحدّدها بالتجربة.

سؤال 5.1: في نفس الدائرة قرأ المتحكّم N = 400.
(أ) ما هو الجهد في A0؟
(ب) هل الجو أبرد من 25 °C أم أدفأ؟ نستعين بالجدول.
خطأ شائع: إذا بدّلنا مكاني NTC والمقاومة الثابتة تنقلب العلاقة: تنخفض القراءة عندما ترتفع الحرارة. وخطأ آخر: نحوّل القيمة الخام إلى درجات بقاعدة خطّية بسيطة؛ العلاقة غير خطّية، والتحويل يكون من الجدول أو من المكتبة.
على اللوحات الثلاث: المقاومة الحرارية تُقرأ في مُجزِّء جهد. Uno: المُجزِّء من 5 V. ESP32: المُجزِّء من 3.3 V. الراسبيري باي: المُجزِّء من 3.3 V إلى قناة في MCP3008.

חיישן הטמפרטורה LM35 – حسّاس الحرارة التماثلي LM35 (LM35)

LM35 + O G
حسّاس LM35 (חיישן LM35): دائرة متكاملة فيها حسّاس ودائرة ملاءمة. جهد مخرجها يتناسب خطّيا مع درجة الحرارة بالدرجات المئوية: 10 mV لكل درجة، و 0 V عند 0 °C. هو حسّاس فعّال (חיישן פעיל): نغذّيه فيُخرج جهدا جاهزا للمحوّل التماثلي-الرقمي بدون مُجزِّء.

حسب ورقة البيانات (قيم نموذجية): التغذية من 4 V حتى 30 V ، فنغذّيه بـ 5 V حتى مع ESP32؛ في التوصيل الأساسي يقيس من نحو 2 °C حتى 150 °C ؛ والدقّة نحو ±0.5 °C عند 25 °C في الطراز الأدقّ. جهد المخرج عند 150 °C هو 1.5 V فقط، ولذلك يمكن توصيله بطرف ESP32 مباشرة.

حسّاس LM35 · חיישן LM35
T = Vout10 mV/°C
الرمزالمعنىوحدة القياس
Voutجهد مخرج الحسّاس[mV]
Tدرجة الحرارة[°C]
LM35+VSVOUTGNDArduino Uno5VA1GNDVout10 mV/°C
+VS إلى 5V ، VOUT إلى A1 ، GND إلى GND

البرنامج ينفّذ السلسلة كلها: القيمة الخام ← الجهد ← درجة الحرارة. الجهد بالفولت نضربه في 100 ، لأن 10 mV لكل درجة تعني 100 درجة لكل فولت.

قراءة LM35: من القيمة الخام إلى الدرجات Arduino Uno · lm35_read.ino
const int LM35_PIN = A1;
const float VREF = 5.0;          // Uno: 5 V reference, 10 bits

void setup() {
  Serial.begin(9600);
}

void loop() {
  int n = analogRead(LM35_PIN);
  float v = n * VREF / 1023.0;   // volts
  float t = v * 100.0;           // 10 mV per degree C
  Serial.print("N = "); Serial.print(n);
  Serial.print("  V = "); Serial.print(v * 1000.0, 1);
  Serial.print(" mV  T = "); Serial.print(t, 2);
  Serial.println(" C");
  delay(1000);
}
Serial Monitor · قراءة نموذجية
N = 49  V = 239.5 mV  T = 23.95 C
N = 50  V = 244.4 mV  T = 24.44 C
N = 50  V = 244.4 mV  T = 24.44 C
N = 50  V = 244.4 mV  T = 24.44 C
N = 51  V = 249.3 mV  T = 24.93 C
N = 51  V = 249.3 mV  T = 24.93 C

ارتفعت درجة الحرارة الحقيقية ببطء من 24 °C إلى 25 °C بخطوات 0.2 °C ، لكن القراءة تقفز قفزات من نحو نصف درجة: لا تتغيّر حتى يتغيّر الجهد بخطوة كاملة من خطوات المحوّل. حجم هذه الخطوة نحسبه الآن.

دقّة التمييز: Uno مقابل ESP32 – רזולוציה: Uno מול ESP32:

المحوّل في Uno له 10 خانات، أي 210 = 1024 مستوى، وجهد المرجع 5 V. في ESP32 المحوّل له 12 خانة، أي 212 = 4096 مستوى، وجهد المرجع 3.3 V. أصغر تغيّر في الجهد يراه المحوّل هو جهد المرجع مقسوما على عدد المستويات؛ نقسمه على 10 mV/°C فنحصل على أصغر تغيّر في الحرارة:

دقّة التمييز بالدرجات · רזולוציה
ΔT = Vref2n · 10 mV/°C
الرمزالمعنىوحدة القياس
ΔTأصغر تغيّر في درجة الحرارة تراه القراءة[°C]
Vref , nجهد المرجع للمحوّل، وعدد خاناته[V]
ΔTUno = 51024 · 0.01 = 0.488 °C
ΔTESP32 = 3.34096 · 0.01 = 0.081 °C

في Uno تقفز القراءة بخطوات من نحو نصف درجة؛ في ESP32 الخطوة أصغر بنحو 6 مرّات، لأن عدد المستويات أكبر وجهد المرجع أصغر. هذا حساب نظري: محوّل ESP32 الحقيقي أقلّ دقّة قرب طرفي مداه.

2424.52525.526242526T [°C]Tm [°C]Uno: 10 bit, 5 VESP32: 12 bit, 3.3 V
القراءة Tm مقابل الحرارة الحقيقية T؛ الخط المتقطّع: القراءة المثالية
مثال 5.1
حسّاس LM35 في درجة حرارة 37 °C. نحسب القيمة الخام والقراءة:
(أ) في Uno.
(ب) في ESP32.
الحل:
Vout = 10 mV/°C · 37 = 370 mV

(أ) في Uno (5 V ، Nmax = 1023):

N = Vout·NmaxVref = 0.37 · 10235 ≈ 76 , Tm = 76 · 51023·100 = 37.15 °C

(ب) في ESP32 (3.3 V ، Nmax = 4095):

N = 0.37 · 40953.3 ≈ 459 , Tm = 459 · 3.34095·100 = 36.99 °C
NUno = 76 , NESP32 = 459
سؤال 5.2: في Uno قرأ البرنامج القيمة الخام N = 61.
(أ) ما هو جهد الحسّاس؟
(ب) ما هي درجة الحرارة؟
(ج) ما هي القيمة الخام في نفس الحرارة في ESP32؟
خطأ شائع: LM35 الموصول بالعكس يسخن بسرعة وقد يتلف: نتحقّق من ترتيب الأطراف حسب ورقة البيانات قبل التغذية. وخطأ ثانٍ: نسيان الضرب في 100 ، فنطبع 0.25 بدل 25 °C.
على اللوحات الثلاث: Uno: مباشرة إلى A0. ESP32: نغذّيه من 5 V (يحتاج إلى 4 V على الأقل)، ومخرجه أقل من 1.5 V فلا خطر على الطرف، ودقّة التمييز أفضل. الراسبيري باي: التغذية من 5 V والمخرج عبر MCP3008 (البند 4.6).
▶تجربة حية — حسّاس LM35مواصفات LM35، رسم التوصيل وبرنامج القراءة، مع الفخّ الشائع عند العمل مع ESP32.
⚠
المختبر غير متاح الآن. المادة في هذا الفصل كاملة من دونه — نواصل القراءة، ونعود إلى التجربة لاحقا أو نفتحها مباشرة من الرابط الذي تحت الإطار.
https://fahed-lab.com/micro/sensors_guide#lm35
نفتح المختبر في صفحة مستقلة ↗ fahed-lab.com/micro/sensors_guide#lm35

חיישן הטמפרטורה הספרתי DS18B20 – حسّاس الحرارة الرقمي DS18B20 (DS18B20, 1-Wire)

DS18B20 1-Wire
حسّاس DS18B20 (חיישן DS18B20): حسّاس حرارة رقمي: في داخله محوّل، وهو يرسل درجة الحرارة كعدد على ناقل السلك الواحد (אפיק ‎1-Wire). لكل حسّاس عنوان (כתובת) ثابت طوله 64 خانة يُكتب فيه عند التصنيع، ولذلك نستطيع توصيل عدّة حسّاسات على نفس الطرف.

حسب ورقة البيانات (قيم نموذجية): مدى القياس من −55 °C حتى +125 °C ، والدقّة ±0.5 °C بين −10 °C و +85 °C ، والتغذية من 3.0 V حتى 5.5 V ؛ يُباع أيضا في غلاف معدني مقاوم للماء. دقّة التمييز تصل إلى 0.0625 °C ، وعندها يحتاج الحسّاس حتى 750 ms ليُكمل القياس (زمن التحويل، זמן המרה).

خط البيانات DQ مشترك لكل الحسّاسات، وكل حسّاس يستطيع فقط سحبه إلى 0 V ، ولذلك نضيف مقاومة رفع 4.7 kΩ بين DQ و 5 V (القيمة المقترحة في ورقة البيانات). ترتيب الأطراف في الغلاف TO-92: GND ، DQ ، VDD.

Arduino Uno5VD2GND5VDQGND4.7 kΩGNDDQVDDDS18B20 #0GNDDQVDDDS18B20 #1…
حسّاسان DS18B20 على نفس الناقل: كل الأطراف DQ إلى D2 ، ومقاومة رفع واحدة 4.7 kΩ إلى 5 V

نستعمل المكتبتين OneWire (البروتوكول) و DallasTemperature (أوامر الحسّاس). الأمر requestTemperatures() يبدأ القياس في كل الحسّاسات معا؛ بعده يجد البرنامج عنوان كل حسّاس بالدالة getAddress() ، ويطبعه بالست عشري، ويقرأ حرارته حسب العنوان:

قراءة كل الحسّاسات على الناقل حسب العنوان Arduino Uno · ds18b20_read.ino
#include <OneWire.h>
#include <DallasTemperature.h>
const int BUS_PIN = 2;           // 1-Wire bus, 4.7k pull-up to 5V
OneWire bus(BUS_PIN);
DallasTemperature sensors(&bus);
DeviceAddress addr;

void setup() {
  Serial.begin(9600);
  sensors.begin();
  sensors.setResolution(12);     // 0.0625 C, up to 750 ms
}

void loop() {
  sensors.requestTemperatures(); // all sensors convert together
  for (int i = 0; i < sensors.getDeviceCount(); i++) {
    sensors.getAddress(addr, i);
    for (int j = 0; j < 8; j++) {
      if (addr[j] < 16) Serial.print("0");
      Serial.print(addr[j], HEX);
    }
    Serial.print("  T = "); Serial.print(sensors.getTempC(addr), 2);
    Serial.println(" C");
  }
  delay(2000);
}
Serial Monitor · قراءة نموذجية
283A7F460C00006C  T = 21.37 C
28912B580B000015  T = 48.94 C
283A7F460C00006C  T = 21.44 C
28912B580B000015  T = 46.50 C

الحسّاس الأول في هواء الغرفة والثاني في ماء ساخن يبرد. كل سطر يبدأ بعنوان الحسّاس (العناوين هنا مثال)، وهكذا نعرف أي قراءة تعود لأي حسّاس.

سؤال 5.3: نريد أن نقرأ أربعة حسّاسات DS18B20.
(أ) كم طرفا من المتحكّم نحتاج؟
(ب) كم مقاومة رفع، وما قيمتها؟
(ج) هل يطول زمن القياس أربع مرّات لأن على الناقل أربعة حسّاسات؟
خطأ شائع: بدون مقاومة الرفع لا يجد البرنامج أي حسّاس، أو تُرجع المكتبة −127 (الثابت DEVICE_DISCONNECTED_C). وقراءة 85 °C بالضبط هي القيمة التي يبدأ بها الحسّاس بعد التغذية (حسب ورقة البيانات): القياس لم يكتمل أو التغذية ضعيفة. وخطأ ثالث: رقم الحسّاس i يتعلّق بترتيب العناوين لا بمكان الحسّاس على الكابل؛ لنعرف أي حسّاس في الماء نسجّل عنوانه مرّة واحدة ونقرأ حسبه.
تحذير: مع ESP32 نوصل مقاومة الرفع إلى 3.3 V لا إلى 5 V ، لأن أطراف ESP32 لا تتحمّل 5 V.
على اللوحات الثلاث: يتّصل مباشرة باللوحات الثلاث، والمقاومة الساحبة 4.7 kΩ إلى جهد اللوحة: 5 V في Uno ، و 3.3 V في ESP32 والراسبيري باي. في الراسبيري باي نفعّل 1-Wire ونقرأ الحرارة ببايثون (البند 4.6).
▶تجربة حية — حسّاس DS18B20توصيل DS18B20 مع مقاومة الرفع، وبرنامج قراءة مُرّ بالترجمة.
⚠
المختبر غير متاح الآن. المادة في هذا الفصل كاملة من دونه — نواصل القراءة، ونعود إلى التجربة لاحقا أو نفتحها مباشرة من الرابط الذي تحت الإطار.
https://fahed-lab.com/micro/sensors_guide#ds18b20
نفتح المختبر في صفحة مستقلة ↗ fahed-lab.com/micro/sensors_guide#ds18b20

חיישן טמפרטורה ולחות DHT22 – حسّاس الحرارة والرطوبة DHT22 (DHT22 / AM2302)

1 2 3 4
الرطوبة النسبية (לחות יחסית): نسبة بخار الماء الموجود في الهواء إلى أكبر كمية بخار يستطيع الهواء أن يحملها في نفس درجة الحرارة، بالنسبة المئوية [%]. عند 100 % يكون الهواء مشبعا ويبدأ التكاثف. الهواء الدافئ يحمل بخارا أكثر، ولذلك تتعلّق الرطوبة النسبية بدرجة الحرارة.

DHT22 (ويُسمّى أيضا AM2302) حسّاس رقمي فيه عنصر سعوي للرطوبة، مقاومة حرارية للحرارة، ومعالج صغير يرسل القياسين على خط بيانات واحد ببروتوكول خاص به (ليس ناقل السلك الواحد). يعمل بـ 3.3 V وبـ 5 V. أطرافه الأربعة: VDD ، DATA ، NC (غير موصول) ، GND. على خط DATA نضع مقاومة رفع؛ في الوحدات الجاهزة ذات الأطراف الثلاثة تكون مركّبة على اللوحة.

الخاصيةالحرارةالرطوبة النسبية
مدى القياس−40 حتى 80 °C0 حتى 100 %
الدقّة±0.5 °C±2 %
دقّة التمييز0.1 °C0.1 %
أقصر زمن بين قراءتين2 s2 s
قيم نموذجية حسب ورقة البيانات
DHT22VDDDATANCGNDArduino Uno5VD4GND10 kΩ
DATA إلى D4 ، ومقاومة رفع 10 kΩ

المكتبة DHT sensor library تتولّى البروتوكول، والدالتان readTemperature() و readHumidity() تُرجعان العددين. مع كل قراءة يرسل الحسّاس بايت فحص، والمكتبة تتحقّق منه؛ عندما تفشل القراءة تُرجع الدالة NaN («ليس عددا»)، ونفحصها بالدالة isnan(). البرنامج يقرأ كل 2.5 s بواسطة millis() بدون delay()، فتبقى الحلقة حرّة لأعمال أخرى:

قراءة DHT22 مرّة كل 2.5 s مع فحص القراءة الفاشلة Arduino Uno · dht22_millis.ino
#include <DHT.h>

const int DHT_PIN = 4;
const unsigned long PERIOD = 2500;   // datasheet: at least 2 s
DHT dht(DHT_PIN, DHT22);
unsigned long last = 0;

void setup() {
  Serial.begin(9600);
  dht.begin();
}

void loop() {
  if (millis() - last < PERIOD) return;
  last = millis();
  float h = dht.readHumidity();
  float t = dht.readTemperature();   // degrees C
  Serial.print("t = "); Serial.print(last / 1000.0, 1);
  if (isnan(h) || isnan(t)) {
    Serial.println(" s  DHT22 read error");
    return;
  }
  Serial.print(" s  T = "); Serial.print(t, 1);
  Serial.print(" C  RH = "); Serial.print(h, 1);
  Serial.println(" %");
}
Serial Monitor · قراءة نموذجية
t = 2.5 s  T = 23.4 C  RH = 48.7 %
t = 5.0 s  T = 23.6 C  RH = 61.2 %
t = 7.5 s  T = 23.9 C  RH = 74.8 %
t = 10.0 s  T = 23.8 C  RH = 66.0 %
t = 12.5 s  T = 23.6 C  RH = 57.3 %

نفخنا على الحسّاس بعد القراءة الأولى: الرطوبة قفزت ثم عادت ببطء، لأن زمن الاستجابة (זמן תגובה) لعنصر الرطوبة أطول بكثير منه لعنصر الحرارة.

خطأ شائع: قراءة DHT22 أسرع من مرّة كل ثانيتين تُرجع قيمة قديمة أو NaN، وبرنامج لا يفحص isnan() قد يشغّل مروحة حسب «عدد» لا معنى له. وخطأ آخر: حسّاسا DHT22 على نفس الطرف؛ بروتوكوله لا يعرف العناوين، ولكل حسّاس طرف خاص به.
تحذير: مع ESP32 نغذّي الحسّاس ومقاومة الرفع بـ 3.3 V ، حتى لا يصل 5 V إلى طرف ESP32 عبر مقاومة الرفع.
على اللوحات الثلاث: يتّصل مباشرة باللوحات الثلاث. في ESP32 والراسبيري باي نغذّيه من 3.3 V ونصل المقاومة الساحبة إلى 3.3 V. في الراسبيري باي نقرؤه بمكتبة بايثون (البند 4.6).
▶تجربة حية — حسّاس DHT22مواصفات DHT22، رسم التوصيل وبرنامج القراءة.
⚠
المختبر غير متاح الآن. المادة في هذا الفصل كاملة من دونه — نواصل القراءة، ونعود إلى التجربة لاحقا أو نفتحها مباشرة من الرابط الذي تحت الإطار.
https://fahed-lab.com/micro/sensors_guide#dht22
نفتح المختبر في صفحة مستقلة ↗ fahed-lab.com/micro/sensors_guide#dht22

חיישן טמפרטורה תעשייתי: PT100 – حسّاس حرارة صناعي: PT100 (Industrial Sensor: PT100)

في المصنع نقيس حرارة أفران، أنابيب بخار وزيوت ساخنة، وغالبا على بعد عشرات الأمتار من لوحة التحكّم. هناك نستعمل غالبا حسّاس المقاومة البلاتينية.

PT100
حسّاس المقاومة البلاتينية (גשש התנגדות, PT100): سلك أو طبقة رقيقة من البلاتين تزداد مقاومتها بشكل شبه خطّي مع درجة الحرارة. الاسم PT100 معناه بلاتين (Pt) مقاومته 100 Ω عند 0 °C.

المبدأ بسيط: كلما ارتفعت الحرارة زادت المقاومة، عكس NTC. لكن التغيّر صغير: عند 100 °C تكون المقاومة نحو 138.5 Ω (قيمة نموذجية حسب المواصفة)، أي أقل من نصف أوم لكل درجة. لذلك لا نوصل PT100 بطرف المتحكّم مباشرة، ونوصله بثلاثة أسلاك أو أربعة حتى لا تُضاف مقاومة الأسلاك الطويلة إلى القراءة.

كيف نقرؤه؟ بجانب الحسّاس نركّب مرسِلا (משדר) يحوّل الحرارة إلى تيار في حلقة التيار 4–20 mA (לולאת זרם): مثلا 4 mA عند 0 °C و 20 mA عند 200 °C (المدى يُضبط في المرسِل). التيار لا يتأثّر بطول الأسلاك، والمتحكّم يقرؤه عبر مقاومة قياس. حلقة التيار وتوصيلها بالمتحكّم نتعلّمهما في الفصل 8.

سؤال 5.4: حسّاس PT100:
(أ) ما مقاومته عند 0 °C؟
(ب) قيست مقاومته فكانت أكبر من 100 Ω : هل الحرارة فوق الصفر أم تحته؟
(ج) لماذا نقرؤه في المصنع عبر مرسِل وحلقة تيار؟
تحذير: الحسّاسات الصناعية تُركَّب على أفران وأنابيب ساخنة، وأحيانا في لوحات فيها جهد الشبكة 230 V. نعمل في المختبر فقط مع وحدات جاهزة ومُصادق عليها وتحت إشراف المعلّم، ولا نفتح أبدا لوحة موصولة بالشبكة. رأس الحسّاس قد يبقى ساخنا بعد إخراجه من الفرن: ننتظر حتى يبرد.

השוואה ובחירת חיישן – مقارنة واختيار الحسّاس (Comparison)

الحسّاسالمخرجمدى القياسالدقّةاستعمال نموذجي
NTCمقاومة (مُجزِّء جهد)حسب الطرازحسب الطرازأجهزة منزلية، منظّم حرارة بسيط
LM35جهد تماثلي 10 mV/°C2 حتى 150 °Cمن ±0.5 حتى ±1 °C حسب الطرازحرارة الغرفة بقراءة تماثلية
DS18B20رقمي، ناقل السلك الواحد−55 حتى 125 °C±0.5 °Cعدّة نقاط قياس، حرارة الماء
DHT22رقمي، خط خاص−40 حتى 80 °C ؛ 0 حتى 100 %±0.5 °C ؛ ±2 %دفيئة، غرفة، محطة طقس
PT100مقاومة، تُقرأ عبر مرسِل تيار−200 حتى 850 °Cحسب فئة الدقّةأنابيب وخزّانات في المصنع
مزدوج حراري Kجهد صغير جدا (عبر وحدة تحويل)أكثر من 1000 °Cنحو درجتينأفران وغلايات

الأرقام نموذجية حسب أوراق البيانات، وتختلف بين الطرازات والصانعين. المزدوج الحراري (צמד תרמי) في السطر الأخير سلكان من معدنين مختلفين ملحومان في طرف واحد؛ يعطي جهدا صغيرا جدا يتعلّق بالحرارة، ولذلك يُقرأ دائما عبر وحدة تحويل أو مرسِل. عند الاختيار نسأل: ما مدى القياس؟ هل نحتاج إلى الرطوبة؟ كم نقطة قياس؟ وهل البيئة صناعية؟

بإيجاز: للحرارة مع الرطوبة في غرفة أو دفيئة — DHT22؛ لعدّة نقاط قياس على كابل واحد أو في الماء — DS18B20؛ لقراءة تماثلية بسيطة بدون مكتبة — LM35؛ للأرخص والأصغر — NTC؛ وللعمليات الصناعية والدرجات العالية — PT100 حتى بضع مئات الدرجات، والمزدوج الحراري للأفران.

سؤال 5.5: لكل تطبيق نختار حسّاسا ونعلّل:
(أ) قياس حرارة الماء في خمسة أحواض سمك بمتحكّم واحد.
(ب) تشغيل مروحة عندما ترتفع الرطوبة في الحمّام.
(ج) قياس حرارة فرن خزف تصل إلى 900 °C.

ملخّص قوانين الفصل:

القانونالصيغة
الجهد من القيمة الخامV = N·VrefNmax
حسّاس LM35T = Vout10 mV/°C
دقّة التمييز بالدرجات (LM35)ΔT = Vref2n · 10 mV/°C

قاموس المصطلحات – מילון מונחים:

بالعربيةبالعبرية (كما تظهر في الامتحان)English
المقاومة الحرارية (الثرمستور)נגד תלוי-טמפרטורה (תרמיסטור)NTC thermistor
المعامل الحراري السالبמקדם טמפרטורה שליליNegative temperature coefficient
حسّاس فعّال · حسّاس سلبيחיישן פעיל · חיישן סבילActive · passive sensor
جهد المرجعמתח ייחוסReference voltage
دقّة التمييزרזולוציה (הפרדה)Resolution
ناقل السلك الواحدאפיק ‎1-Wire1-Wire bus
العنوانכתובתAddress (ROM code)
مقاومة الرفع (pull-up)נגד משיכה למעלהPull-up resistor
زمن التحويلזמן המרהConversion time
الرطوبة النسبيةלחות יחסיתRelative humidity
زمن الاستجابةזמן תגובהResponse time
حسّاس المقاومة البلاتينيةגשש התנגדות (PT100)RTD, PT100
المرسِلמשדרTransmitter
حلقة التيار 4–20 mAלולאת זרם 4–20 mA4–20 mA current loop
المزدوج الحراريצמד תרמיThermocouple
المكتبةספרייהLibrary

أسئلة للتمرين:

1.
المقاومة الحرارية NTC موصولة في الأعلى (نحو 5 V) ، والمقاومة الثابتة 10 kΩ نحو الأرضي. ترتفع درجة الحرارة. ماذا يحدث
(أ) لمقاومة الحسّاس؟
(ب) للجهد في A0؟
(ج) للقيمة الخام؟
الإجابات: (أ) تقلّ (ب) يرتفع (ج) تزداد
2.
يطبع البرنامج ntc_read القيمة الخام N = 700.
(أ) نحسب الجهد في A0.
(ب) هل الحرارة أعلى من 25 °C أم أقل؟ (عند 25 °C تكون N = 512.)
الإجابات: (أ) VA0 ≈ 3.42 V (ب) أعلى، لأن القيمة الخام أكبر
3.
البرنامج ntc_read يطبع NTC error إذا كانت القيمة الخام 0 أو 1023.
(أ) انقطع سلك NTC: ما هو الجهد في A0؟
(ب) حدث قصر بين طرفي NTC: ما هي القيمة الخام؟
الإجابات: (أ) 0 V ، لأن المقاومة الثابتة تسحب A0 إلى الأرضي، فتكون N = 0 ويُطبع NTC error (ب) A0 موصول بـ 5 V ، فتكون N = 1023 ويُطبع NTC error أيضا
4.
حسّاس LM35 في حرارة 36.5 °C موصول بـ Uno. نحسب
(أ) جهد المخرج،
(ب) القيمة الخام،
(ج) القراءة بالدرجات.
الإجابات: (أ) V = 365 mV (ب) N ≈ 75 (ج) Tm ≈ 36.7 °C
5.
نوصل LM35 بـ ESP32 الذي فيه محوّل من 12 خانة وجهد مرجع 3.3 V.
(أ) كم مستوى في المحوّل؟
(ب) نحسب دقّة التمييز النظرية بالدرجات.
الإجابات: (أ) 212 = 4096 (ب) ΔT = 3.34096 · 0.01 ≈ 0.081 °C
6.
قرأ ESP32 من LM35 القيمة الخام N = 372. نحسب
(أ) الجهد،
(ب) درجة الحرارة.
الإجابات: (أ) V ≈ 299.8 mV (ب) T ≈ 30 °C
7.
نغذّي LM35 بـ 5 V. لماذا يمكن مع ذلك توصيل مخرجه بطرف ESP32 الذي لا يتحمّل 5 V؟
الإجابات: لأن جهد المخرج عند 150 °C هو 1.5 V فقط، أقل من 3.3 V
8.
على ناقل DS18B20 ثلاثة حسّاسات، والبرنامج يطبع −127 لكل الحسّاسات. ما هو السبب المحتمل؟ وماذا تعني القراءة 85 °C؟
الإجابات: الأرجح أن مقاومة الرفع 4.7 kΩ غير موصولة أو خط DQ مقطوع؛ 85 °C هي قيمة البدء بعد التغذية: القياس لم يكتمل
9.
نقارن بين LM35 و DS18B20.
(أ) أيّهما يُقرأ بالدالة analogRead() وأيّهما بمكتبة؟
(ب) أيّهما يسمح بعدّة حسّاسات على طرف واحد، ولماذا؟
الإجابات: (أ) LM35 تماثلي ويُقرأ بـ analogRead() ؛ DS18B20 رقمي ويُقرأ بمكتبة (ب) DS18B20، لأن لكل حسّاس عنوانا خاصا
10.
برنامج يقرأ DHT22 كل 500 ms.
(أ) ما المشكلة؟
(ب) كم قراءة صحيحة في الدقيقة على الأكثر يسمح بها الحسّاس؟
الإجابات: (أ) القراءة أسرع من الحدّ الأدنى 2 s فتعود قيم قديمة أو NaN (ب) 30 قراءة
11.
نريد قياس الحرارة والرطوبة في غرفتين بحسّاسَي DHT22 ومتحكّم واحد. كم طرف بيانات نحتاج؟ لماذا؟
الإجابات: طرفين: بروتوكول DHT22 لا يعرف العناوين، ولكل حسّاس طرف خاص به
12.
نختار حسّاسا من جدول المقارنة ونعلّل:
(أ) حرارة زيت في أنبوب نحو 180 °C على بعد 50 m من لوحة التحكّم.
(ب) فرن صهر زجاج حرارته نحو 1100 °C.
الإجابات: (أ) PT100 مع مرسِل 4–20 mA: التيار لا يتأثّر بطول الأسلاك (ب) مزدوج حراري: وحده يقيس فوق 1000 °C
الإجابات النهائية لأسئلة الفصل
5.1 (أ) VA0 ≈ 1.96 V (ب) أبرد، لأن القيمة الخام أصغر من 512 (قيمتها عند 25 °C)
5.2 (أ) V ≈ 298.1 mV (ب) T ≈ 29.8 °C (ج) N ≈ 370
5.3 (أ) طرفا واحدا (ب) مقاومة واحدة 4.7 kΩ (ج) لا: الأمر requestTemperatures() يبدأ القياس في كل الحسّاسات معا
5.4 (أ) 100 Ω (ب) فوق الصفر، لأن المقاومة تزداد مع الحرارة (ج) التغيّر في المقاومة صغير، والتيار لا يتأثّر بطول الأسلاك
5.5 (أ) DS18B20 مقاوم للماء: خمسة حسّاسات على طرف واحد (ب) DHT22 (ج) مزدوج حراري مع وحدة تحويل
لوحة القوانين: كل قوانين هذا الفصل مجموعة مع رسومها وجداول رموزها في الفصل 15 — لوحة القوانين الشاملة. (נוסחאון הספר)