Αισθητήρες θερμοκρασίας TMP36 και LM35

Οι TMP36 και LM35 είναι αναλογικοί αισθητήρες θερμοκρασίας υπό μορφή ολοκληρωμένου κυκλώματος συσκευασίας ΤΟ-92. . Μεταφράζουν τη θερμοκρασία του περιβάλλοντος σε ηλεκτρική τάση, με γραμμικό τρόπο, η οποία μπορεί να διαβαστεί εύκολα από έναν μικροελεγκτή, όπως το Arduino. Και οι δύο αισθητήρες δίνουν κλίμακα 10 mV ανά °C, όμως διαφέρουν κυρίως στην τάση τροφοδοσίας, στο σημείο αναφοράς της εξόδου και στη δυνατότητα μέτρησης αρνητικών θερμοκρασιών.

Οι δύο αισθητήρες TMP36 και LM35 ανήκουν στην κατηγορία των αναλογικών αισθητήρων θερμοκρασίας. Δεν επιστρέφουν απευθείας έναν ψηφιακό αριθμό, όπως ένας αισθητήρας DHT22 ή DS18B20, αλλά παράγουν μια αναλογική τάση στην έξοδό τους.

Για παράδειγμα:

  • Ο LM35 παράγει 250 mV στους 25 °C.
  • Ο TMP36 παράγει 750 mV στους 25 °C.
  • Η μεταβολή της τάσης και στους δύο είναι 10 mV για κάθε αύξηση της θερμοκρασίας κατά 1 °C.

Η αναλογική τάση οδηγείται σε μία αναλογική είσοδο του Arduino, όπως η A0. Ο μετατροπέας ADC του Arduino μετατρέπει την τάση σε αριθμητική τιμή, την οποία στη συνέχεια ο κώδικας μετατρέπει σε θερμοκρασία.

Ο LM35 είναι ένας αισθητήρας σχεδιασμένος ώστε η έξοδός του να είναι άμεσα ανάλογη με τη θερμοκρασία σε βαθμούς Κελσίου. Η βασική σχέση λειτουργίας του είναι:

VOUT​ = (10 mV/∘C) × T

Παραδείγματα:

  • στους 0 °C η έξοδος είναι 0 V,
  • στους 25 °C η έξοδος είναι 0,25 V,
  • στους 100 °C η έξοδος είναι 1 V.

Η Texas Instruments αναφέρει για τον LM35 εύρος τροφοδοσίας περίπου 4 έως 30 V, περιοχή λειτουργίας έως 150 °C, καθώς και τυπική ακρίβεια ±0,25 °C σε θερμοκρασία δωματίου και ±0,75 °C σε ολόκληρο το εύρος −55 έως 150 °C. Οι ακριβείς προδιαγραφές εξαρτώνται από την έκδοση του εξαρτήματος.

Ο TMP36 είναι αισθητήρας χαμηλής τάσης και έχει σχεδιαστεί για εύκολη χρήση σε κυκλώματα με τροφοδοσία 3,3 V ή 5 V. Λειτουργεί με τροφοδοσία περίπου 2,7 έως 5,5 V και λειτουργεί για θερμοκρασίες από −40 έως +125 °C.

Η βασική του διαφορά από τον LM35 είναι ότι διαθέτει εσωτερική μετατόπιση τάσης 500 mV. Επομένως, η έξοδος δεν είναι 0 V στους 0 °C, αλλά περίπου 0,5 V.

Η σχέση του TMP36 είναι:

 VOUT​ = 0,5 V+(10 mV/∘C) × T

ή, λύνοντας ως προς τη θερμοκρασία:

T(°C)=(VOUT​−0,5​)/0,01

Παραδείγματα:

  • −10 °C → έξοδος περίπου 0,4 V,
  • 0 °C → έξοδος περίπου 0,5 V,
  • 25 °C → έξοδος περίπου 0,75 V,
  • 50 °C → έξοδος περίπου 1,0 V,
  • 100 °C → έξοδος περίπου 1,5 V.

