חיישנים ומפעילים למיקרו-בקרים · פרק 5 — חיישני טמפרטורה ולחותסמלי מקצוע 33.102 ו-33.002⌂📚🏠
פרק 5

חיישני טמפרטורה ולחות

כיתות י״א–י״ב · 6 שעות לימוד

הטמפרטורה היא הגודל שמודדים יותר מכל גודל אחר במערכות בקרה: בתרמוסטט בבית, בחממה, בדוד המים החמים ובתנור התעשייתי. בפרק זה נכיר את חיישני הטמפרטורה הנפוצים ואת חיישן הלחות: מה כל חיישן מודד, האם המוצא שלו תקבילי או ספרתי, מהו תחום המדידה שלו, כיצד מחברים אותו לבקר, ואת הסקיצה שקוראת אותו. בסוף נשווה ביניהם ונלמד כיצד בוחרים את החיישן המתאים.

בסוף הפרק הזה נדע:
  • נחבר נגד תלוי-טמפרטורה (NTC) במחלק מתח, ונבין מדוע הערך הגולמי משתנה עם הטמפרטורה.
  • נמיר את המתח של LM35 למעלות, ונשווה את הרזולוציה ב-Uno (10 סיביות) וב-ESP32 (12 סיביות).
  • נחבר כמה חיישני DS18B20 להדק אחד עם נגד משיכה למעלה, ונקרא אותם בעזרת ספרייה מוכנה.
  • נקרא טמפרטורה ולחות יחסית מ-DHT22 לכל היותר פעם בשתי שניות, ונבדוק קריאה כושלת.
  • נכיר את העיקרון של החיישן התעשייתי PT100, ונבין מדוע במפעל קוראים אותו דרך משדר ולולאת זרם.
  • נשווה בין החיישנים ונבחר את החיישן המתאים ליישום נתון.

הכירו את החיישנים:

לפני שנלמד על החיישנים אחד אחד, הנה כל החיישנים שבספר: השם, מה כל אחד מודד ומה סוג המוצא שלו. את אותו חיישן נראה שוב ליד ההגדרה שלו בפרק שעוסק בו.

tactile לחצן רגעילחיצהספרתי
10k פוטנציומטרמיקום הזרועתקבילי
NTC 10kנגד תלוי-טמפרטורהטמפרטורההתנגדות
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 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 + O G
חיישן 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
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 יש 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, 1-Wire)

DS18B20 1-Wire
חיישן 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 / AM2302)

1 2 3 4
לחות יחסית: היחס בין כמות אדי המים שבאוויר לבין הכמות הגדולה ביותר של אדים שהאוויר יכול להכיל באותה טמפרטורה, באחוזים [%]. ב-100 % האוויר רווי ומתחילה התעבות. אוויר חם מכיל יותר אדים, ולכן הלחות היחסית תלויה בטמפרטורה.

DHT22 (נקרא גם AM2302) הוא חיישן ספרתי שיש בו רכיב קיבולי ללחות, נגד תלוי-טמפרטורה לטמפרטורה, ומעבד קטן ששולח את שתי המדידות על קו נתונים אחד, בפרוטוקול משלו (לא אפיק ‎1-Wire). הוא פועל ב-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 (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ספרתי, אפיק ‎1-Wire−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 resistorمقاومة الرفع (pull-up)
זמן המרהConversion timeزمن التحويل
לחות יחסיתRelative humidityالرطوبة النسبية
זמן תגובהResponse timeزمن الاستجابة
גשש התנגדות (PT100)RTD, PT100حسّاس المقاومة البلاتينية
משדרTransmitterالمرسِل
לולאת זרם 4–20 mA4–20 mA current loopحلقة التيار 4–20 mA
צמד תרמי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 — נוסחאון הספר.