Συνδέουμε έναν αναλογικό αισθητήρα θερμοκρασίας στο Arduino και τον βαθμονομούμε. Θερμικό ρελέ σε αισθητήρα θερμοκρασίας αντίστασης NTC και Arduino

10.09.2021

Γεια σου, Habracommunity. Αφού διάβασα μερικά άρθρα σχετικά με το κέντρο του Arduino, είχα κολλήσει να πάρω στα χέρια μου αυτό το παιχνίδι. Και πρόσφατα έλαβα ένα δέμα με πληρωμή. Μετά ασχολήθηκα με τα LED και ήθελα κάτι πιο σοβαρό. αποφάσισα να κάνω απλό θερμόμετρο, χρησιμοποιώντας μόνο ένα θερμίστορ, μια αντίσταση 10 kOhm και Οθόνη LCD. Αν κάποιος ενδιαφέρεται για το τι συνέβη, παρακαλώ δείτε τη γάτα.

Αρχή

Το θερμίστορ είναι μεταβλητή αντίσταση, αλλάζοντας την αντίστασή του ανάλογα με τη θερμοκρασία περιβάλλοντος.

Θα χρειαστούμε τις ακόλουθες λεπτομέρειες:
Arduino Uno - 1 τεμάχιο
Θερμίστορ - 1 τεμ.
Αντίσταση με αντίσταση 10 kOhm - 1 τεμ.
Οθόνη LCD HJ1602A - 1 τεμ.
Σύνδεση βραχυκυκλωτικών - πολλά κομμάτια

Τα είχα όλα αυτά, οπότε άρχισα αμέσως να σχεδιάζω στο breadboard.

Επίσης κόλλησα τα πόδια στην οθόνη την ημέρα της αγοράς.

Στη συνέχεια συνδέουμε την οθόνη στις εξόδους Arduino. Η οθόνη μου έχει αυτό το pinout.

1 (GND) GND - Γείωση
2 (VDD) 5v - Ισχύς (+)
3 (VO/Contrast) - Έλεγχος αντίθεσης (εδώ συνέδεσα μια μεταβλητή αντίσταση)
4 (RS) - 12 - Κανάλι δεδομένων
5 (RW) - 11 - Κανάλι δεδομένων
6 (Ε) - 10 - Κανάλι δεδομένων
11 (DB4) - 5 - Κανάλι δεδομένων
12 (DB5) - 4 - Κανάλι δεδομένων
13 (DB6) - 3 - Κανάλι δεδομένων
14 (DB7) - 2 - Κανάλι δεδομένων
15 (BL1/Οπίσθιος φωτισμός1) - 13 - Ισχύς οπίσθιου φωτισμού (+)
16 (BL2/Backlight2) - GND - Ground(-)

Αυτή είναι η εικόνα που έχουμε.

Στη συνέχεια, συνδέστε το ένα σκέλος του θερμίστορ στην αναλογική είσοδο A4 και μια αντίσταση 10 kOhm στη γείωση και το δεύτερο σκέλος του θερμίστορ στα 5 V.

Γενικά, αυτό είναι όλο. Το υλικό είναι έτοιμο. Εδώ είναι το διάγραμμα.

Προγραμματισμός

Όλα είναι ξεκάθαρα με τον προγραμματισμό. Πηγαίος κώδικαςσκίτσο:

// συνδέστε δύο βιβλιοθήκες για εργασία με LCD και μαθηματικούς υπολογισμούς #include #συμπεριλαμβάνω LiquidCrystal lcd(12, 11, 10, 5, 4, 3, 2); // αρχικοποίηση LCD int backLight = 13; void setup(void) ( pinMode(backLight, OUTPUT); digitalWrite(backLight, HIGH); lcd.begin(16, 2); lcd.clear(); lcd.setCursor(0,0); ) // δημιουργία μεθόδου για μετατροπή μετρήσεων αισθητήρα σε βαθμούς Κελσίου διπλά Getterm(int RawADC) ( διπλή θερμοκρασία; θερμοκρασία = log(((10240000/RawADC) - 10000)); θερμοκρασία = 1 / (0.001129148 + (0.000234125 * θερμοκρασία) + (01 *7 * 0.000 temp * temp)); lcd.setCursor(0,0)

Το αποτέλεσμα του προγράμματος.

Ένα θερμίστορ (θερμίστορ) είναι ένας αντιστάτης που αλλάζει την αντίστασή του με τις αλλαγές της θερμοκρασίας.

Τεχνικά, όλες οι αντιστάσεις είναι θερμίστορ γιατί η αντίστασή τους αλλάζει ανάλογα με τη θερμοκρασία. Αλλά αυτές οι αλλαγές είναι πολύ μικρές και πολύ δύσκολο να μετρηθούν. Τα θερμίστορ κατασκευάζονται με τέτοιο τρόπο ώστε η αντίσταση να μεταβάλλεται κατά σημαντικό ποσό ανάλογα με τη θερμοκρασία. Περίπου 100 ohms και ακόμη περισσότερα με αλλαγή θερμοκρασίας 1 βαθμού Κελσίου!

Υπάρχουν δύο τύποι θερμίστορ - με NTC (αρνητικός συντελεστής θερμοκρασίας) και με PTC (θετικός συντελεστής θερμοκρασίας). Στις περισσότερες περιπτώσεις, οι αισθητήρες NTC χρησιμοποιούνται για τη μέτρηση της θερμοκρασίας. Τα PTC χρησιμοποιούνται συχνά ως ασφάλειες - καθώς αυξάνεται η θερμοκρασία, αυξάνεται η αντίσταση, αυτό προκαλεί περισσότερο ρεύμα να περάσει μέσα από αυτά, θερμαίνονται και λειτουργούν ως ασφάλειες. Αρκετά βολικό για αλυσίδες ασφαλείας!