Η μετατόπιση των 500 mV επιτρέπει στον TMP36 να αναπαριστά αρνητικές θερμοκρασίες με θετική τάση εξόδου. Αυτό είναι ιδιαίτερα χρήσιμο επειδή οι συνηθισμένες αναλογικές είσοδοι του Arduino δεν μπορούν να μετρήσουν αρνητική τάση. Η τυπική ακρίβεια του TMP36 είναι περίπου ±1 °C στους 25 °C και περίπου ±2 °C σε μεγαλύτερο εύρος θερμοκρασιών.

Η λειτουργία των αισθητήρων βασίζεται στις ιδιότητες των ημιαγωγών και, ειδικότερα, στη μεταβολή της τάσης μιας επαφής pn ή μιας διάταξης παρόμοιας με δίοδο όταν μεταβάλλεται η θερμοκρασία.

Σε μια δίοδο πυριτίου, η τάση στα άκρα της μεταβάλλεται με τη θερμοκρασία. Το ολοκληρωμένο κύκλωμα στο εσωτερικό του αισθητήρα χρησιμοποιεί τρανζίστορ, διόδους, πηγές ρεύματος και ενισχυτικά στάδια για να ανιχνεύσει αυτή τη μεταβολή. Στη συνέχεια, το κύκλωμα τη μετατρέπει σε τάση με γραμμική σχέση ως προς τους βαθμούς Κελσίου.

Με απλουστευμένο τρόπο, η διαδικασία είναι η εξής:

  1. Ένα ή περισσότερα στοιχεία ημιαγωγών επηρεάζονται από τη θερμοκρασία.
  2. Η εσωτερική τάση τους μεταβάλλεται.
  3. Το ολοκληρωμένο κύκλωμα ενισχύει και προσαρμόζει αυτή τη μεταβολή.
  4. Η έξοδος διαμορφώνεται ώστε να μεταβάλλεται κατά 10 mV για κάθε 1 °C.
  5. Το Arduino μετρά την τάση και υπολογίζει τη θερμοκρασία.

Ο αισθητήρας δεν χρειάζεται εξωτερικό θερμίστορ ή πολύπλοκο κύκλωμα μέτρησης. Παρέχει απευθείας αναλογική τάση, γεγονός που τον καθιστά κατάλληλο για εκπαιδευτικές κατασκευές και απλά συστήματα ελέγχου.

Οι διαφορές των αισθητηρίων θερμοκρασίας LM35 και TMP36 συνοψίζονται στον ακόλουθο πίνακα:

ΧαρακτηριστικόLM35TMP36
Τύπος εξόδουΑναλογικήΑναλογική
Κλίμακα εξόδου10 mV/°C10 mV/°C
Έξοδος στους 0°C0 V0,5 V
Έξοδος στους 25°C0,25 V0,75 V
Τροφοδοσία4 έως 30V2,7 έως 5,5V
Ονομαστικό εύρος-55 έως 150°C ανά έκδοση-40 έως 125 °C
Μέτρηση αρνητικών θερμοκρασιών με ArduinoΔύσκολη χωρίς πρόσθετο κύκλωμαΕυκολότερη
Καταλληλότητα για συστήματα 3,3VΠεριορισμένηΠολύ καλή
Τύπος υπολογισμούT = VOUT​/0,01T = (VOUT​ – 0,5) / 0,01

Οι τιμές του πίνακα είναι γενικές και πρέπει να επιβεβαιώνονται από το datasheet της συγκεκριμένης έκδοσης και συσκευασίας. Για παράδειγμα, ορισμένες εκδόσεις LM35 έχουν διαφορετικό εύρος θερμοκρασίας ή διαφορετικές ανοχές.

Οι αισθητήρες διατίθενται συχνά σε περίβλημα TO-92 με τρεις ακροδέκτες, οι οποίες όταν κοιτάμε το εξάρτημα από την επίπεδη πλευρά, με τα ποδαράκια προς τα κάτω, η σειρά των ακροδεκτών είναι:

  1. VCC ή +Vs τροφοδοσία,
  2. VOUT αναλογική έξοδος,
  3. GND γείωση.