Εάν συγκρίνουμε θερμίστορ με αναλογικούς αισθητήρες θερμοκρασίας όπως LM35, TMP36, ψηφιακούς όπως DS18B20 ή θερμοστοιχεία, τα κύρια πλεονεκτήματα των θερμίστορ μπορούν να ονομαστούν:

  • Πρώτον, είναι πολύ φθηνότεροι από όλους τους αισθητήρες θερμοκρασίας που αναφέρονται παραπάνω!
  • Είναι πολύ πιο εύκολο στη χρήση σε συνθήκες υγρασίας αφού είναι απλώς μια αντίσταση.
  • Τα θερμίστορ λειτουργούν με οποιαδήποτε τάση (οι ψηφιακοί αισθητήρες απαιτούν λογική ισχύ 3 ή 5 V).
  • Εάν συγκρίνετε ένα θερμίστορ και ένα θερμοστοιχείο, το πρώτο δεν χρειάζεται ενισχυτή σήματος για να διαβάσει τα δεδομένα. Κατά συνέπεια, μπορείτε να χρησιμοποιήσετε σχεδόν οποιονδήποτε μικροελεγκτή.
  • Η αναλογία ακρίβειας/τιμής είναι εκπληκτική. Για παράδειγμα, ένα θερμίστορ 10KΩ 1% μπορεί να μετρήσει τη θερμοκρασία με ακρίβεια ±0,25°C! (Υποθέτοντας ότι έχετε έναν κατάλληλο μετατροπέα A/D στον μικροελεγκτή σας).
  • Είναι σχεδόν αδύνατο να σπάσουν ή να καταστραφούν.

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

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

Προδιαγραφές

Παρακάτω είναι τεχνικές προδιαγραφέςθερμίστορ που χρησιμοποιούνται συχνότερα σε έργα DIY στο Arduino:

  • Αντίσταση στους 25°C: 10K ±1%.
  • B25/50: 3950 ±1%.
  • Το εύρος των μετρούμενων θερμοκρασιών είναι από -55°C έως 125°C.
  • Διάμετρος: 3,5mm / 0,13in.
  • Μήκος: 18 ίντσες / 45 cm.

Λάβετε υπόψη ότι το ίδιο το θερμίστορ μπορεί να μετρήσει θερμοκρασίες έως και 125° C, αλλά οι ίδιες οι επαφές μερικές φορές έχουν σχεδιαστεί για χαμηλότερες θερμοκρασίες. Δηλαδή, δεν πρέπει να χρησιμοποιείται θερμίστορ για τον έλεγχο της θερμοκρασίας των υγρών που είναι πολύ ζεστά.

Δεδομένου ότι τα θερμίστορ είναι ουσιαστικά αντιστάσεις, η δοκιμή τους δεν είναι δύσκολη. Αρκεί να μετρήσετε την αντίσταση με ένα πολύμετρο:

Σε θερμοκρασία δωματίου, η ένδειξη πρέπει να είναι περίπου 10 kOhm. Για παράδειγμα, οι ενδείξεις στους 30°C - 86°F είναι περίπου 8 kOhms.

Τα θερμίστορ συνδέονται πολύ εύκολα με το Arduino. Αρκετά για χρήση πλακέτα κυκλώματος, όπως φαίνεται στο παρακάτω σχήμα. Δεδομένου ότι η αντίσταση του θερμίστορ είναι αρκετά υψηλή (περίπου 10 kOhm), η αντίσταση των αγωγών δεν θα έχει ουσιαστικά καμία επίδραση στα αποτελέσματα της μέτρησης.


Για να προσδιορίσουμε τη θερμοκρασία, πρέπει να μετρήσουμε την αντίσταση. Ωστόσο, το Arduino δεν έχει ενσωματωμένο μετρητή αντίστασης. Αλλά είναι δυνατή η ανάγνωση της τάσης χρησιμοποιώντας έναν μετατροπέα αναλογικού σε ψηφιακό. Πρέπει λοιπόν να μετατρέψουμε την αντίσταση σε τάση. Για να γίνει αυτό, θα προσθέσουμε μια άλλη αντίσταση σε σειρά στο διάγραμμα σύνδεσης. Τώρα, όταν μετράτε την τάση στο κέντρο, καθώς αλλάζει η αντίσταση, θα αλλάξει και η τάση.

Ας υποθέσουμε ότι χρησιμοποιούμε μια σταθερή αντίσταση 10K και μια μεταβλητή αντίσταση που ονομάζεται R. Η τάση εξόδου (Vo) που θα περάσουμε στο Arduino θα είναι:

Vo = R / (R + 10K) * Vcc,

όπου Vcc είναι η τάση τροφοδοσίας (3,3 V ή 5 V)

Τώρα θέλουμε να συνδέσουμε όλα αυτά με το Arduino. Μην ξεχνάτε ότι όταν μετράτε την τάση (Vi) χρησιμοποιώντας ένα ADC στο Arduino, θα λάβετε μια αριθμητική τιμή.

Τιμή ADC = Vi * 1023 / Vcc

Τώρα συνδυάζουμε τις δύο τάσεις (Vo = Vi) και παίρνουμε:

Τιμή ADC = R / (R + 10K) * Vcc * 1023 / Vcc

Το καλύτερο από όλα, το Vcc μειώνεται!

Τιμή ADC = R / (R + 10K) * 1023

Δηλαδή, δεν έχει σημασία τι τάση τροφοδοσίας χρησιμοποιείτε!

Στο τέλος θέλουμε ακόμα να πάρουμε R (αντίσταση). Για να το κάνετε αυτό, πρέπει να χρησιμοποιήσετε έναν άλλο μετασχηματισμό στον οποίο το R μεταφέρεται στη μία πλευρά:

R = 10K / (1023/ADC - 1)

Μεγάλος. Ας δοκιμάσουμε τι προκύπτει από όλα αυτά. Συνδέστε το θερμίστορ στο Arduino όπως φαίνεται στην παρακάτω εικόνα:


Συνδέστε έναν ακροδέκτη της αντίστασης 10KΩ στον ακροδέκτη 5V, τον δεύτερο ακροδέκτη της αντίστασης 10KΩ 1% σε έναν ακροδέκτη του θερμίστορ. Η δεύτερη επαφή του θερμίστορ συνδέεται με τη γείωση. Συνδέστε το «κέντρο» των δύο αντιστάσεων στην ακίδα Analog 0 στο Arduino.

Τώρα εκτελέστε το ακόλουθο σκίτσο Arduino:

// τιμή της αντίστασης "άλλος".

#define SERIESRESISTOR 10000

// στην οποία συνδέεται το θερμίστορ

#define THERMISTORPIN A0