Ωστόσο, αυτή η σειρά δεν πρέπει να θεωρείται δεδομένη για κάθε κατασκευαστή ή συσκευασία. Η σωστή σειρά ακροδεκτών πρέπει να ελέγχεται στο datasheet του συγκεκριμένου εξαρτήματος.

  • TMP36 VCC → 5V ή 3.3V του Arduino.
  • TMP36 VOUT → A0.
  • TMP36 GND → GND.
  • Προαιρετικά, ένας πυκνωτής αποσύζευξης 100 nF συνδέεται μεταξύ VCC και GND, κοντά στον αισθητήρα.
  • LM35 +VS​ → 5V.
  • LM35 VOUT → A0.
  • LM35 GND → GND.
  • Προαιρετικά, πυκνωτής αποσύζευξης 100 nF συνδέεται μεταξύ τροφοδοσίας και γείωσης.

Ο LM35 δεν είναι η καλύτερη επιλογή για κύκλωμα που λειτουργεί αποκλειστικά στα 3,3 V, επειδή η ελάχιστη τάση τροφοδοσίας του είναι συνήθως περίπου 4 V. Ο TMP36 είναι καταλληλότερος για τέτοιες εφαρμογές.

Στο Arduino Uno, ο προεπιλεγμένος μετατροπέας ADC έχει ανάλυση 10 bit. Αυτό σημαίνει ότι η αναλογική είσοδος επιστρέφει τιμές από 0 έως 1023.

Με αναφορά τάσης ADC ίση με 5 V:

 VOUT​=ADCvalue×5,0/1023​

Για τον LM35:

TLM35​=VOUT​​//0,01

Για τον TMP36:

TTMP36​=(VOUT​−0,5)/0,01​

Σε μορφή κώδικα:

float voltage = adcValue * (5.0 / 1023.0);
float temperatureLM35 = voltage * 100.0;
float temperatureTMP36 = (voltage - 0.5) * 100.0;

Η σταθερά 5,0 αντιστοιχεί στην τάση αναφοράς του ADC. Αν το Arduino τροφοδοτείται από USB, η πραγματική τάση μπορεί να μην είναι ακριβώς 5 V. Για μεγαλύτερη ακρίβεια μπορεί να μετρηθεί η πραγματική τάση 5V ή να χρησιμοποιηθεί σταθερή εσωτερική αναφορά, με τις αντίστοιχες προσαρμογές στον κώδικα.

Ο παρακάτω κώδικας διαβάζει έναν LM35 συνδεδεμένο στην αναλογική είσοδο A0 και εμφανίζει τη θερμοκρασία στη σειριακή οθόνη.

const int sensorPin = A0;
void setup() {
  Serial.begin(9600);
}
void loop() {
  int adcValue = analogRead(sensorPin);
  // Για Arduino Uno με αναφορά ADC περίπου 5 V
  float voltage = adcValue * (5.0 / 1023.0);
  // Ο LM35 δίνει 10 mV για κάθε 1 °C
  float temperatureC = voltage * 100.0;
  Serial.print("ADC: ");
  Serial.print(adcValue);
  Serial.print("  Τάση: ");
  Serial.print(voltage, 3);
  Serial.print(" V");
  Serial.print("  Θερμοκρασία: ");
  Serial.print(temperatureC, 2);
  Serial.println(" °C");
  delay(1000);
}

Παράδειγμα
Αν η θερμοκρασία είναι 25 °C, η έξοδος του LM35 θα είναι περίπου 0,25 V. Ο ADC θα διαβάσει περίπου: (0,25/5)​×1023≈51 Ο κώδικας θα μετατρέψει αυτή την τάση σε περίπου 25 °C.

Για τον TMP36 πρέπει να αφαιρεθούν πρώτα τα 500 mV της εσωτερικής μετατόπισης.

const int sensorPin = A0;
void setup() {
  Serial.begin(9600);
}
void loop() {
  int adcValue = analogRead(sensorPin);
  // Για Arduino Uno με αναφορά ADC περίπου 5 V
  float voltage = adcValue * (5.0 / 1023.0);

  // Ο TMP36 έχει offset 0,5 V και κλίμακα 10 mV/°C
  float temperatureC = (voltage - 0.5) * 100.0;
  Serial.print("ADC: ");
  Serial.print(adcValue);
  Serial.print("  Τάση: ");
  Serial.print(voltage, 3);
  Serial.print(" V");
  Serial.print("  Θερμοκρασία: ");
  Serial.print(temperatureC, 2);
  Serial.println(" °C");
  delay(1000);
}

Παραδείγματα,
Αν ο TMP36 δώσει 0,75 V τότε η θερμοκρασία είναι T=(0,75−0,5)/0,01​=25∘C
Αν δώσει 0,40 V τότε η θερμοκρασία είναι T=(0,40−0,5)/0,01​=−10∘C

Έτσι ο TMP36 μπορεί να ανιχνεύσει θερμοκρασίες κάτω από το μηδέν χωρίς να χρειάζεται αρνητική τάση τροφοδοσίας ή πρόσθετο κύκλωμα μετατόπισης.

Οι αναλογικές μετρήσεις μπορεί να παρουσιάζουν μικρές διακυμάνσεις εξαιτίας ηλεκτρικού θορύβου, της τροφοδοσίας ή των περιορισμών του ADC. Μια απλή τεχνική βελτίωσης είναι η λήψη πολλών μετρήσεων και ο υπολογισμός του μέσου όρου.

Το παράδειγμα αφορά TMP36:

const int sensorPin = A0;
const int samples = 20;
void setup() {
  Serial.begin(9600);
}
void loop() {
  long sum = 0;
  for (int i = 0; i < samples; i++) {
    sum += analogRead(sensorPin);
    delay(5);
  }
  float averageADC = sum / (float)samples;
  float voltage = averageADC * (5.0 / 1023.0);
  float temperatureC = (voltage - 0.5) * 100.0;

  Serial.print("Μέση τιμή ADC: ");
  Serial.print(averageADC);
  Serial.print(" | Θερμοκρασία TMP36: ");
  Serial.print(temperatureC, 2);
  Serial.println(" °C");
  delay(1000);
}

Ο μέσος όρος περιορίζει τις τυχαίες μεταβολές, αλλά δεν διορθώνει ένα συστηματικό σφάλμα. Αν, για παράδειγμα, η τάση αναφοράς έχει λανθασμένη τιμή στον υπολογισμό, οι μετρήσεις θα παραμένουν συστηματικά μετατοπισμένες.

Οι TMP36 και LM35 χρησιμοποιούνται σε πολλές απλές και εκπαιδευτικές εφαρμογές:

  • ψηφιακά θερμόμετρα με Arduino,
  • καταγραφή θερμοκρασίας σε κάρτα SD,
  • αυτόματη ενεργοποίηση ανεμιστήρα,
  • έλεγχος θερμαντικών στοιχείων,
  • μικροί μετεωρολογικοί σταθμοί,
  • παρακολούθηση θερμοκρασίας σε χώρους,
  • έλεγχος θερμοκρασίας σε κουτιά ηλεκτρονικών,
  • εκπαιδευτικά πειράματα φυσικής και ηλεκτρονικής,
  • συστήματα IoT με Arduino, ESP32 ή άλλους μικροελεγκτές,
  • προστασία κυκλωμάτων από υπερθέρμανση,
  • παρακολούθηση θερμοκρασίας κινητήρων ή μπαταριών, όταν το εύρος και η ακρίβεια του αισθητήρα είναι επαρκή.

Για εφαρμογές όπου απαιτείται υψηλή ακρίβεια, μεγάλη απόσταση καλωδίωσης, ψηφιακή επικοινωνία ή αυστηρή βαθμονόμηση, μπορεί να είναι προτιμότερος ένας ψηφιακός αισθητήρας ή ένας αισθητήρας RTD/θερμοζεύγους.