ρύθμιση κενού (κενό) (

Serial.begin(9600);

void loop(void) (

ανάγνωση = αναλογικήΑνάγνωση(ΘΕΡΜΙΣΤΟΡΠΙΝ);

Serial.print("Αναλογική ανάγνωση");

Serial.println(reading);

// μετατρέψτε τις λαμβανόμενες τιμές σε αντίσταση

ανάγνωση = (1023 / ανάγνωση) - 1;

ανάγνωση = SERIESRESISTOR / ανάγνωση;

Serial.println(reading);

Ως αποτέλεσμα, θα πρέπει να λάβετε τιμές που ταιριάζουν με αυτές που μετρήθηκαν με ένα πολύμετρο.

Πιο ακριβείς μετρήσεις

Όταν κάνετε αναλογικές μετρήσεις, ειδικά με θορυβώδεις πλακέτες όπως το Arduino, μπορούν να χρησιμοποιηθούν δύο μέθοδοι για τη βελτίωση της ποιότητας των μετρήσεων. Το πρώτο είναι να χρησιμοποιήσετε τον ακροδέκτη 3,3 V για αναλογικό σήμακαι το δεύτερο είναι η συλλογή μιας μικρής σειράς πειραματικών τιμών και ο μέσος όρος τους.

Πρώτα. Η ισχύς 5 V από το Arduino προέρχεται απευθείας από το USB σας προσωπικός υπολογιστής. Ως αποτέλεσμα, το σήμα είναι πολύ πιο θορυβώδες από την τροφοδοσία από τον ακροδέκτη 3,3 V (αυτή η ακίδα παρέχει προεπεξεργασία μέσω του ρυθμιστή που είναι ενσωματωμένος στην πλακέτα). Δηλαδή, απλώς συνδέστε το 3.3 στον ακροδέκτη AREF και χρησιμοποιήστε το ως πηγή τάσης VCC.

Δεύτερος. Η λήψη πολλαπλών μετρήσεων για να ληφθεί ένας μέσος όρος θα βελτιώσει επίσης σημαντικά την ανάγνωση, καθώς θα λαμβάνεται υπόψη ο εξωτερικός θόρυβος. Για τον υπολογισμό του μέσου όρου, συνιστάται η λήψη τουλάχιστον 5 τιμών.

Ως αποτέλεσμα, το διάγραμμα σύνδεσης και το νέο σκίτσο για το Arduino θα μοιάζουν με αυτό:


Αυτό το σκίτσο λαμβάνει υπόψη και τις δύο "αναβαθμίσεις". Ως αποτέλεσμα, θα μπορείτε να λαμβάνετε πιο ακριβείς μετρήσεις θερμοκρασίας.

// σε ποιο αναλογικό pin είμαστε συνδεδεμένοι

#define THERMISTORPIN A0

// πόσες μετρήσεις λαμβάνονται για τον προσδιορισμό της μέσης τιμής

// όσο περισσότερες τιμές, τόσο περισσότερος χρόνος διαρκεί η βαθμονόμηση,

// αλλά οι μετρήσεις θα είναι πιο ακριβείς

#define NUMSAMPLES 5

// χωρητικότητα της δεύτερης αντίστασης στο κύκλωμα

#define SERIESRESISTOR 10000

δείγματα int?

ρύθμιση κενού (κενό) (

Serial.begin(9600);

// συνδέστε το AREF σε 3,3 V και χρησιμοποιήστε αυτόν τον ακροδέκτη για τροφοδοσία,

// γιατί δεν κάνει τόσο θόρυβο

analogReference(EXTERNAL);

void loop(void) (

// σχηματίζουν ένα διάνυσμα τιμών N με μικρή καθυστέρηση μεταξύ της ανάγνωσης δεδομένων

// προσδιορίστε τη μέση τιμή στο δημιουργούμενο διάνυσμα

μέσος όρος += δείγματα[i];

μέσος όρος /= NUMSAMPLES;

Serial.println(μέσος όρος);

μέσος όρος = 1023 / μέσος όρος - 1;

Serial.print("Αντίσταση θερμίστορ");

Serial.println(μέσος όρος);

Φυσικά, η αντίσταση στο θερμίστορ δεν μας κάνει ούτε κρύο ούτε ζεστό. Πρέπει να ξέρουμε ακριβώς τη θερμοκρασία! Αν έχεις αρκετά μια γρήγορη λύσηγια να υπολογίσετε τη θερμοκρασία (για παράδειγμα, εάν η θερμοκρασία είναι κάτω από κάποια τιμή X, εκτελούμε μια συγκεκριμένη εργασία, εάν είναι πάνω από κάποια τιμή Y, εκτελούμε μια άλλη εργασία), μπορείτε απλά να χρησιμοποιήσετε έναν πίνακα θερμοκρασίας έναντι αντίστασης.

Αλλά πιθανότατα θα χρειαστείτε πραγματικές θερμοκρασίες. Για να το κάνετε αυτό, μπορείτε να χρησιμοποιήσετε την εξίσωση Steinhart-Hart, η οποία θα σας επιτρέψει να εφαρμόσετε μια αρκετά αξιόπιστη προσέγγιση των τιμών που έχουν μετατραπεί.

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

Για αυτήν την εξάρτηση, χρειάζεται μόνο να γνωρίζουμε To (αυτή την παράμετρο για θερμοκρασία δωματίου (25 °C) = 298,15 K), B (στη συγκεκριμένη περίπτωση είναι ίσο με 3950 - συντελεστής που εξαρτάται από το θερμίστορ που χρησιμοποιείται) και Ro (αντίσταση σε θερμοκρασία δωματίου. Στην περίπτωση αυτή είναι ίση με 10 KOhm). Αντικαθιστούμε το R (μετρημένη αντίσταση) και παίρνουμε την τιμή T (θερμοκρασία σε Kelvin), την οποία μετατρέπουμε σε °C.

Το πρόγραμμα Arduino παρακάτω υπολογίζει τη θερμοκρασία σε °C.

// σε ποιο αναλογικό pin είμαστε συνδεδεμένοι

#define THERMISTORPIN A0

// αντίσταση στους 25 βαθμούς Κελσίου

#define THERMISTORNOMINAL 10000

// θερμ. για ονομαστική αντίσταση (σχεδόν πάντα ίση με 25 C)

#define ΘΕΡΜΟΚΡΑΣΙΑΚΗ 25

// πόσες μετρήσεις χρησιμοποιούνται για τον προσδιορισμό της μέσης τιμής

#define NUMSAMPLES 5

// Συντελεστής βήτα θερμίστορ (συνήθως 3000-4000)

#define BCOEFFICIENT 3950

// αντίσταση της δεύτερης αντίστασης

#define SERIESRESISTOR 10000

δείγματα int?

ρύθμιση κενού (κενό) (

Serial.begin(9600);

analogReference(EXTERNAL);

void loop(void) (

// μειώνει τις ενδείξεις σε διάνυσμα με μικρή καθυστέρηση μεταξύ των μετρήσεων

δείγματα[i] = αναλογικήΑνάγνωση(ΘΕΡΜΙΣΤΟΡΠΙΝ);

// υπολογίστε τη μέση τιμή

μέσος όρος += δείγματα[i];

μέσος όρος /= NUMSAMPLES;

Serial.print("Μέση αναλογική ανάγνωση ");

Serial.println(μέσος όρος);

// μετατρέψτε την τιμή σε αντίσταση

μέσος όρος = 1023 / μέσος όρος - 1;

μέσος όρος = SERIESRESISTOR / μέσος όρος.

Serial.print("Αντίσταση θερμίστορ");

Serial.println(μέσος όρος);

float Steinhart?

steinhart = μέσος όρος / THERMISTORNOMINAL; // (R/Ro)

steinhart = log(steinhart); //ln(R/Ro)

steinhart /= BCOEFFICIENT; // 1/B * ln(R/Ro)

steinhart += 1,0 / (ΘΕΡΜΟΚΡΑΣΙΟΝΟΜΙΚΗ + 273,15); // + (1/Προς)

steinhart = 1,0 / steinhart; // αναστροφή

steinhart -= 273,15; // μετατροπή σε βαθμούς Κελσίου

Serial.print("Θερμοκρασία");

Serial.print(steinhart);

Serial.println(" *C");


Για να ληφθούν ακόμη πιο ακριβείς μετρήσεις, συνιστάται να λαμβάνεται υπόψη η ακριβής τιμή της αντίστασης. Σε αυτήν την περίπτωση, για παράδειγμα, δεν θα είναι ίσο με ακριβώς 10 KOhm, αλλά θα πάρει μια τιμή κοντά στα 10 KOhm.

Πόσο με ακρίβεια μπορείτε να προσδιορίσετε τη θερμοκρασία χρησιμοποιώντας θερμίστορ και Arduino;

Πιθανότατα παρατηρήσατε παραπάνω ότι η τιμή της θερμοκρασίας είναι 28,16°C. Αυτό σημαίνει ότι η ένδειξη είναι ακριβής στους 0,01°C; Δυστυχώς όχι. Έχουμε το σφάλμα του ίδιου του θερμίστορ και το σφάλμα του αναλογικού ηλεκτρικού κυκλώματος.

Μπορείτε να προσεγγίσετε το αναμενόμενο σφάλμα λαμβάνοντας υπόψη το σφάλμα αντίστασης του ίδιου του θερμίστορ. Για παράδειγμα, το θερμίστορ λέει 1%. Αυτό σημαίνει ότι στους 25°C μπορεί να παράγει μετρήσεις που κυμαίνονται από 10.100 έως 9.900 ohms. Στους 25°C, μια διαφορά στην ένδειξη 450 ohms αντιστοιχεί σε 1°C, επομένως ένα σφάλμα 1% είναι περίπου +-0,25°C (μπορείτε να βαθμονομήσετε το θερμίστορ στους 0°C και να εξαλείψετε τις αποκλίσεις). Μπορείτε επίσης να χρησιμοποιήσετε ένα θερμίστορ με ακρίβεια 0,1%. Αυτό θα βοηθήσει στη μείωση του σφάλματος στις μετρήσεις στους +-0,03°C

Υπάρχει ένα δεύτερο σφάλμα που παρουσιάζεται κατά τη μετατροπή αναλογικού σε ψηφιακό. Κάθε μπιτ που διαβάζεται λανθασμένα μπορεί να παράγει αποκλίσεις περίπου 50 ohms. Κατ 'αρχήν, αυτό το σφάλμα είναι μικρότερο από το σφάλμα του ίδιου του θερμίστορ + - (0,1°C), αλλά χρησιμοποιώντας το Arduino Uno ή το Arduino Pro Mini, είναι αδύνατο να μειωθεί αυτό το σφάλμα. Εάν δεν είστε ικανοποιημένοι με τέτοια ακρίβεια, πρέπει να χρησιμοποιήσετε πιο «προηγμένα» μοντέλα Arduino (τα οποία θα παρέχουν 12-16 bit αντί για 10 για μετατροπή αναλογικού σε ψηφιακό).

Γενικά, τα θερμίστορ παρέχουν μεγαλύτερη ακρίβεια στις μετρήσεις θερμοκρασίας από τα θερμοστοιχεία και τους περισσότερους φθηνούς ψηφιακούς αισθητήρες θερμοκρασίας, αλλά χρησιμοποιώντας ένα Arduino και ένα θερμίστορ δεν θα έχετε μετρήσεις με ακρίβεια άνω των +-0,1°C. Χρησιμοποιώντας ένα θερμίστορ 1%, οι μετρήσεις δεν θα είναι ακριβέστερες από +-0,5 °C.

Αφήστε τα σχόλιά σας, τις ερωτήσεις σας και μοιραστείτε προσωπική εμπειρίαπαρακάτω. Νέες ιδέες και έργα γεννιούνται συχνά στις συζητήσεις!

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


Κύκλωμα μέτρησης θερμοκρασίας με θερμίστορ

Θυμόμαστε τι υπάρχει στον πίνακα Arduino UNOΥπάρχουν έξι αναλογικές είσοδοι, οι οποίες είναι ουσιαστικά κανάλια ADC. Θα συμπεριλάβουμε ένα θερμίστορ σε ένα από αυτά τα κανάλια. Ωστόσο, πώς μπορείτε να μετρήσετε την αντίστασή του εάν το ADC μπορεί να μετρήσει μόνο την τάση; Οι έξυπνοι τύποι σκέφτηκαν να χρησιμοποιήσουν ένα απλό κύκλωμα διαιρέτη για αυτό:

Εδώ το U0 είναι μια γνωστή τάση, το R0 είναι μια γνωστή αντίσταση, το RT είναι μια αντίσταση που εξαρτάται από τη θερμοκρασία, το Umeas είναι η μετρούμενη τάση. Από το σχήμα είναι προφανές ότι για τη μετρούμενη τάση ισχύει η ακόλουθη σχέση:

Από πού προέρχεται η αντίσταση του θερμίστορ:

Ωστόσο, η μέτρηση της αντίστασης δεν αρκεί, πρέπει να πάρουμε τη θερμοκρασία!

Εξίσωση Steinhart-Hart

Μια τυπική εξάρτηση της αντίστασης του θερμίστορ από τη θερμοκρασία μοιάζει με αυτό:

Αξιότιμοι Κύριοι John Steinhart και Stanley Hart δημοσίευσαν την εργασία τους σχετικά με τις καμπύλες βαθμονόμησης θερμίστορ το 1968, στην οποία εξήγαγαν πειραματικά μια εξίσωση που σχετίζεται με την αντίσταση και τη θερμοκρασία των θερμίστορ ημιαγωγών. Εδώ είναι η εξίσωση:

Εδώ τα a, b και c είναι σταθερές βαθμονόμησης, οι λεγόμενοι συντελεστές Steinhart-Hart. Αυτή η εξίσωση προσεγγίζει την καμπύλη με καλή ακρίβεια με επιλεγμένους συντελεστές για ένα συγκεκριμένο θερμίστορ.

Οι συντελεστές Steinhart-Hart μπορούν να υποδεικνύονται στο φύλλο δεδομένων από τον κατασκευαστή του θερμίστορ. Εναλλακτικά, ενδέχεται να υποδεικνύονται τιμές πίνακα θερμοκρασιών και αντιστάσεων για μια συγκεκριμένη συσκευή.

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

Αισθητήρας στο στούντιο

Ο αναλογικός μου αισθητήρας θερμοκρασίας μοιάζει με αυτό:


Η μαύρη στρογγυλή πλάκα στο πρώτο πλάνο είναι το θερμίστορ. Λέει “103”, που σημαίνει ότι σε θερμοκρασία δωματίου έχει αντίσταση 10 KOhm (103=10*10^3). Ακολουθεί το μικροκύκλωμα, που δεν είναι άλλο από λειτουργικός ενισχυτής LM358P. Υπάρχουν ακόμα 2 απλές αντιστάσεις, που έχουν επίσης γραμμένο 103, εκ των οποίων η μία δεν συνδέεται πουθενά. Θυμάστε ακόμα τη φόρμουλα για το RT; Βρήκαμε λοιπόν το R0 για αυτό, είναι ίσο με 10 KOhm. Και το U0 είναι ίσο με 5 V, θα σας το πω. Δεν υπάρχει τίποτα άλλο στο ταμπλό!

Ο αισθητήρας συνδέεται πολύ εύκολα Αισθητήρας Arduino Shield, το οποίο, με τη σειρά του, τοποθετείται στο Arduino [αυτό είναι το νόημα του Arduino, για όσους δεν το έχουν καταλάβει ακόμα] , όπως και το δικό μου έτσι:


Λοιπόν, αυτό είναι - το υλικό είναι έτοιμο για εργαστηριακή εργασία.

Ρύθμιση βαθμονόμησης

Για βαθμονόμηση θα χρειαστείτε μια σόμπα που να δείχνει τη θερμοκρασία της και να τη διατηρεί ταυτόχρονα (!). Κανένα πρόβλημα - πήγα στο Ινστιτούτο Ανόργανης Χημείας SB RAS, υπάρχουν πολλά από αυτά σε κάθε εργαστήριο. Διαλέξτε ανά χρώμα, όπως λένε. Μου άρεσε αυτό:

Σε γενικές γραμμές πρόκειται για ένα είδος τραπεζιού θέρμανσης (30...300 βαθμοί Κελσίου), το οποίο μπαίνει στο μικροσκόπιο και εξετάζονται κάθε λογής πράγματα, θερμαίνοντάς τα. Γι' αυτό το σχέδιο είναι τόσο περίεργο.

Συναρμολογούμε την εγκατάσταση: Arduino στον υπολογιστή, αισθητήρας σε καπάκι με νερό, καπάκι στη σόμπα, ουρά κάτω από τον πάγκο, καλύψτε τη σόμπα με καπάκι χαλαζία.


Αφήστε τις επιλογές σας για τη διεξαγωγή του πειράματος στα σχόλια. Θα πω αμέσως ότι χωρίς νερό ρουφάει πολύ περισσότερο από ό,τι με νερό.

Διαδικασία βαθμονόμησης

Εξετάζουμε προσεκτικά την εξίσωση Steinhart-Hart και βλέπουμε τρεις άγνωστους σε αυτήν. Αυτό σημαίνει ότι χρειάζεται να πραγματοποιήσουμε μόνο τρεις μετρήσεις και έτσι να λάβουμε τρεις εξισώσεις.

Επιλέξτε τρία σημεία στην κλίμακα θερμοκρασίας. Μου αρέσουν, για παράδειγμα, οι 30, 40 και 50 βαθμοί Κελσίου. Ζεσταίνουμε τη σόμπα σε μία από τις θερμοκρασίες, περιμένουμε 10 λεπτά να γίνουν όλες οι θερμοδυναμικές διεργασίες και να αυξηθεί η εντροπία του σύμπαντος και μετράμε την αντίσταση. Στη συνέχεια επαναλαμβάνουμε τα πάντα για τη δεύτερη και την τρίτη θερμοκρασία.

Συνθέτουμε τρεις εξισώσεις και λύνουμε ένα σύστημα (γραμμικών, παρεμπιπτόντως) εξισώσεων. Είμαστε τεμπέληδες και θα αναγκάσουμε το Mathcad να το κάνει αυτό, κάτι που θα μας δίνει ακόμα τους συντελεστές Steinhart-Hart.

Νομίζω ότι όλα είναι ξεκάθαρα εδώ.

Σειριακή Επικοινωνία

Το Arduino έχει ένα τόσο ωραίο πράγμα - σειριακή επικοινωνία. Αυτό είναι το φαινόμενο της επικοινωνίας μεταξύ ενός υπολογιστή και του Arduino κατά την εκτέλεση του προγράμματος. Αυτό συμβαίνει μέσω μιας θύρας USB που προσομοιώνει μια θύρα COM. Αυτό σας επιτρέπει να παρακολουθείτε την κατάσταση της πλακέτας σε πραγματικό χρόνο και ακόμη και να της στέλνετε εντολές από τον υπολογιστή σας.

Για να καλέσετε Σειριακή οθόνη, επιλέξτε από το μενού Εργαλεία->Σειρική οθόνηή πατήστε έναν περίπλοκο συνδυασμό τριών πλήκτρων ctrl+shift+Mκατά την εκτέλεση του προγράμματος.

Για να αναγκάσετε το Arduino να εξάγει κάτι σε μια σειριακή ροή, απλώς χρησιμοποιήστε τη συνάρτηση Serial.println(αριθμός) ή Serial.println("κείμενο").

Η σειριακή επικοινωνία πρέπει να αρχικοποιηθεί στο setup()() εισάγοντας την εντολή Serial.begin(boostrate) εκεί. Baudrate - η ποσότητα των πληροφοριών που μεταδίδονται ανά μονάδα χρόνου (δεν πρέπει να συγχέεται με το bitrate). Το Arduino προσφέρει μια επιλογή από: 300, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 38400, 57600, 115200 baud. Αυτό συμβαίνει εάν δεν ταιριάζει με το ρυθμό ενίσχυσης στο πρόγραμμά σας και στην οθόνη σειριακής θύρας:


Αυτό θα πρέπει να σας συμβεί όταν ανοίξετε για πρώτη φορά την οθόνη. Μην ανησυχείτε.

Κώδικας

Ας γράψουμε έναν σύντομο κωδικό για να παρακολουθήσουμε τη μετρούμενη τιμή τάσης και την υπολογιζόμενη τιμή αντίστασης:

κενός εγκατάσταση() {
Σειράς.begin(115200);
}


κενός βρόχος() {
διπλό rt; //μετρημένη τιμή
Σειράς.println("voltage:"); //γράψτε μια λέξη για την ομορφιά στο ρεύμα
rt=( analogRead(0)); //διαβάστε την τιμή από τον αισθητήρα
Σειράς.println(rt); //Έξοδος της τιμής από τον αισθητήρα στη ροή
rt = ((10240000/rt) - 10000); //υπολογίστε την αντίσταση χρησιμοποιώντας τον τύπο
Σειράς.println("αντίσταση:" ); //γράψτε μια άλλη λέξη για την ομορφιά στο ρεύμα
Σειράς.println(rt); //Έξοδος της τιμής αντίστασης στο ρεύμα
καθυστέρηση (5000); //Κάνε τίποτα για 5 δευτερόλεπτα
}


Ως αποτέλεσμα, όλα είναι όμορφα:

Υπολογισμός των συντελεστών Steinhartz-Hartz

Χρησιμοποιώντας τη μέθοδο που περιγράφεται παραπάνω, σημειώνουμε τρεις τιμές αντίστασης σε τρεις διαφορετικές θερμοκρασίες σε ένα κομμάτι χαρτί. Τα αντικαθιστούμε ανά δύο στις τρεις εξισώσεις Steinhartz-Hartz και λύνουμε το σύστημα. Εδώ είναι μια φωτογραφία του αρχείου μου Matkad:

Σημειώστε ότι αντί για τον συντελεστή «c» έγραψα «se» [tse], επειδή το Matkad δεν σας επιτρέπει να χρησιμοποιήσετε το σύμβολο «c» παρά μόνο στην τιμή της ταχύτητας του φωτός.

Το διάνυσμα της κάτω στήλης είναι οι επιθυμητοί συντελεστές μας.

Ας κωδικοποιήσουμε ξανά

Τώρα ας γράψουμε ένα σκίτσο που θα επιτρέψει στο Arduino να μετρήσει τη θερμοκρασία.

#συμπεριλαμβάνω //Σύνδεση της βιβλιοθήκης σας με blackjack και λογάριθμους


διπλό Steinhart (int value) (
διπλή θερμοκρασία? //τελικά αυτή η μεταβλητή θα γίνει θερμοκρασία
Θερμοκρασία = log((10240000/τιμή-10000)); //υπολογίστε τον λογάριθμο
//υπολογίστε τη θερμοκρασία από την εξίσωση Steinhart-Hart
Θερμοκρασία = 1/(0,001768+0,00005719*Θερμοκρασία+0,000001354*Θερμοκρασία*Θερμοκρασία*Θερμοκρασία);
Θερμοκρασία = Θερμ.-273,15; //μετατροπή της θερμοκρασίας σε βαθμούς Κελσίου
Επιστροφή Θερμ. //πέρασε τη θερμοκρασία πίσω στον βρόχο
}


κενός εγκατάσταση() {
Serial.begin(115200); //έναρξη σειριακής σύνδεσης
}


κενός βρόχος () {
//πέρασε τη μετρούμενη τιμή στη συνάρτηση Steinhart και εμφανίζει τη θερμοκρασία που θα επιστρέψει
Σειράς.println(int(Steinhart(analogRead(0))));
καθυστέρηση (2000); //Κάνε τίποτα για 2 δευτερόλεπτα
}


Περίληψη

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

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

Για να δημιουργήσετε μετεωρολογικός σταθμός στο σπίτιή θερμόμετρο θα πρέπει να μάθετε πώς να ζευγαρώσετε Πλακέτα Arduinoκαι συσκευές μέτρησης θερμοκρασίας και υγρασίας. Η μέτρηση της θερμοκρασίας μπορεί να γίνει με χρήση θερμίστορ ή ψηφιακού αισθητήρα DS18B20, αλλά χρησιμοποιούνται πιο σύνθετες συσκευές - αισθητήρες DHT11 ή DHT22. Σε αυτό το άρθρο θα σας πούμε πώς να μετράτε τη θερμοκρασία και την υγρασία με χρησιμοποιώντας Arduinoκαι αυτοί οι αισθητήρες.

Μέτρηση θερμίστορ

Τα περισσότερα με απλό τρόποχρησιμοποιείται η ανίχνευση θερμοκρασίας. Αυτός είναι ένας τύπος αντίστασης του οποίου η αντίσταση εξαρτάται από τη θερμοκρασία περιβάλλοντος. Υπάρχουν θερμίστορ με θετικό και αρνητικό συντελεστή αντίστασης θερμοκρασίας - PTC (ονομάζονται επίσης posistors) και θερμίστορ NTC, αντίστοιχα.

Στο παρακάτω γράφημα μπορείτε να δείτε την εξάρτηση της αντίστασης από τη θερμοκρασία. Η διακεκομμένη γραμμή δείχνει την εξάρτηση για ένα θερμίστορ με αρνητικό TCS (NTC) και η παχιά συμπαγής γραμμή για το θερμίστορ με θετικό TCS (PTC).

Τι βλέπουμε εδώ; Το πρώτο πράγμα που σας τραβάει την προσοχή είναι ότι το θερμίστορ PTC έχει ένα σπασμένο γράφημα και θα είναι δύσκολο ή αδύνατο να μετρήσετε έναν αριθμό τιμών θερμοκρασίας, αλλά το θερμίστορ NTC έχει ένα περισσότερο ή λιγότερο ομοιόμορφο γράφημα, αν και σαφώς μη γραμμικό. Τι σημαίνει αυτό; Χρησιμοποιώντας ένα θερμίστορ NTC είναι πιο εύκολο να μετρήσετε τη θερμοκρασία, επειδή είναι ευκολότερο να υπολογίσετε τη συνάρτηση με την οποία αλλάζουν οι τιμές του.

Για να μετατρέψετε τη θερμοκρασία σε αντίσταση, μπορείτε να διαβάσετε χειροκίνητα τις τιμές, αλλά αυτό είναι δύσκολο να το κάνετε στο σπίτι και θα χρειαστείτε ένα θερμόμετρο για να προσδιορίσετε τις πραγματικές τιμές της θερμοκρασίας περιβάλλοντος. Τα φύλλα δεδομένων ορισμένων εξαρτημάτων περιέχουν έναν τέτοιο πίνακα, για παράδειγμα, για μια σειρά θερμίστορ NTC από τη Vishay.

Στη συνέχεια, μπορείτε να οργανώσετε τη μετάφραση μέσω υποκαταστημάτων χρησιμοποιώντας τη λειτουργία if...else ή switchcase. Ωστόσο, εάν τέτοιοι πίνακες δεν παρέχονται στα φύλλα δεδομένων, πρέπει να υπολογίσετε τη συνάρτηση με την οποία αλλάζει η αντίσταση με την αύξηση της θερμοκρασίας.

Για να περιγράψουμε αυτή την αλλαγή υπάρχει η εξίσωση Steinhart-Hart.

όπου Α, Β και Γ είναι οι σταθερές του θερμίστορ που προσδιορίζονται με τη μέτρηση τριών θερμοκρασιών με διαφορά τουλάχιστον 10 βαθμών Κελσίου. Ταυτόχρονα, διάφορες πηγές υποδεικνύουν ότι για ένα τυπικό θερμίστορ NTC 10 kOhm είναι ίσα:

Σημείωμα:

Ποιος καταλαβαίνει καλά το τεχνικό κείμενο; αγγλικόςκαι αγαπά τους υπολογισμούς μπορείτε να διαβάσετε το ακόλουθο έγγραφο: https://www.bipm.org/utils/common/pdf/ITS-90/Guide-SecTh-Thermistor-Thermometry.pdf

Αυτό είναι ένα φυλλάδιο για τις μετρήσεις θερμοκρασίας θερμίστορ που εκδόθηκε από τη Συμβουλευτική Επιτροπή Θερμομέτρου (TAC).

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

Το B είναι ο συντελεστής βήτα και υπολογίζεται με βάση μετρήσεις αντίστασης σε δύο διαφορετικές θερμοκρασίες. Υποδεικνύεται είτε στο φύλλο δεδομένων (όπως φαίνεται παρακάτω) είτε υπολογίζεται ανεξάρτητα.

Σε αυτή την περίπτωση, το Β υποδεικνύεται με τη μορφή:

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

B = (ln(R1) - ln(R2)) / (1/T1 - 1/T2)

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

Εδώ το R1 είναι μια σταθερή αντίσταση, το θερμίστορ συνδέεται με την πηγή ισχύος και τα δεδομένα λαμβάνονται από το μέσο μεταξύ τους, το διάγραμμα υποδεικνύει συμβατικά ότι το σήμα παρέχεται στον ακροδέκτη A0 - αυτό είναι.

Για να υπολογίσετε την αντίσταση του θερμίστορ, μπορείτε να χρησιμοποιήσετε τον ακόλουθο τύπο:

Rthermistor=R1⋅((Vss/Voutput)−1)

Για να το μεταφράσετε σε γλώσσα κατανοητή για το Arduino, πρέπει να θυμάστε ότι το Arduino έχει ADC 10-bit, που σημαίνει ότι η μέγιστη ψηφιακή τιμή του σήματος εισόδου (τάση 5V) θα είναι ίση με 1023. Στη συνέχεια, υπό όρους:

  • D - πραγματική τιμή σήματος.

Rthermistor=R1⋅((Dmax /D)−1)

Τώρα το χρησιμοποιούμε για να υπολογίσουμε την αντίσταση και στη συνέχεια υπολογίζουμε τη θερμοκρασία του θερμίστορ χρησιμοποιώντας την εξίσωση βήτα. Το σκίτσο θα είναι ως εξής:

Ακόμη πιο δημοφιλής για τη μέτρηση της θερμοκρασίας με χρήση. Η Arduino βρήκε τον ψηφιακό αισθητήρα DS18B20. Επικοινωνεί με τον μικροελεγκτή μέσω διασύνδεσης 1 καλωδίου, μπορείτε να συνδέσετε πολλούς αισθητήρες (έως 127) σε ένα καλώδιο και για να αποκτήσετε πρόσβαση σε αυτούς θα πρέπει να μάθετε το αναγνωριστικό κάθε αισθητήρα.

Σημείωση: Πρέπει να γνωρίζετε το αναγνωριστικό ακόμα κι αν χρησιμοποιείτε μόνο 1 αισθητήρα.

Το διάγραμμα σύνδεσης για τον αισθητήρα ds18b20 με το Arduino μοιάζει με αυτό:

Αυτή η λειτουργία δεν εγγυάται τη σωστή λειτουργία κατά τη μέτρηση θερμοκρασιών άνω των 100 βαθμών Κελσίου.

Ο ψηφιακός αισθητήρας θερμοκρασίας DS18B20 αποτελείται από ένα ολόκληρο σύνολο εξαρτημάτων, όπως κάθε άλλο CIMS. Αυτήν εσωτερική δομήμπορείτε να παρακολουθήσετε παρακάτω:

Για να εργαστείτε με αυτό, πρέπει να κάνετε λήψη της βιβλιοθήκης Onewire για το Arduino και για τον ίδιο τον αισθητήρα συνιστάται να χρησιμοποιήσετε τη βιβλιοθήκη DallasTemperature.

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


Αυτοί οι αισθητήρες είναι δημοφιλείς και χρησιμοποιούνται συχνά για τη μέτρηση των επιπέδων υγρασίας και των θερμοκρασιών περιβάλλοντος. Στον παρακάτω πίνακα έχουμε υποδείξει τις κύριες διαφορές τους.

Το διάγραμμα σύνδεσης είναι αρκετά απλό:

    1 έξοδος - τροφοδοτικό;

    2 έξοδοι - δεδομένα;

    3 pin - δεν χρησιμοποιείται.

    Ο ακροδέκτης 4 είναι το κοινό καλώδιο.

Εάν ο αισθητήρας σας είναι κατασκευασμένος με τη μορφή μονάδας, θα έχει τρεις εξόδους και δεν θα απαιτείται αντίσταση - είναι ήδη κολλημένος στην πλακέτα.

Για να λειτουργήσει, χρειαζόμαστε τη βιβλιοθήκη dht.h που δεν είναι στο τυπικό σύνολο, επομένως πρέπει να την κατεβάσετε και να την εγκαταστήσετε στο φάκελο βιβλιοθήκες στο φάκελο με arduino IDE. Υποστηρίζει όλους τους αισθητήρες αυτής της οικογένειας:

    DHT 21 (AM2301);

    DHT 22 (AM2302, AM2321).

Σύναψη

Σήμερα, η δημιουργία του δικού σας σταθμού για τη μέτρηση της θερμοκρασίας και της υγρασίας είναι πολύ απλή χάρη στην πλατφόρμα Arduino. Το κόστος τέτοιων έργων είναι 3-4 εκατό ρούβλια. Για διάρκεια ζωής της μπαταρίας, αντί να εξάγει δεδομένα σε υπολογιστή, μπορεί να χρησιμοποιηθεί (τα περιγράψαμε σε πρόσφατο άρθρο), στη συνέχεια μπορεί να κατασκευαστεί μια φορητή συσκευή για χρήση τόσο στο σπίτι όσο και στο αυτοκίνητο. Γράψτε στα σχόλια τι άλλο θα θέλατε να μάθετε για απλά σπιτικά προϊόντα χρησιμοποιώντας το Arduino!

Ας συνδέσουμε έναν από τους διαθέσιμους αισθητήρες στο Arduino - έναν αισθητήρα θερμοκρασίας ή ένα θερμίστορ.

Ονομασία θερμίστορ στα διαγράμματα

Θερμίστορ- ημιαγωγός αντίσταση, η ηλεκτρική αντίσταση του οποίου εξαρτάται σημαντικά από τη θερμοκρασία. Όσο αυξάνεται η θερμοκρασία, η αντίσταση μειώνεται.

Αυτό που θέλουμε

Κατασκευάζουμε ένα κύκλωμα με ένα θερμίστορ και αλλάζουμε τον αριθμό των διόδων καύσης ανάλογα με τη θερμοκρασία.

Τι θα χρειαστείτε

Εκτός από όλα τα συνηθισμένα - ένα θερμίστορ. Χρησιμοποιούμε B57164-K0103.

Στάδια εργασίας

  • Σχέδιο συναρμολόγησης Νο. 1
  • Προσδιορισμός του εύρους μεταβολών θερμοκρασίας
  • Βελτίωση του σχήματος και του προγράμματος
  • Είμαστε ευχαριστημένοι με το αποτέλεσμα
  • Δημιουργούμε ιδέες.

Σχέδιο συναρμολόγησης Νο. 1

Χρησιμοποιούμε αντίσταση 10 KOm

Το κύκλωμα μοιάζει πολύ με το κύκλωμα με ένα κουμπί, αλλά τώρα αντί για το κουμπί βάζουμε ένα θερμίστορ και το συνδέουμε στην αναλογική είσοδο Α2.

Η αναλογική είσοδος μπορεί να διαφοροποιήσει την ισχύ του σήματος κατάντη. 0 είναι το ελάχιστο επίπεδο, 1023 είναι το μέγιστο. Λένε διαβάθμιση 10-bit (2 10 = 1024).

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

Πρόγραμμα:

void setup() (
pinMode(A2,INPUT); //A2 pin - είσοδος σήματος

Serial.begin(9600); //επικοινωνία με υπολογιστή 9600 bps
}
void loop() (
int t = analogRead(A2); //διαβάστε την τιμή από το A2
Serial.println(t); //γράψτε αυτήν την τιμή στη //σειριακή θύρα (για εμάς αυτό είναι USB)

καθυστέρηση(10); // περίμενε λίγο
}

Φλας το πρόγραμμα. Στην οθόνη βρίσκουμε το κουμπί "Serial Monitor", κάντε κλικ.

Κουμπί σειριακής παρακολούθησης

Οι αριθμοί εκτελούνται στο παράθυρο που ανοίγει - αυτή είναι μια τιμή υπό όρους ανάλογα με τη θερμοκρασία. Σημειώστε τον ελάχιστο αριθμό που καταφέρατε να παρατηρήσετε. Τώρα πιάστε προσεκτικά την αντίσταση - από τη ζεστασιά των χεριών σας η θερμοκρασία της θα αυξηθεί και οι αριθμοί στην οθόνη θα αυξηθούν. Ας είναι αυτή η μέγιστη θερμοκρασία.

Βελτιώνουμε το σχέδιο.

Ας συνδέσουμε 3 διόδους στο κύκλωμα, «κρεμώντας» τις στη θύρα 10-12 της πλακέτας.

Προσοχή με τις διόδους.

Αφήστε τη μία δίοδο να ανάψει στην ελάχιστη θερμοκρασία, 2 όταν αυξάνεται η θερμοκρασία και και τις 3 στη μέγιστη θερμοκρασία.

Για να γίνει αυτό, θα βαθμονομήσουμε τις εισερχόμενες μετρήσεις στο πρόγραμμα. Έστω η ελάχιστη τιμή 540, η μέγιστη (όταν θέλουμε να ανάψουμε και τις τρεις διόδους) - 600.

Ας ορίσουμε την τιμή της μεταβλητής led ως εξής:

int led = χάρτης(t,540,600,0,3);

Έτσι, όταν οι ενδείξεις της μεταβλητής t αλλάξουν από 540 σε 600 μονάδες, η τιμή της μεταβλητής led θα αλλάξει από 0 σε 3.

Συγγραφή προγράμματος

Κενό setup() (

pinMode(A2,INPUT); //A2 pin - είσοδος σήματος

Serial.begin(9600); //επικοινωνία με υπολογιστή 9600 bps

για (int i=10; i<=12; i++) {

pinMode(i,OUTPUT);

void loop() (

int t = analogRead(A2); //διαβάστε την τιμή από το A2

int led = χάρτης(t,540,600,0,3);

if (led>=1) (digitalWrite(10,HIGH);)

other (digitalWrite(10,LOW);)

if (led>=2) (digitalWrite(11,HIGH);)

other (digitalWrite(11,LOW);)

if (led>=3) (digitalWrite(12,HIGH);)

other (digitalWrite(12,LOW);)

Serial.println(t); //γράψτε αυτήν την τιμή στη //σειριακή θύρα (για εμάς αυτό είναι USB)

καθυστέρηση(10); // περίμενε λίγο

Λοιπόν, όλα φαίνεται να λειτουργούν.

Σκεφτείτε πού μπορείτε να χρησιμοποιήσετε το συναρμολογημένο κύκλωμα.

Τι γίνεται αν οι δίοδοι αντικατασταθούν με κάτι άλλο;

Δοκιμάστε να συνδέσετε μερικές ακόμη διόδους για να εμφανίσετε τη θερμοκρασία με μεγαλύτερη ακρίβεια.

αισθητήρες ελέγχου θερμοκρασίας νερού