Πλεονεκτήματα

  • Πολύ απλή συνδεσμολογία τριών ακροδεκτών.
  • Δεν απαιτείται εξωτερικός θερμίστορ.
  • Γραμμική έξοδος που μετατρέπεται εύκολα σε °C.
  • Μικρό κόστος.
  • Πολύ μικρή κατανάλωση ρεύματος.
  • Κατάλληλοι για Arduino και εκπαιδευτικές κατασκευές.
  • Δεν χρειάζεται σύνθετος αλγόριθμος για τη βασική μέτρηση.

Μειονεκτήματα

  • Η έξοδος είναι ευαίσθητη στον ηλεκτρικό θόρυβο.
  • Η ακρίβεια εξαρτάται από την τάση αναφοράς του ADC.
  • Δεν υπάρχει ενσωματωμένη ψηφιακή επικοινωνία.
  • Τα μακριά καλώδια μπορούν να προκαλέσουν ασταθείς ενδείξεις.
  • Ο LM35 χρειάζεται συνήθως τουλάχιστον 4 V τροφοδοσία.
  • Για αρνητικές θερμοκρασίες ο LM35 παράγει αρνητική τάση, κάτι που δεν μπορεί να διαβαστεί απευθείας από τις περισσότερες αναλογικές εισόδους Arduino.
  • Η πραγματική θερμοκρασία που μετράται είναι κυρίως η θερμοκρασία του ίδιου του κελύφους του αισθητήρα· δεν μετρά πάντα άμεσα τη θερμοκρασία ενός αντικειμένου που βρίσκεται μακριά.

Ο αισθητήρας πρέπει να τοποθετείται μακριά από πηγές θερμότητας, όπως ο ρυθμιστής και σταθεροποιητής τάσης, ο μικροελεγκτής ή ισχυρά LED. Αν βρίσκεται πολύ κοντά σε εξαρτήματα που θερμαίνονται, μπορεί να μετρά τη θερμοκρασία της πλακέτας αντί για τη θερμοκρασία του περιβάλλοντος.

Χρήσιμες πρακτικές είναι οι εξής:

  • Χρησιμοποίησε κοινή και σταθερή γείωση μεταξύ αισθητήρα και Arduino.
  • Τοποθέτησε πυκνωτή 100 nF κοντά στους ακροδέκτες τροφοδοσίας του αισθητήρα.
  • Απόφυγε πολύ μεγάλα καλώδια χωρίς θωράκιση.
  • Πάρε πολλές μετρήσεις και υπολόγισε μέσο όρο.
  • Χρησιμοποίησε την πραγματική τάση αναφοράς του Arduino στον υπολογισμό.
  • Μην ξεπερνάς την επιτρεπόμενη τάση τροφοδοσίας και το θερμοκρασιακό εύρος του συγκεκριμένου μοντέλου.
  • Έλεγξε το pinout από το datasheet πριν συνδέσεις το εξάρτημα.

Ο LM35 είναι ιδιαίτερα απλός όταν η εφαρμογή αφορά θετικές θερμοκρασίες και υπάρχει τροφοδοσία 5 V ή μεγαλύτερη. Ο TMP36 είναι συχνά πιο πρακτικός για σύγχρονα κυκλώματα Arduino και 3,3 V, επειδή λειτουργεί με χαμηλότερη τάση και η μετατόπιση των 500 mV επιτρέπει τη μέτρηση αρνητικών θερμοκρασιών με θετική τάση εξόδου.

Και οι δύο αποτελούν πολύ καλές επιλογές για την πρώτη επαφή με τους αναλογικούς αισθητήρες. Η βασική διαφορά στον κώδικα είναι ότι στον LM35 χρησιμοποιούμε τη σχέση: T=VOUT​×100, ενώ στον TMP36 αφαιρούμε πρώτα τα 0,5 V και εφαρμόζουμε τον τύπο: T=(VOUT​−0,5)×100.