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

Φτιάξτο μόνος σου μετεωρολογικός σταθμός.

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

(Πολλές φωτογραφίες κάτω από το κόψιμο!)

Πρώτον, θα εξετάσω τα στοιχεία, δεν θα δώσω συνδέσμους, καθώς τα προϊόντα στο eBay (στον λογαριασμό μου) έχουν πάει στο αρχείο. Αγόρασα πολλά εξαρτήματα χαλαρά στο eBay. Δοκίμασα τη δημοπρασία για πρώτη φορά, αγόραζα πάντα "αγοράστε το τώρα". Τι μπορώ να πω, εάν δεν βιαστείτε να αγοράσετε, τότε ορισμένα εξαρτήματα μπορούν να αγοραστούν φθηνότερα (μερικές φορές η διαφορά είναι δύο φορές).

Αισθητήρας πίεσης BMP085
Αυτός είναι ο κύριος αισθητήρας. Όταν το είδα στο eBay, συνειδητοποίησα ότι ήθελα να φτιάξω έναν μετεωρολογικό σταθμό στο σπίτι.
Ο αισθητήρας έφτασε σε έναν συνηθισμένο φάκελο, επικολλημένο με ένα μικρό περιτύλιγμα με φυσαλίδες μέσα.

Μέσα στον φάκελο ήταν η επαγγελματική κάρτα του πωλητή και ο αισθητήρας, συσκευασμένα σε αντιστατική σακούλα και τυλιγμένα σε άλλη στρώση μεμβράνης με φυσαλίδες

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

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




Όλα θα ήταν καλά, αλλά η σήμανση των επαφών εφαρμόζεται σε μια κατοπτρική εικόνα.
Ο αισθητήρας συνδέεται μέσω του διαύλου I2C και τροφοδοτείται από 3,3 V. Δηλαδή χρειάζονται 4 καλώδια για κανονική λειτουργία (+, -, SDA, SCL)
Μπορείτε να ανακρίνετε τον αισθητήρα με 2 τρόπους: είτε μέσω της βιβλιοθήκης είτε χρησιμοποιώντας τις λειτουργίες απευθείας στο σκίτσο.
Παράδειγμα προγράμματος:

#περιλαμβάνω

#define BMP085_ADDRESS 0x77 // Διεύθυνση I2C του BMP085

Const ανυπόγραφο char OSS = 0; // Ρύθμιση υπερδειγματοληψίας

// Τιμές βαθμονόμησης
int ac1;
intac2;
intac3;
ανυπόγραφο int ac4?
ανυπόγραφο int ac5;
ανυπόγραφο int ac6?
int b1;
intb2;
intmb;
int mc?
intmd?

σύντομη θερμοκρασία?
μακρά πίεση?

Κενή ρύθμιση()
{
Serial.begin(9600);
Wire.begin();
bmp085Calibration();
}

Void loop()
{
θερμοκρασία = bmp085GetTemperature(bmp085ReadUT());
πίεση = bmp085GetPressure(bmp085ReadUP());
Serial.print("Θερμοκρασία: ");
Serial.print(θερμοκρασία/10,0, DEC);
Serial.println("C");
Serial.print("Πίεση: ");
Serial.print(pressure/133.322, DEC);
Serial.println("mm Hg");
Serial.println();
καθυστέρηση (1000);
}

Void bmp085 Calibration()
{
ac1 = bmp085ReadInt(0xAA);
ac2 = bmp085ReadInt(0xAC);
ac3 = bmp085ReadInt(0xAE);
ac4 = bmp085ReadInt(0xB0);
ac5 = bmp085ReadInt(0xB2);
ac6 = bmp085ReadInt(0xB4);
b1 = bmp085ReadInt(0xB6);
b2 = bmp085ReadInt(0xB8);
mb = bmp085ReadInt(0xBA);
mc = bmp085ReadInt(0xBC);
md = bmp085ReadInt(0xBE);
}

Σύντομο bmp085GetTemperature (unsigned int ut)
{
μακρύ x1, x2;
x1 = (((long)ut - (long)ac6)*(long)ac5) >> 15;
x2 = ((μακρύ) mc<< 11)/(x1 + md);
b5 = x1 + x2;

Επιστροφή ((b5 + 8)>>4);
}

Long bmp085GetPressure (unsigned long up)
{
μήκος x1, x2, x3, b3, b6, p;
ανυπόγραφο μακρύ b4, b7;
b6 = b5 - 4000;
// Υπολογίστε το B3
x1 = (b2 * (b6 * b6)>>12)>>11;
x2 = (ac2 * b6)>>11;
x3 = x1 + x2;
b3 = (((((μακρύ)ac1)*4 + x3)<>2;
// Υπολογίστε το Β4
x1 = (ac3 * b6)>>13;
x2 = (b1 * ((b6 * b6)>>12))>>16;
x3 = ((x1 + x2) + 2)>>2;
b4 = (ac4 * (unsigned long)(x3 + 32768))>>15;
b7 = ((unsigned long)(up - b3) * (50000>>OSS));
εάν (β7< 0x80000000)
p = (b7<<1)/b4;
αλλού
p = (b7/b4)<<1;
x1 = (p>>8) * (p>>8);
x1 = (x1 * 3038)>> 16;
x2 = (-7357 * p)>>16;
p += (x1 + x2 + 3791)>>4;
επιστροφή p;
}

// Διαβάστε 1 byte από το BMP085 στη διεύθυνση "address"
char bmp085Read (ανυπόγραφη διεύθυνση char)
{
ανυπόγραφα δεδομένα χαρακτήρων.

wire.write(διεύθυνση);
Wire.endTransmission();
Wire.requestFrom(BMP085_ADDRESS, 1);
while(!Wire.available())
;
επιστροφή Wire.read();
}

Int bmp085ReadInt(ανυπόγραφη διεύθυνση χαρακτήρων)
{
ανυπόγραφο char msb, lsb;
Wire.beginTransmission(BMP085_ADDRESS);
wire.write(διεύθυνση);
Wire.endTransmission();
Wire.requestFrom(BMP085_ADDRESS, 2);
while(Wire.available()<2)
;
msb = Wire.read();
lsb = Wire.read();
επιστροφή (int) msb<<8 | lsb;
}

// Διαβάστε την τιμή θερμοκρασίας χωρίς αντιστάθμιση
ανυπόγραφο int bmp085ReadUT()
{
ανυπόγραφο int ut?
// Γράψτε το 0x2E στον καταχωρητή 0xF4
// Αυτό ζητά μια ένδειξη θερμοκρασίας
Wire.beginTransmission(BMP085_ADDRESS);
Wire.write(0xF4);
Wire.write(0x2E);
Wire.endTransmission();
// Περιμένετε τουλάχιστον 4,5 ms
καθυστέρηση(5);
// Διαβάστε δύο byte από τους καταχωρητές 0xF6 και 0xF7
ut = bmp085ReadInt(0xF6);
επιστροφή ut?
}

// Διαβάστε την τιμή μη αντισταθμισμένης πίεσης
ανυπόγραφο μακρύ bmp085ReadUP()
{
ανυπόγραφο char msb, lsb, xlsb;
ανυπόγραφο long up = 0;
// Γράψτε 0x34+(OSS<<6) into register 0xF4
// Ζητήστε ένδειξη πίεσης με ρύθμιση υπερδειγματοληψίας
Wire.beginTransmission(BMP085_ADDRESS);
Wire.write(0xF4);
Wire.write(0x34 + (OSS<<6));
Wire.endTransmission();
// Αναμονή για μετατροπή, ο χρόνος καθυστέρησης εξαρτάται από το OSS
καθυστέρηση (2 + (3<// Ανάγνωση καταχωρητή 0xF6 (MSB), 0xF7 (LSB) και 0xF8 (XLSB)
Wire.beginTransmission(BMP085_ADDRESS);
Wire.write(0xF6);
Wire.endTransmission();
Wire.requestFrom(BMP085_ADDRESS, 3);
// Περιμένετε να γίνουν διαθέσιμα δεδομένα
while(Wire.available()< 3)
;
msb = Wire.read();
lsb = Wire.read();
xlsb = Wire.read();
επάνω = (((μη υπογεγραμμένο μακρύ) msb<< 16) | ((unsigned long) lsb << 8) | (unsigned long) xlsb) >> (8-OSS);
επιστροφή επάνω?
}


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

Arduino Nano v3.0
Αυτή είναι η καρδιά ολόκληρου του μετεωρολογικού σταθμού. Με απλά λόγια, το χειριστήριο είναι σε μικροσκοπικό μέγεθος.
Αγορασμένος
Δεν θα μιλήσω λεπτομερώς για τον ελεγκτή, καθώς αυτό έχει ήδη γίνει πριν από εμένα:


Η συσκευασία με το lightake ήταν προκατασκευασμένη, το χειριστήριο ήρθε σε συσκευασία με καλώδιο USB και ένα Arduino σε σφραγισμένη αντιστατική σακούλα.

Για να υπολογίσετε το μέγεθος, δίπλα στο Arduino βάλτε ένα νόμισμα με ονομαστική αξία 1 ρούβλι.

Πίνακας ελεγκτή από κοντά



Το καλώδιο USB είναι καλό, με δακτύλιο φερρίτη. Τροφοδοτείται από το Arduino μέσω καλωδίου USB. Μπορείτε να κατεβάσετε το περιβάλλον ανάπτυξης (σελίδα λήψης). Η γλώσσα είναι «C», δεν υπήρξαν προβλήματα με το mastering της, αφού προγραμματίζω πολύ σε αυτήν στη δουλειά.

οθόνη LCD
Στη δουλειά στους κάδους βρήκα μια συμβατή οθόνη LCD 1602. Έπρεπε να ασχοληθώ με τη σύνδεση, καθώς δεν βρήκα φύλλο δεδομένων για αυτήν. Ως αποτέλεσμα, η οθόνη LCD κέρδισε.

Αλλά μετά από μια σύντομη λειτουργία, παρατήρησα ότι αυτή η οθόνη δεν είναι αρκετή για μένα και δεν θα μπορώ να εμφανίσω περισσότερα δεδομένα, καθώς έχει μόνο 2 γραμμές των 16 χαρακτήρων η καθεμία. Στην αρχή φαίνεται ότι αυτές οι παράμετροι είναι αρκετές, αλλά όταν ξεκινάς τον προγραμματισμό, καταλαβαίνεις ότι μπορείς να στριμώξεις το πολύ 3-4 παραμέτρους. Και αν φτιάξετε ένα μενού (σκέφτηκα να φτιάξω ένα μενού σε αυτήν την οθόνη), τότε απομένουν 1-2 ελεύθερος χώρος για παραμέτρους.
Ως αποτέλεσμα, άρχισα να ψάχνω για άλλη οθόνη. Στην αρχή κοίταξα την οθόνη γραφικών από το Nokia 3310 και μάλιστα συμμετείχα στη δημοπρασία του eBay για να το αγοράσω, αλλά δεν μου βγήκε (για το οποίο είμαι πολύ χαρούμενος), οπότε αναγκάστηκα να εγκαταλείψω αυτήν την οθόνη. Τώρα καταλαβαίνω ότι θα ήταν πολύ μικρό για τους σκοπούς μου, καθώς υπάρχει κάτι για να συγκρίνω.
Κατά την περιήγηση στις ασπίδες του Arduino τυχαία, συνάντησα την οθόνη γραφικών 12864 στο χειριστήριο ST7920. Αυτή η οθόνη έχει το σωστό μέγεθος και καλή ανάλυση για τις ανάγκες μου (128x64). Δηλαδή, μπορείτε να τοποθετήσετε με ασφάλεια 6-7 γραμμές των 20 χαρακτήρων σε μια κανονικά αναγνώσιμη γραμματοσειρά. Δεδομένου ότι η οθόνη είναι γραφική, εκτός από κείμενο σε διαφορετικές γραμματοσειρές, μπορούν να τοποθετηθούν και γραφικά. Με λίγα λόγια, αυτό ακριβώς χρειαζόμουν, όλα ήταν παρόντα σε αυτήν την οθόνη, οπότε δεν άντεξα και παρήγγειλα.
Το δέμα έφτασε γρήγορα και συσκευάστηκε ως στάνταρ: ένα περιτύλιγμα με φυσαλίδες, μέσα υπήρχε ένα άλλο στρώμα περιτυλίγματος με φυσαλίδες και μια οθόνη σε μια αντιστατική σακούλα:






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




Για να συνδέσω γρήγορα την οθόνη με το Arduino, κόλλησα μια γραμμή επαφών στις ακίδες LCD. Η οθόνη LCD μπορεί να συνδεθεί μέσω σειριακού διαύλου και παράλληλα. Επέλεξα την πρώτη επιλογή, αφού υπάρχουν τόσο λίγες δωρεάν επαφές Arduino.
Σύνδεση (λήφθηκε από τον Ιστό):

- Ο ακροδέκτης 1 (GND) συνδέεται με τον κοινό δίαυλο
- Ο ακροδέκτης 2 (VCC) είναι συνδεδεμένος στη ράγα ισχύος +5V και η κατανάλωση ρεύματος είναι σχετικά μικρή και η οθόνη μπορεί να τροφοδοτηθεί από τον ενσωματωμένο ρυθμιστή Arduino.
- Οι ακίδες 4, 5 και 6 συνδέονται στις ψηφιακές εξόδους Arduino, σχηματίζοντας τη σειριακή διεπαφή SPI:
pin 4 - (RS) - αντιστοιχεί στη γραμμή CS (για παράδειγμα 7)
pin 5 - (RW) - αντιστοιχεί στη γραμμή MOSI (για παράδειγμα 8)
pin 6 - (E) - αντιστοιχεί στη γραμμή SCK (για παράδειγμα 3)
Οι αριθμοί pin Arduino μπορεί να είναι οτιδήποτε, το κύριο πράγμα είναι να μην ξεχάσετε να τους υποδείξετε σωστά αργότερα στο κείμενο του προγράμματος κατά την προετοιμασία της οθόνης.
- Ο ακροδέκτης 15 (PSB) είναι συνδεδεμένος στον κοινό δίαυλο.
- Οι ακίδες 19 (A) και 20 (K) είναι τροφοδοσία με οπίσθιο φωτισμό (+5V και GND αντίστοιχα). Για να ρυθμίσετε τη φωτεινότητα του οπίσθιου φωτισμού, μπορείτε να χρησιμοποιήσετε μια μεταβλητή αντίσταση 10 kΩ συνδεδεμένη μεταξύ των ράγες ισχύος και του GND. Η τάση από τον κινητήρα του εφαρμόζεται στον ακροδέκτη 19 της οθόνης.
Σύμφωνα με αυτήν την οδηγία, συνέδεσα τα πάντα εκτός από τον οπίσθιο φωτισμό. Χρησιμοποίησα το Arduino PWM ως ισχύ οπίσθιου φωτισμού.
Για να συνδεθεί μέσω προγραμματισμού η οθόνη LCD με το Arduino, χρησιμοποιείται η βιβλιοθήκη u8glib. Μπορείτε να κάνετε λήψη. Εάν υπάρχουν προβλήματα λήψης, τότε μπορώ να ανεβάσω τη βιβλιοθήκη στο narod.ru.
Η ίδια η βιβλιοθήκη δεν είναι περίπλοκη και σας επιτρέπει να εμφανίζετε κείμενο με διαφορετικές γραμματοσειρές, να σχεδιάζετε μια γραμμή, να σχεδιάζετε τα πιο απλά γεωμετρικά σχήματα (ορθογώνιο, κύκλος), να εμφανίζετε τις εικόνες σας προετοιμασμένες με ειδικό τρόπο. Κατ 'αρχήν, αυτό το εργαλείο επαρκεί για τις περισσότερες εργασίες.
Εδώ είναι το αποτέλεσμα ενός απλού προγράμματος:

Το ίδιο το πρόγραμμα:

#include "U8glib.h"

U8GLIB_ST7920_128X64 u8g(3, 9, 8, U8G_PIN_NONE); // SPI E=3, RW=9, RS=8

// Υπορουτίνα για τον προσδιορισμό της ελεύθερης μνήμης
int freeRam()(
extern int __heap_start, *__brkval;
intv?
επιστροφή (int) &v - (__brkval == 0? (int) &__heap_start: (int) __brkval);
}

Ρύθμιση κενού (κενό) (
u8g.setFont(u8g_font_6x10); // γραμματοσειρά
u8g.setRot180(); // Γυρίστε την οθόνη
analogWrite(6, 115); // Ρύθμιση φωτεινότητας οθόνης (άνοδος οπίσθιου φωτισμού σε 6 ακίδες)
}

Κενό βρόχο (κενό) (
u8g.firstPage();
κάνω(

u8g.setPrintPos(1, 12); // θέση
u8g.print("Γεια!!!"); // Έξοδος κειμένου
u8g.drawBox(0,22,128,9); // Γεμίστε το ορθογώνιο με λευκό
u8g.setColorIndex(0); // λευκό μελάνι, μαύρο φόντο
u8g.setPrintPos(1, 30); // θέση
u8g.print("Word..."); // Έξοδος κειμένου

U8g.setColorIndex(1); // λευκό μελάνι, μαύρο φόντο
u8g.setPrintPos(1, 50); // θέση
u8g.print("Μετά την έναρξη ="); // Έξοδος κειμένου
u8g.setPrintPos(85, 50); // θέση
u8g.print(millis() / 1000); // αριθμός εξόδου δευτερολέπτων μετά την έναρξη
u8g.setPrintPos(1, 64); // θέση
u8g.print(freeRam()); // Έξοδος πόση μνήμη χρησιμοποιείται
) while(u8g.nextPage());

καθυστέρηση (200);
}

Ρολόι πραγματικού χρόνου DS1307
Ένα άλλο στοιχείο για τον μετεωρολογικό σταθμό μου. Αυτή η ασπίδα έχει ρολόι πραγματικού χρόνου. Τα παρήγγειλα στο eBay. Ο πωλητής έστειλε ένα μαντήλι ρολογιού σε ένα εξωπραγματικά μεγάλο κουτί


Μέσα στο κουτί υπήρχαν δύο φύλλα Α4 με διαφήμιση και ένα μαντήλι ρολογιού τυλιγμένο σε σελοφάν


Θέλω να σημειώσω ότι η χρέωση δεν υπερβαίνει το μέγεθος των 2 ρούβλια. κέρμα, και το κουτί είχε μέγεθος 13x15x5 cm.
Η σανίδα ήταν συσκευασμένη σε αντιστατική σακούλα

Σάλι από κοντά



Έπρεπε να ασχοληθώ με αυτήν την ενότητα. Πρώτον, υπήρχαν δυσκολίες σύνδεσης. Και δεύτερον, δεν υπάρχει χαλαζίας σε αυτόν τον πίνακα. Αν ήξερα ότι θα περνούσα τόσο χρόνο στη μονάδα, τότε πιθανότατα θα την είχα συναρμολογήσει μόνος μου, αφού το δίκτυο είναι γεμάτο σχήματα. Το απλούστερο κύκλωμα περιέχει 4-5 εξαρτήματα.
Σχετικά με τη σύνδεση. Βρήκα μια βιβλιοθήκη που έλεγε ότι η διεπαφή I2C μπορεί να συνδεθεί όχι με τις συνηθισμένες αναλογικές εισόδους Arduino (A4 και A5), αλλά με οποιεσδήποτε διακριτές. Έκανε όπως γράφτηκε. Στην αρχή, τίποτα δεν λειτούργησε, μετά από έναν μακρύ χορό με ένα ντέφι, το ρολόι έκλεισε. Λοιπόν, σκέφτηκα, αυτό ήταν, τα προβλήματα τελείωσαν, αλλά αφού προσπάθησα να συνδέσω το ίδιο module με ένα άλλο Arduino, ο χορός με το ντέφι συνεχίστηκε. Πέρασα πολύ χρόνο ψάχνοντας για μια λύση σε αυτό το πρόβλημα και σχεδόν παντού υποδεικνύονταν είτε λανθασμένη σύνδεση είτε απουσία αντιστάσεων έλξης στις ακίδες SCL και SDA. Ήθελα ήδη να ανέβω στην πλακέτα με ένα κολλητήρι, αλλά σε ένα φόρουμ έπεσα κατά λάθος σε έναν κωδικό όπου έλεγε ότι το SCL και το SDA πρέπει να συνδεθούν σε τυπικές θύρες I2C στο Arduino. Μετά την τυπική σύνδεση, όλα λειτούργησαν αμέσως.
Τώρα για τον χαλαζία. Δεν ξέρω τι είδους χαλαζία έβαλαν εκεί οι Κινέζοι, αλλά τα ρολόγια με τέτοιο χαλαζία έτρεχαν 10-11 δευτερόλεπτα την ημέρα. Αυτό το σφάλμα είναι 5 λεπτά το μήνα και 1 ώρα το χρόνο. Δεν χρειάζεσαι τέτοιο ρολόι. Έπρεπε να μπω ξανά στο διαδίκτυο και να ψάξω πώς να διορθώσω αυτό το σφάλμα. Η πρώτη λύση που προέκυψε λέει ότι πρέπει να γειώσεις τον χαλαζία. Το έκανε - μηδέν αποτέλεσμα. Βρήκα κάπου αλλού ότι έπρεπε να βρω μια παλιά μητρική πλακέτα και να ξεκολλήσω το ρολόι quartz από εκεί. Έγινε - το αποτέλεσμα είναι. Τώρα το ρολόι τρέχει όχι κατά 10-11 δευτερόλεπτα, αλλά κατά 1,5 δευτερόλεπτο την ημέρα. Ας πούμε ότι έγινε καλύτερο, αλλά απέχει πολύ από το ιδανικό. Δεδομένου ότι είναι πιο απρόθυμο να ασχοληθεί με το κολλητήρι, αποφασίστηκε να ρυθμιστεί το ρολόι προγραμματικά, δηλαδή, μία φορά την ημέρα, να ρυθμιστεί το ρολόι στην επιθυμητή τιμή. Μετά από 10 ημέρες, το ρολόι δεν είχε περισσότερο από ένα δευτερόλεπτο. Η μέθοδος είναι καλή, αλλά μόνο όταν η συσκευή χρονισμού Arduino είναι συνδεδεμένη στο ρεύμα, διαφορετικά το ρολόι λειτουργεί με μπαταρία και εξακολουθεί να τρέχει.
Πρόγραμμα μικρών δοκιμών:

#include "Wire.h"
#define DS1307_I2C_ADDRESS 0x68 // SDA A4, SCL A5

Byte decToBcd (byte val)
{
επιστροφή ((val/10*16) + (val%10));
}

Byte bcdToDec (τιμή byte)
{
επιστροφή ((val/16*10) + (val%16));
}

Κενό setDateDs1307 (byte δευτερόλεπτο, // 0-59
byte λεπτό, // 0-59
byte hour) // 0-99
{

Wire.write(0);
Wire.write(decToBcd(second));
Wire.write(decToBcd(λεπτό));
Wire.write(decToBcd(ώρα));
Wire.endTransmission();
}

Άκυρο getDateDs1307(byte *δευτερόλεπτο,
byte*λεπτό,
byte*hour)
{

Wire.beginTransmission(DS1307_I2C_ADDRESS);
Wire.write(0);
Wire.endTransmission();

Wire.requestFrom(DS1307_I2C_ADDRESS, 3);

*second = bcdToDec(Wire.read());
*minute = bcdToDec(Wire.read());
*hour = bcdToDec(Wire.read());
}

Κενή ρύθμιση()
{
byte δευτερόλεπτο, λεπτό, ώρα.
Wire.begin();
Serial.begin(9600);

Δεύτερος = 45;
λεπτά = 5;
ώρες = 16;

SetDateDs1307 (δευτερόλεπτο, λεπτό, ώρα);
}

Void loop()
{
byte δευτερόλεπτο, λεπτό, ώρα.

GetDateDs1307(&δευτερόλεπτο, &λεπτό, &ώρα);
Serial.print(hour, DEC);
σειριακή εκτύπωση(":");
Serial.print(λεπτά, DEC);
σειριακή εκτύπωση(":");
Serial.println(δεύτερο, DEC);

καθυστέρηση (1000);
}


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

Αισθητήρας θερμοκρασίας και υγρασίας DHT11
Δεν υπάρχουν πολλά να πούμε για αυτόν τον αισθητήρα. Δεν θα το χρησιμοποιούσα καν αν δεν χρειαζόμουν υγρασία. Δυστυχώς, δεν το έβγαλα φωτογραφία όταν το έλαβα, οπότε δεν θα υπάρχουν φωτογραφίες. Παρακάτω μπορείτε να δείτε φωτογραφίες του αισθητήρα, όπου τον συνέδεσα με το Arduino. Η σύνδεση του αισθητήρα είναι απλή (+, ψηφιακή έξοδος, -). Συνήθως, οι αισθητήρες κατασκευάζονται με τέσσερις ακίδες. Με αυτόν τον παράγοντα μορφής, η τρίτη επαφή δεν συνδέεται με τίποτα.
Για να συνδεθείτε στο Arduino, μπορείτε να χρησιμοποιήσετε τη βιβλιοθήκη. Μπορείτε να κάνετε λήψη.
Ένα μικρό πρόγραμμα δοκιμής με έξοδο πληροφοριών στην οθόνη LCD 1602:

// περιλαμβάνει τον κώδικα της βιβλιοθήκης:
#περιλαμβάνω
#περιλαμβάνω

// Δήλωση αντικειμένων
dht11 Dht11;
LiquidCrystal lcd(12, 11, 6, 5, 4, 3);

#define DHT11PIN 7
int i?

Κενή ρύθμιση()
{
lcd.begin(16, 2);
lcd.print("Κατάσταση: ");
i=0;
}

Void loop()
{
int chk = DHT11.read(DHT11PIN);
lcd.setCursor(8, 0);
διακόπτης (chk)
{
case 0: lcd.print("OK"); break;// lcd.setCursor(11, 0); lcd.print(millis()/2000); Διακοπή;
case -1: lcd.print("Checksum error"); merr(); Διακοπή;
case -2: lcd.print("Σφάλμα λήξης χρόνου"); merr(); Διακοπή;
προεπιλογή: lcd.print("Άγνωστο σφάλμα"); merr(); Διακοπή;
}
καθυστέρηση (500);
lcd.setCursor(15, 0);
διακόπτης (i)
{
case 0: lcd.print("^"); lcd.setCursor(15, 1); lcd.print(" ");break;
περίπτωση 1: lcd.print("v"); lcd.setCursor(15, 1); lcd.print(" ");break;
προεπιλογή: lcd.setCursor(15, 1); lcd.print("E"); Διακοπή;
}
i=i+1;
αν (i>1) i=0;
lcd.setCursor(0, 1);
lcd.print("H=");
lcd.setCursor(2, 1);
lcd.print((float)DHT11.humidity, 0);
lcd.setCursor(4, 1);
εκτύπωση lcd("%");
lcd.setCursor(8, 1);
lcd.print("T=");
lcd.setCursor(10, 1);
lcd.print((float)DHT11.temperature, 0);
lcd.setCursor(12, 1);
lcd.print("C");

Void mErr()
{
lcd.setCursor(2, 1);
lcd.print("**");
lcd.setCursor(10, 1);
lcd.print("**");
i=5;
}


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

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

Πρώτα, συναρμολόγησα τα πάντα στο τραπέζι με τη βοήθεια ειδικής καλωδίωσης. Έγραψα ένα δοκιμαστικό πρόγραμμα και το ανέβασα στον ελεγκτή.



Στην πραγματικότητα, το μπλε χρώμα του οπίσθιου φωτισμού είναι πολύ πιο φωτεινό. Ακόμη και στην ελάχιστη φωτεινότητα (Bright=5) το πλαίσιο είναι εκτεθειμένο.

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



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

Μητρική πλακέτα με ασπίδες και πλακέτα Arduino τοποθετημένη.

Έτσι μοιάζει μια πλήρης σύνδεση με τη μητρική πλακέτα


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

Το κύριο πρόβλημα τοποθέτησης στη θήκη είναι να κόψετε ομοιόμορφα το αυλάκι για την οθόνη LCD. Όσο κι αν προσπάθησα, πάλι δεν μου βγήκε τέλεια. Τα κενά σε ορισμένα σημεία ήταν λίγο περισσότερα από 1 mm. Για να φαίνονται όλα προσεγμένα, πήρα ένα μαύρο στεγανωτικό για το ενυδρείο και γέμισα όλες τις ρωγμές, ενώ ταυτόχρονα προσάρτησα την οθόνη στο συγκεκριμένο σφραγιστικό. Αφού στεγνώσει το στεγανωτικό, έκοψα την περίσσεια από έξω. Σε έντονο φως, το στεγανωτικό είναι ορατό και σε κανονικό φως, όλα συγχωνεύονται με τη θήκη.
Έτσι φαίνεται η θήκη από μέσα με εγκατεστημένη την οθόνη LCD και τη μητρική πλακέτα.

Έτσι φαίνεται από έξω σε έντονο φως (συγγνώμη για τα δακτυλικά αποτυπώματα, τα είδα όταν τακτοποιούσα τις φωτογραφίες).

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

Έτσι φαίνεται το κασκόλ με κουμπιά:



Έτσι φαίνεται ο πίνακας:


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

Τώρα βάζουμε τα πάντα στο σώμα
Χωρίς κουμπιά σύνδεσης:


Με σύνδεση κουμπιών:

Κλείστε το κουτί και ενεργοποιήστε το. Όλα λειτουργούν καλά, τα κουμπιά λειτουργούν όπως θα έπρεπε.

Στο τέλος δημοσιεύω ένα σύντομο βίντεο της συσκευής σε διάφορες λειτουργίες:
http://www.youtube.com/watch?v=KsiVaUWkXNA&feature=youtu.be
Για όσους δεν βλέπουν το βίντεο εδώ, εδώ είναι ο σύνδεσμος

Ήρθε η ώρα να τελειώσει η κριτική.
Θα γράψω λίγα λόγια για το πρόγραμμα και μετά σύντομα συμπεράσματα. Όταν έγραψα το πρόγραμμα, δεν πίστευα ότι θα έμπαινα στο όριο των 30720 byte πολύ γρήγορα.


Έπρεπε να βελτιστοποιήσω τον κώδικα. Μετακίνησε πολλά κομμάτια κώδικα σε υπορουτίνες. Ποτέ δεν θα πίστευα ότι μια δήλωση switch ... case σε μια μεταγλωττισμένη μορφή καταλαμβάνει περισσότερο χώρο από πολλές αν ... αλλιώς. Η σωστή δήλωση μεταβλητών εξοικονομεί επίσης χώρο. Εάν δηλώσετε έναν πίνακα μεγάλο, αν και είναι πολύ πιθανό να τα βγάλετε πέρα ​​με byte, τότε η υπέρβαση της μνήμης φτάνει τα 500 byte, ανάλογα με το μέγεθος του πίνακα. Όταν γράφετε ένα πρόγραμμα, δεν το σκέφτεστε και μόνο αργότερα, όταν αναλύετε το πρόγραμμα, συνειδητοποιείτε ότι κάνατε κάποια πράγματα λάθος και αρχίζετε να βελτιστοποιείτε τον κώδικα. Αφού επιλύθηκαν τα προβλήματα με το μέγεθος του προγράμματος, αντιμετώπισα έναν περιορισμό της μνήμης RAM. Αυτό εκφράστηκε στο γεγονός ότι το πρόγραμμα άρχισε να κρέμεται μετά τη φόρτωση. Έπρεπε να μπω σε μια υπορουτίνα για τον υπολογισμό της ελεύθερης μνήμης RAM. Ως αποτέλεσμα, αναγκάστηκα να εγκαταλείψω έναν αλγόριθμο πρόβλεψης καιρού, καθώς πρέπει να εμφανίζει εικονίδια στην οθόνη. Ο ίδιος ο αλγόριθμος λειτουργεί, αλλά η έξοδος των εικονιδίων έπρεπε να δεσμευτεί. Έχω ακόμα ιδέες για το πώς να βελτιστοποιήσω τον κώδικα, αλλά στο εγγύς μέλλον θα αφήσω τη συσκευή να λειτουργεί ως έχει για να αξιολογήσω την απόδοση και να εντοπίσω όλα τα σφάλματα.

Τώρα μερικά συμπεράσματα
Μειονεκτήματα
1) Τιμή. Η δικαιολογία για αυτό το μείον είναι ότι ένα χόμπι δεν είναι ποτέ φθηνό.

πλεονεκτήματα
1) Μεγάλη λειτουργικότητα της συσκευής
2) Η επέκταση της λειτουργίας περιορίζεται μόνο από τον ελεγκτή που χρησιμοποιείται και τη δική σας επιθυμία
3) Αισθητική απόλαυση από τον στοχασμό και ηθική ικανοποίηση από το γεγονός ότι παρόλα αυτά συναρμολόγησα και ολοκλήρωσα αυτή τη συσκευή

Σκοπεύω να αγοράσω +86 Προσθήκη στα αγαπημένα Μου άρεσε η κριτική +137 +304

Κάπως έτσι, ενώ περπατούσα στην πόλη, είδα ένα νέο κατάστημα ηλεκτρονικών ραδιοφώνου που είχε ανοίξει. Πηγαίνοντας σε αυτό, βρήκα έναν μεγάλο αριθμό ασπίδων για το Arduino. Είχα ένα Arduino Uno και ένα Arduino Nano στο σπίτι και μου ήρθε αμέσως η ιδέα να παίξω με πομπούς σήματος από απόσταση. Αποφάσισα να αγοράσω τον φθηνότερο πομπό και δέκτη στα 433 MHz:

Πομπός σήματος.


δέκτης σήματος.

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

Ο πομπός έχει τα ακόλουθα χαρακτηριστικά:
1. Μοντέλο: MX-FS-03V
2. Ακτίνα δράσης (εξαρτάται από την παρουσία μπλοκαρισμένων αντικειμένων): 20-200 μέτρα
3. Τάση λειτουργίας: 3,5 -12V
4. Διαστάσεις μονάδας: 19*19mm
5. Διαμόρφωση σήματος: AM
6. Ισχύς πομπού: 10mW
7. Συχνότητα: 433MHz
8. Απαιτούμενο μήκος εξωτερικής κεραίας: 25cm
9. Εύκολη σύνδεση (μόνο τρία καλώδια): DATA ; VCC ; Γη.

Χαρακτηριστικά μονάδας λήψης:
1. Τάση λειτουργίας: DC 5V
2. Ρεύμα: 4mA
3. Συχνότητα εργασίας: 433,92MHz
4. Ευαισθησία: - 105dB
5. Διαστάσεις μονάδας: 30*14*7mm
6. Απαιτείται εξωτερική κεραία: 32 cm.

Στην απεραντοσύνη του Διαδικτύου λέγεται ότι το εύρος μετάδοσης πληροφοριών στα 2Kb/s μπορεί να φτάσει έως και τα 150 μέτρα. Δεν το έλεγξα μόνος μου, αλλά σε διαμέρισμα δύο δωματίων δέχεται παντού.

Υλικό οικιακού μετεωρολογικού σταθμού

Μετά από αρκετά πειράματα, αποφάσισα να συνδέσω έναν αισθητήρα θερμοκρασίας, υγρασίας και έναν πομπό στο Arduino Nano.


Ο αισθητήρας θερμοκρασίας DS18D20 συνδέεται με το arduino ως εξής:

1) GND στο μείον του μικροελεγκτή.
2) DQ μέσω μιας αντίστασης έλξης στη γείωση και στον ακροδέκτη D2 του Arduino
3) Vdd έως +5V.

Η μονάδα πομπού MX -FS - 03V τροφοδοτείται από 5 Volt, η έξοδος δεδομένων (ADATA) συνδέεται στον ακροδέκτη D13.

Συνέδεσα μια οθόνη LCD και ένα βαρόμετρο BMP085 στο Arduino Uno.


διάγραμμα καλωδίωσης για arduino uno

Ο δέκτης σήματος είναι συνδεδεμένος στον ακροδέκτη D10.

Η μονάδα BMP085 είναι ένας ψηφιακός αισθητήρας ατμοσφαιρικής πίεσης. Ο αισθητήρας σάς επιτρέπει να μετράτε τη θερμοκρασία, την πίεση και το υψόμετρο. Διεπαφή σύνδεσης: I2C. Τάση τροφοδοσίας αισθητήρα 1,8-3,6 V

Η μονάδα συνδέεται με το Arduino με τον ίδιο τρόπο όπως άλλες συσκευές I2C:

  • VCC - VCC (3,3V);
  • GND-GND;
  • SCL - στην αναλογική ακίδα 5.
  • SDA - σε αναλογικό pin 4.
  • Πολύ χαμηλό κόστος
  • Τροφοδοσία και I/O 3-5V
  • Προσδιορισμός υγρασίας 20-80% με ακρίβεια 5%.
  • Προσδιορισμός θερμοκρασίας 0-50 βαθμούς. με ακρίβεια 2%.
  • Συχνότητα λήψης όχι μεγαλύτερη από 1 Hz (όχι περισσότερο από μία φορά κάθε 1 δευτερόλεπτο.)
  • Διαστάσεις 15,5mm x 12mm x 5,5mm
  • 4 ακίδες με απόσταση ποδιών 0,1".

Το DHT έχει 4 ακίδες:

  1. Vcc (τροφοδοσία 3-5V)
  2. Έξοδος δεδομένων - Έξοδος δεδομένων
  3. Δεν χρησιμοποιείται
  4. Γενικός

Συνδέεται στο D8 Arduino.

Λογισμικό οικιακού μετεωρολογικού σταθμού

Η μονάδα πομπού μετρά και μεταδίδει τη θερμοκρασία κάθε 10 λεπτά.

Παρακάτω το πρόγραμμα:

/* Σκίτσο έκδοση 1.0 Αποστολή θερμοκρασίας κάθε 10 λεπτά. */ #include #include #include #define ONE_WIRE_BUS 2 //Pin για σύνδεση αισθητήρα Dallas OneWire oneWire(ONE_WIRE_BUS); Αισθητήρες θερμοκρασίας Dallas (&oneWire); Διεύθυνση συσκευής μέσα στο Θερμόμετρο. void setup(void) ( //Serial.begin(9600); vw_set_ptt_inverted(true); // Required for DR3100 vw_setup(2000); // Set rate baud (bps) sensors.begin(); if (!sensors .getAddress (insideThermometer, 0)); printAddress(insideThermometer); sensors.setResolution(insideThermometer, 9); ) void printTemperature(DeviceAddress deviceAddress) (float tempC = sensors.getTempC(deviceAddress); //Serial.print("Temp C): ); //Serial.println(tempC); //Σχηματισμός δεδομένων για την αποστολή αριθμού int = tempC; σύμβολο char = "c"; //Σύμβολο υπηρεσίας για τον προσδιορισμό ότι πρόκειται για έναν αισθητήρα String strMsg = "z "; strMsg + = σύμβολο; strMsg += " "; strMsg += αριθμός; strMsg += " "; char msg; strMsg.toCharArray(msg, 255); vw_send((uint8_t *)msg, strlen(msg)); vw_wait_tx(); / / Περιμένετε να ολοκληρωθεί η μετάδοση delay(200); ) void loop(void) ( for (int j=0; j<= 6; j++) { sensors.requestTemperatures(); printTemperature(insideThermometer); delay(600000); } } //Определение адреса void printAddress(DeviceAddress deviceAddress) { for (uint8_t i = 0; i < 8; i++) { if (deviceAddress[i] < 16); //Serial.print("0"); //Serial.print(deviceAddress[i], HEX); } }

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

#include #include LiquidCrystal lcd(12, 10, 5, 4, 3, 2); #include αισθητήρας dht11. #define DHT11PIN 8 #include #include BMP085 dps = BMP085(); long Θερμοκρασία = 0, Πίεση = 0, Υψόμετρο = 0; void setup() ( Serial.begin(9600); vw_set_ptt_inverted(true); // Απαιτείται για το DR3100 vw_setup(2000); // Ορισμός ρυθμού λήψης vw_rx_start(); // Έναρξη παρακολούθησης αέρα lcd.begin(16, 2); Wire.begin(); delay(1000); dps.init(); //lcd.setCursor(14,0); //lcd.write(byte(0)); //lcd.home(); ) void loop() ( uint8_t buf; // Message buffer uint8_t buflen = VW_MAX_MESSAGE_LEN; // Μήκος buffer if (vw_get_message(buf, &buflen)) // Εάν ληφθεί ένα μήνυμα ( // Έναρξη ανάλυσης int i; // Εάν το μήνυμα είναι δεν απευθύνεται σε εμάς , βγείτε εάν (buf != "z") ( return; ) char εντολή = buf; // Η εντολή βρίσκεται στο δείκτη 2 // Η αριθμητική παράμετρος ξεκινά από τον δείκτη 4 i = 4, αριθμός int = 0; // Εφόσον η μεταφορά γίνεται χαρακτήρα προς χαρακτήρα , τότε πρέπει να μετατρέψετε το σύνολο χαρακτήρων σε αριθμό ενώ (buf[i] != " ") (αριθμός *= 10; αριθμός += buf[i] - "0"; i++; ) dps.getPressure(&Pressure); dps.getAltitude (&Altitude); dps.getTemperature(&Temperature); //Serial.print(command); Serial.print(" "); Σειριακή εκτύπωσηln(αριθμός); lcd.print("T="); lcd.setCursor(2,0); εκτύπωση lcd(αριθμός); lcd.setCursor(5,0); lcd.print("P="); lcd.print(Pressure/133.3); lcd.print("mmH"); lcd.setCursor(0,1); lcd.print("T="); lcd.print(Θερμοκρασία*0,1); lcd.print("H="); lcd.print(sensor.humidity); lcd.home(); //καθυστέρηση(2000); int chk = sensor.read(DHT11PIN); διακόπτης (chk) ( case DHTLIB_OK: //Serial.println("OK"); break; case DHTLIB_ERROR_CHECKSUM: //Serial.println("Checksum error"); break; case DHTLIB_ERROR_TIMEOUT: //Serial.println("Time out σφάλμα"); break; προεπιλογή: //Serial.println("Άγνωστο σφάλμα"); break; ) ) )

ΥΣΤΕΡΟΓΡΑΦΟ. Στο μέλλον σκοπεύω να προσθέσω τα εξής:
- αισθητήρας υγρασίας στον πομπό, επαναλάβετε τον αλγόριθμο μετάδοσης δεδομένων
- αισθητήρας για τη μέτρηση της ταχύτητας και της κατεύθυνσης του ανέμου.
- προσθέστε μια άλλη οθόνη στον δέκτη.
- μεταφέρετε τον δέκτη και τον πομπό σε ξεχωριστό μικροελεγκτή.

Ακολουθεί μια φωτογραφία του τι συνέβη:

Λίστα ραδιοφωνικών στοιχείων

Ονομασία Τύπου Ονομασία Ποσότητα ΣημείωσηΣκορΤο σημειωματάριό μου
μεταδιδόμενο μέρος.
Πλακέτα Arduino

Arduino Nano 3.0

1 Στο σημειωματάριο
αισθητήρας θερμοκρασίας

DS18B20

1 Στο σημειωματάριο
Αντίσταση

220 ohm

1 Στο σημειωματάριο
μονάδα πομπούMX-FS-03V (433 MHz)1 Στο σημειωματάριο
εξάρτημα λήψης ραδιοφώνου.
Πλακέτα Arduino

Arduino Uno

1 Στο σημειωματάριο
Αντίσταση trimmer 1 Στο σημειωματάριο
Αντίσταση

Συνιστάται να κάνετε λήψη του υλικολογισμικού πριν συνδέσετε τα εξαρτήματα για να βεβαιωθείτε ότι η πλακέτα λειτουργεί. Μετά τη συναρμολόγηση, μπορείτε να αναβοσβήσετε ξανά, η πλακέτα θα πρέπει να αναβοσβήνει ήρεμα. Σε έργα με καταναλωτές υψηλής ισχύος στο κύκλωμα τροφοδοσίας 5V της πλακέτας (διευθυνσιοδοτούμενη ταινία LED, σερβομηχανές, κινητήρες κ.λπ.), είναι απαραίτητο να παρέχεται εξωτερική ισχύς 5V στο κύκλωμα πριν συνδέσετε το Arduino στον υπολογιστή, επειδή το USB δεν παρέχει απαραίτητο ρεύμα εάν, για παράδειγμα, το απαιτεί η ταινία. Αυτό μπορεί να κάψει τη δίοδο προστασίας στην πλακέτα Arduino. Ένας οδηγός για τη λήψη και τη μεταφόρτωση του υλικολογισμικού μπορείτε να βρείτε κάτω από το spoiler στην επόμενη γραμμή.

Τα περιεχόμενα των φακέλων στο αρχείο

  • βιβλιοθήκες– βιβλιοθήκες έργων. Αντικαταστήστε τις υπάρχουσες εκδόσεις
  • υλικολογισμικό- Υλικολογισμικό για Arduino
  • συστήματα– διαγράμματα σύνδεσης εξαρτημάτων

Επιπροσθέτως

  • Όπως έδειξε το πείραμα, έξω από τη θήκη ο αισθητήρας θερμοκρασίας δείχνει 0,5 βαθμούς λιγότερο από το εσωτερικό! Είναι απαραίτητο να τακτοποιήσετε με μεγαλύτερη επιτυχία τα ηλεκτρονικά, να αφαιρέσετε και να θωρακίσετε τη θερμότητα από τα θερμαντικά στοιχεία ...

  • Εάν η οθόνη είναι πολύ αμυδρή/λευκή
    Στην πλακέτα προγράμματος οδήγησης της οθόνης (στην οποία είναι συνδεδεμένα τα καλώδια) υπάρχει ένα κουμπί αντίθεσης, με τη βοήθειά του μπορείτε να προσαρμόσετε την αντίθεση στην επιθυμητή. Επίσης, η αντίθεση εξαρτάται από τη γωνία θέασης της οθόνης (αυτή είναι μια οθόνη LCD) και μπορείτε να ρυθμίσετε την οθόνη για καθαρή οθόνη ακόμα και υπό γωνία "η οθόνη είναι στο επίπεδο του αφαλού, κοιτάμε από ψηλά". Και η αντίθεση εξαρτάται σε μεγάλο βαθμό από την τροφοδοσία: από 5 V, η οθόνη δείχνει όσο το δυνατόν πιο καθαρά και φωτεινά, ενώ όταν τροφοδοτείται από USB μέσω Arduino, η τάση θα είναι περίπου 4,5 V (μέρος της πέφτει στην προστατευτική δίοδο κατά μήκος του USB γραμμή), και η οθόνη δείχνει όχι τόσο φωτεινή. Ρυθμίστε την έξοδο με πόμολο με εξωτερικό τροφοδοτικό από 5V!

  • Εάν ο αισθητήρας CO2 δεν λειτουργεί σωστά (infa από τον Evgeny Ivanov)
    Λοιπόν, υπάρχουν σκίτσα για βαθμονόμηση στον φάκελο της βιβλιοθήκης αισθητήρων σε παραδείγματα. μπορεί επίσης να ξεκινήσει βουβή βραχυκυκλώνοντας την υποδοχή "HD" στη γείωση για 7+ δευτερόλεπτα.
    Φυσικά, ακριβώς στο δρόμο στο κρύο, δεν χρειάζεται να το κάνετε αυτό ... μπορείτε απλώς να γεμίσετε το μπουκάλι με καθαρό αέρα με έναν αισθητήρα μέσα και να το σφραγίσετε. Η βαθμονόμηση διαρκεί τουλάχιστον 20 λεπτά.
    Από προεπιλογή, ο αισθητήρας παρέχεται με ενεργοποιημένη την αυτόματη βαθμονόμηση, η οποία συμβαίνει κάθε μέρα, και εάν ο αισθητήρας χρησιμοποιείται σε μη αεριζόμενο δωμάτιο, τότε αυτή η βαθμονόμηση παίρνει γρήγορα τις τιμές από τον κανόνα πέρα ​​από τον ορίζοντα, επομένως πρέπει να απενεργοποιηθεί .
    Τεκμηρίωση.

  • Αυτόματη βαθμονόμηση αισθητήραΤο CO2 είναι απενεργοποιημένο στο σκίτσο!

  • Εάν έχετε Ο αισθητήρας BME280 δεν λειτουργεί, πιθανότατα έχει διαφορετική διεύθυνση. Το έργο χρησιμοποιεί τη βιβλιοθήκη Adafruit_BME280, η οποία δεν διαθέτει ξεχωριστή λειτουργία αλλαγής διεύθυνσης, επομένως η διεύθυνση ορίζεται χειροκίνητα στο αρχείο βιβλιοθήκης Adafruit_BME280.h σχεδόν στην αρχή του αρχείου ( βρίσκεται στο φάκελο Adafruit_BME280 στο φάκελο βιβλιοθήκες σας, θα έπρεπε να τον έχετε εγκαταστήσει εκεί), η μονάδα μου είχε διεύθυνση 0x76. Πώς μπορώ να μάθω τη διεύθυνση της μονάδας BME280 μου; Υπάρχει ένα ειδικό σκίτσο που ονομάζεται i2c scanner. Μπορείτε να το γκουγκλάρετε, μπορείτε. Flash αυτό το σκίτσο, ανοίξτε τη θύρα και λάβετε μια λίστα με τις διευθύνσεις των συσκευών που είναι συνδεδεμένες στο δίαυλο i2c. Για να μην σας ενοχλούν τα άλλα modules, μπορείτε να τα απενεργοποιήσετε και να αφήσετε μόνο το BME280. Καθορίζουμε τη διεύθυνση που λάβαμε στη βιβλιοθήκη, αποθηκεύουμε το αρχείο και φορτώνουμε το υλικολογισμικό του ρολογιού καιρού. Τα παντα!

  • Αν το ρολόι είναι πίσω, το πρόβλημα είναι πιθανότατα στο κύκλωμα ισχύος. Εάν το πρόβλημα παραμένει κατά την αλλαγή της τροφοδοσίας σε καλύτερη, κρεμάστε έναν πυκνωτή για να τροφοδοτήσετε τη μονάδα RTC (συγκόλληση απευθείας στην πλακέτα σε VCC και GND): απαραίτητα κεραμικό, 0,1-1 uF (σήμανση 103 ή 104, βλέπε πίνακα σήμανσης ). Μπορείτε επίσης να βάλετε έναν ηλεκτρολύτη (6,3V, 47-100 uF)

Ρυθμίσεις υλικολογισμικού

#define RESET_CLOCK 0 // επαναφέρετε το ρολόι ενώ φορτώνεται το υλικολογισμικό (για μονάδα με μη αφαιρούμενη μπαταρία). Μην ξεχάσεις να βάλεις 0 και να ξαναφλασάρεις! #define SENS_TIME 30000 // χρόνος ανανέωσης των ενδείξεων του αισθητήρα στην οθόνη, χιλιοστά του δευτερολέπτου #define LED_MODE 0 // Τύπος LED RGB: 0 - κύρια κάθοδος, 1 - κύρια άνοδος #define LED_BRIGHT 255 // Φωτεινότητα LED CO2 (0 - 255) # ορίστε ΜΠΛΕ_ΚΙΤΡΙΝΟ 1 // κίτρινο χρώμα αντί για μπλε (1 ναι, 0 όχι) αλλά λόγω των χαρακτηριστικών σύνδεσης το κίτρινο δεν είναι τόσο φωτεινό #define DISP_MODE 1 // οθόνη στην επάνω δεξιά γωνία: 0 - έτος, 1 - ημέρα της εβδομάδας , 2 - δευτερόλεπτα #define WEEK_LANG 1 // γλώσσα της ημέρας της εβδομάδας: 0 - Αγγλικά, 1 - Ρωσικά (μεταγραφή) #define DEBUG 0 // εμφάνιση του αρχείου καταγραφής προετοιμασίας αισθητήρα κατά την εκκίνηση #define PRESSURE 1 // 0 - πίεση γράφημα, 1 - γράφημα πρόβλεψης βροχής (αντί πίεσης ). Μην ξεχάσετε να διορθώσετε τα όρια γραφήματος // εμφανίστε όρια για γραφήματα #define TEMP_MIN 15 #define TEMP_MAX 35 #define HUM_MIN 0 #define HUM_MAX 100 #define PRESS_MIN -100 #define PRESS_MAX 102MAX #20MIN_define CO

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



Δεδομένου ότι οι καιρικές συνθήκες εδώ είναι αρκετά μεταβλητές και η θερμοκρασία κυμαίνεται στην περιοχή των 30-40 ° C, αποφάσισα να φτιάξω έναν μετεωρολογικό σταθμό στο σπίτι.

Ποιες είναι οι λειτουργίες ενός οικιακού μετεωρολογικού σταθμού;
Ένας μετεωρολογικός σταθμός Arduino με οθόνη είναι μια συσκευή που συλλέγει δεδομένα για τις καιρικές και περιβαλλοντικές συνθήκες χρησιμοποιώντας μια ποικιλία αισθητήρων.

Συνήθως αυτοί είναι οι ακόλουθοι αισθητήρες:

  • άνεμος
  • υγρασία
  • βροχή
  • θερμοκρασία
  • πίεση
  • ύψη

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

Θα πρέπει να μπορεί να ορίζει τις ακόλουθες παραμέτρους:

  • θερμοκρασία
  • υγρασία
  • πίεση
  • ύψος

Βήμα 1: Αγοράστε τα σωστά εξαρτήματα







  • DHT22, αισθητήρας θερμοκρασίας και υγρασίας.
  • BMP180, αισθητήρας πίεσης.
  • Κόλλα μετάλλων
  • Βύσμα μονής σειράς 40 εξόδους

Από τον εξοπλισμό που θα χρειαστείτε:

  • κολλητήρι
  • πένσα μαξιλαριού μύτης
  • σύρματα

Βήμα 2: Αισθητήρας θερμοκρασίας και υγρασίας DHT22







Διάφοροι αισθητήρες χρησιμοποιούνται για τη μέτρηση της θερμοκρασίας. Τα DHT22, DHT11, SHT1x είναι δημοφιλή

Θα εξηγήσω πώς διαφέρουν μεταξύ τους και γιατί χρησιμοποίησα το DHT22.

Ο αισθητήρας AM2302 χρησιμοποιεί ψηφιακό σήμα. Αυτός ο αισθητήρας λειτουργεί σε ένα μοναδικό σύστημα κωδικοποίησης και τεχνολογία αισθητήρων, επομένως τα δεδομένα του είναι αξιόπιστα. Το στοιχείο αισθητήρα του είναι συνδεδεμένο σε έναν υπολογιστή με ένα τσιπ 8-bit.

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

Το μικρό μέγεθος, η χαμηλή κατανάλωση ενέργειας, η μεγάλη απόσταση μετάδοσης (100m) κάνουν το AM2302 κατάλληλο για όλες σχεδόν τις εφαρμογές και οι 4 εξόδους στη σειρά κάνουν την εγκατάσταση πολύ εύκολη.

Ας δούμε τα πλεονεκτήματα και τα μειονεκτήματα των τριών μοντέλων αισθητήρων.

DHT11

Πλεονεκτήματα: δεν απαιτεί συγκόλληση, το φθηνότερο από τα τρία μοντέλα, γρήγορο σταθερό σήμα, εμβέλεια άνω των 20 m, ισχυρές παρεμβολές.
Μειονεκτήματα: Βιβλιοθήκη! Χωρίς επιλογές ανάλυσης, σφάλμα μέτρησης θερμοκρασίας +/- 2°С, σφάλμα μέτρησης επιπέδου σχετικής υγρασίας +/- 5%, ανεπαρκές εύρος μετρούμενων θερμοκρασιών (0-50°С).
Εφαρμογές: κηπουρική, γεωργία.

DHT22

Πλεονεκτήματα: δεν απαιτεί συγκόλληση, χαμηλό κόστος, ομαλές καμπύλες, μικρά σφάλματα μέτρησης, μεγάλο εύρος μέτρησης, εμβέλεια άνω των 20 m, ισχυρές παρεμβολές.
Μειονεκτήματα: η ευαισθησία θα μπορούσε να είναι υψηλότερη, αργή παρακολούθηση των αλλαγών θερμοκρασίας, απαιτείται βιβλιοθήκη.
Εφαρμογές: περιβαλλοντικές μελέτες.

SHT1x

Πλεονεκτήματα: δεν απαιτείται συγκόλληση, ομαλές καμπύλες, μικρά σφάλματα μέτρησης, γρήγορη απόκριση, χαμηλή κατανάλωση ενέργειας, αυτόματη λειτουργία αναστολής λειτουργίας, υψηλή σταθερότητα και συνέπεια δεδομένων.
Μειονεκτήματα: δύο ψηφιακές διεπαφές, σφάλμα στη μέτρηση του επιπέδου υγρασίας, το εύρος των μετρούμενων θερμοκρασιών είναι 0-50°C, απαιτείται βιβλιοθήκη.
Εφαρμογές: λειτουργία σε σκληρά περιβάλλοντα και σε μακροχρόνιες εγκαταστάσεις. Και οι τρεις αισθητήρες είναι σχετικά φθηνοί.

Χημική ένωση

  • Vcc - 5V ή 3,3V
  • Gnd - με Gnd
  • Δεδομένα - στο δεύτερο pin Arduino

Βήμα 3: Αισθητήρας πίεσης BMP180



Το BMP180 είναι ένας βαρομετρικός αισθητήρας ατμοσφαιρικής πίεσης με διεπαφή I2C.
Οι βαρομετρικοί αισθητήρες πίεσης μετρούν την απόλυτη τιμή του ατμοσφαιρικού αέρα. Αυτός ο δείκτης εξαρτάται από τις συγκεκριμένες καιρικές συνθήκες και από το ύψος πάνω από την επιφάνεια της θάλασσας.

Η μονάδα BMP180 είχε έναν ρυθμιστή 3,3V 662k ohm, τον οποίο εγώ, από δική μου βλακεία, ανατίναξα κατά λάθος. Έπρεπε να κάνω ένα power stroke απευθείας στο τσιπ.

Λόγω της έλλειψης σταθεροποιητή, είμαι περιορισμένος στην επιλογή πηγής ρεύματος - οι τάσεις πάνω από 3,3 V θα καταστρέψουν τον αισθητήρα.
Άλλα μοντέλα μπορεί να μην έχουν σταθεροποιητή, φροντίστε να τον ελέγξετε.

Διάγραμμα σύνδεσης αισθητήρα και διαύλου I2C με Arduino (nano ή uno)

  • SDA-A4
  • SCL-A5
  • VCC - 3,3V
  • GND-GND

Ας μιλήσουμε λίγο για την πίεση, και πώς σχετίζεται με τη θερμοκρασία και το υψόμετρο.

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

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

Η ατμοσφαιρική πίεση αλλάζει επίσης με το υψόμετρο. Η απόλυτη πίεση στο στρατόπεδο βάσης στο Έβερεστ (5400 m πάνω από την επιφάνεια της θάλασσας) είναι χαμηλότερη από την απόλυτη πίεση στο Δελχί (216 m πάνω από την επιφάνεια της θάλασσας).

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

Μέτρηση ύψους

Η μέση πίεση στο επίπεδο της θάλασσας είναι 1013,25 GPa (ή millibar). Εάν ανεβείτε πάνω από την ατμόσφαιρα, αυτή η τιμή θα πέσει στο μηδέν. Η καμπύλη αυτής της πτώσης είναι αρκετά κατανοητή, επομένως μπορείτε να υπολογίσετε μόνοι σας το υψόμετρο χρησιμοποιώντας την ακόλουθη εξίσωση: alti=44330*

Εάν λάβετε την πίεση της επιφάνειας της θάλασσας των 1013,25 GPa ως p0, η λύση της εξίσωσης είναι το τρέχον υψόμετρο.

Προληπτικά μέτρα

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

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

Προστατέψτε από την υγρασία. Ο αισθητήρας BMP180 είναι ευαίσθητος στα επίπεδα υγρασίας, προσπαθήστε να αποτρέψετε πιθανή διείσδυση νερού στον αισθητήρα.

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

Βήμα 4: Συναρμολόγηση της συσκευής







Εγκατάσταση υποδοχών μονής σειράς για Arduino Nano. Βασικά, τα κόψαμε στο μέγεθος και τα τρίψαμε λίγο για να φαίνονται σαν να ήταν. Στη συνέχεια τα κολλάμε. Στη συνέχεια, εγκαθιστούμε υποδοχές μονής σειράς για τον αισθητήρα DHT22.

Εγκαταστήστε μια αντίσταση 10 kΩ από την έξοδο δεδομένων στη γείωση (Gnd). Συγκολλάμε τα πάντα.
Στη συνέχεια, με τον ίδιο τρόπο, εγκαθιστούμε μια υποδοχή μονής σειράς για τον αισθητήρα BMP180, κάνουμε την παροχή ρεύματος 3,3V. Συνδέουμε τα πάντα με το λεωφορείο I2C.

Τέλος, συνδέουμε την οθόνη LCD στον ίδιο δίαυλο I2C με τον αισθητήρα BMP180.
(Σκοπεύω να συνδέσω αργότερα μια μονάδα RTC (ρολόι πραγματικού χρόνου) στην τέταρτη υποδοχή, ώστε η συσκευή να δείχνει επίσης την ώρα).

Βήμα 5: Κωδικοποίηση




Λήψη βιβλιοθηκών

Για να εγκαταστήσετε βιβλιοθήκες στο Arduino, ακολουθήστε τον σύνδεσμο

#περιλαμβάνω
#include #include #include "DHT.h" #include

Πίεση SFE_BMP180;

#define ALTITUDE 20,56 #define I2C_ADDR 0x27 //<<- Add your address here. #define Rs_pin 0 #define Rw_pin 1 #define En_pin 2 #define BACKLIGHT_PIN 3 #define D4_pin 4 #define D5_pin 5 #define D6_pin 6 #define D7_pin 7

#define DHTPIN 2 // με ποιο ψηφιακό pin είμαστε συνδεδεμένοι

// Καταργήστε σχολιασμό οποιονδήποτε τύπο χρησιμοποιείτε! //#define DHTTYPE DHT11 // DHT 11 #define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321 DHT dht(DHTPIN, DHTTYPE); LiquidICrynCrystal_DR Rs_pin,D4_pin,D5_pin,D6_pin,D7_pin);float t1,t2;

void setup() ( Serial.begin(9600); lcd.begin(16,2); //<<-- our LCD is a 20x4, change for your LCD if needed // LCD Backlight ON lcd.setBacklightPin(BACKLIGHT_PIN,POSITIVE); lcd.setBacklight(HIGH); lcd.home (); // go home on LCD lcd.print("Weather Station"); delay(5000); dht.begin(); pressure.begin(); } void loop() { char status; double T,P,p0,a; status = pressure.startTemperature(); if (status != 0) { delay(status);

status = πίεση.getTemperature(T); if (status != 0) ( Serial.print("1"); lcd.clear(); lcd.setCursor(0,0); lcd.print("Baro Temperature:"); lcd.setCursor(0,1 lcd.print(T,2), lcd.print("deg C"); t1=T; delay(3000);

status = πίεση.startPressure(3); if (status != 0) ( // Περιμένετε να ολοκληρωθεί η μέτρηση: delay(status);

status = πίεση.getPressure(P,T); if (status != 0) (lcd.clear(); lcd.setCursor(0,0); lcd.print("abslt πίεση:"); lcd.setCursor(0,1); lcd.print(P,2 lcd.print(" mb "); delay(3000);

p0 = πίεση.επίπεδο σφράγισης(P,υψόμετρο); // είμαστε στα 1655 μέτρα (Boulder, CO)

a = πίεση.υψόμετρο(P,p0); lcd.clear(); lcd.setCursor(0,0); lcd.print("Υψόμετρο: "); lcd.setCursor(0,1); lcd.print(a,0); lcd.print("meters"); καθυστέρηση (3000); ) ) ) ) float h = dht.readHumidity(); // Ανάγνωση θερμοκρασίας ως Κελσίου (η προεπιλογή) float t = dht.readTemperature(); t2=t; lcd.clear(); lcd.setCursor(0,0); // μετάβαση στην αρχή της 2ης γραμμής lcd.print("Υγρασία: "); lcd.setCursor(0,1);lcd.print(h); lcd.print("%"); καθυστέρηση (3000); lcd.clear(); lcd.setCursor(0,0); // μετάβαση στην αρχή της εκτύπωσης LCD 2ης γραμμής ("Θερμοκρασία DHT: "); lcd.setCursor(0,1); εκτύπωση lcd(t); lcd.print("degC"); καθυστέρηση (3000); lcd.clear(); lcd.setCursor(0,0); // μετάβαση στην αρχή της 2ης γραμμής lcd.print("Mean Tempurature: "); lcd.setCursor(0,1); lcd.print((t1+t2)/2); lcd.print("degC"); καθυστέρηση (3000); )

Χρησιμοποίησα Arduino έκδοση 1.6.5, ο κώδικας του ταιριάζει ακριβώς, μπορούν να λειτουργήσουν και τα μεταγενέστερα. Εάν ο κωδικός δεν ταιριάζει για κάποιο λόγο, χρησιμοποιήστε την έκδοση 1.6.5 ως βασική.

Η παρακολούθηση του καιρού είναι μια πολύ συναρπαστική δραστηριότητα. Αποφάσισα να φτιάξω τον μετεωρολογικό μου σταθμό με βάση το λαϊκό .

Το πρωτότυπο του μετεωρολογικού σταθμού μοιάζει με αυτό:

Λειτουργίες του μετεωρολογικού μου σταθμού:

  • μέτρηση και εμφάνιση θερμοκρασιών δωματίου και εξωτερικού χώρου.
  • εμφάνιση της τρέχουσας ώρας (ώρες και λεπτά).
  • εμφάνιση των τρεχουσών φάσεων της σελήνης και της σεληνιακής ημέρας.
  • μεταφορά των αποτελεσμάτων μέτρησης σε υπολογιστή μέσω σειριακής σύνδεσης.
  • μετάδοση των αποτελεσμάτων των μετρήσεων μέσω πρωτοκόλλου MQTTχρησιμοποιώντας μια εφαρμογή σε υπολογιστή.


μαγεύω
-αρχείο
υλικολογισμικό για (έκδοση με ημερομηνία 9 Μαΐου 2018) - .
Πώς να αναβοσβήνει μαγεύω-αρχείο σε επιβίβαση Arduinoέχω περιγράψει.

Μικροελεγκτής Arduino Nano 3.0

Η «καρδιά» του μετεωρολογικού μου σταθμού είναι ο μικροελεγκτής eBay):

Για να ελέγξω την ένδειξη και την ανάκριση των αισθητήρων, χρησιμοποιώ το χρονόμετρο 1 Arduino, προκαλώντας διακοπές με συχνότητα 200 Hz (περίοδος - 5 ms).

Δείκτης

Για να εμφανίσω τις μετρημένες ενδείξεις των αισθητήρων και την τρέχουσα ώρα, συνδέθηκα στο Arduinoτετραψήφιο ένδειξη LED Foryard FYQ-5643BHμε κοινές ανόδους (συνδυάζονται άνοδοι πανομοιότυπων τμημάτων όλων των εκκενώσεων).
Η ένδειξη περιέχει τέσσερα ψηφία επτά τμημάτων και δύο διαχωριστικές (ώρα) τελείες:

Οι άνοδοι του δείκτη συνδέονται μέσω αντιστάσεων περιορισμού ρεύματος στους ακροδέκτες Arduino:

απαλλάσσω 1 2 3 4
συμπέρασμα Α3 Α2 D3 D9

Τμηματικές κάθοδοι συνδεδεμένες με καρφίτσες Arduino:

τμήμα ένα σι ντο ρε μι φά σολ Π
συμπέρασμα Δ7 Δ12 Δ4 D5 D6 Δ11 D8 D13

Το τμήμα του δείκτη ανάβει εάν η άνοδος της αντίστοιχης εκκένωσης έχει υψηλό δυναμικό (1) και χαμηλό δυναμικό (0) στην κάθοδο.

Χρησιμοποιώ τη δυναμική ένδειξη για την εμφάνιση πληροφοριών στην ένδειξη - μόνο ένα ψηφίο είναι ενεργό κάθε φορά. Οι ενεργές εκφορτίσεις εναλλάσσονται σε συχνότητα 200 Hz (περίοδος εμφάνισης 5 ms). Ταυτόχρονα, το τρεμόπαιγμα των τμημάτων είναι ανεπαίσθητο στα μάτια.

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

Για τη δυνατότητα απομακρυσμένης μέτρησης θερμοκρασίας, σύνδεσα έναν αισθητήρα , το οποίο παρέχει ένα ευρύ φάσμα μετρήσεων εξωτερικής θερμοκρασίας. Ο αισθητήρας είναι συνδεδεμένος στο λεωφορείο 1 σύρμακαι έχει τρεις εξόδους - ισχύ ( VCC), δεδομένα ( DAT), Γη ( GND):

έξοδος αισθητήρα VCC DAT GND
συμπέρασμα Arduino 5V Α'1 GND

Ανάμεσα στις καρφίτσες VCCκαι DATΣυμπεριέλαβα μια αντίσταση έλξης 4,7 k ohm.

Για τη μετατροπή μεταξύ βαθμών Κελσίου και Φαρενάιτ, μπορείτε να χρησιμοποιήσετε την ακόλουθη πλάκα:

Τοποθέτησα τον αισθητήρα έξω από το παράθυρο του σπιτιού σε μια πλαστική θήκη από στυλό:

\

Οι επαγγελματικοί μετεωρολογικοί σταθμοί χρησιμοποιούν οθόνη Stevenson για να προστατεύουν το θερμόμετρο από το άμεσο ηλιακό φως και να επιτρέπουν στον αέρα να κυκλοφορεί. οθόνη Stevenson):

Αισθητήρας πίεσης και θερμοκρασίας BMP280

Τα βαρόμετρα υδραργύρου και ανεροειδών χρησιμοποιούνται παραδοσιακά για τη μέτρηση της ατμοσφαιρικής πίεσης.

ΣΤΟ βαρόμετρο υδραργύρουΗ ατμοσφαιρική πίεση εξισορροπείται από το βάρος της στήλης υδραργύρου, το ύψος της οποίας χρησιμοποιείται για τη μέτρηση της πίεσης:

ΣΤΟ μεταλλικό βαρόμετροχρησιμοποιείται συμπίεση και τέντωμα του κουτιού υπό ατμοσφαιρική πίεση:

Για να μετρήσω την ατμοσφαιρική πίεση και τη θερμοκρασία δωματίου στον μετεωρολογικό σταθμό του σπιτιού μου, χρησιμοποιώ έναν αισθητήρα - μικρό smd- Αισθητήρας 2 x 2,5 mm που βασίζεται σε τεχνολογία πιεζοαντίστασης:

Ένα μαντήλι με αισθητήρα αγοράστηκε στην αγορά eBay:

Ο αισθητήρας είναι συνδεδεμένος στο λεωφορείο I2C(επαφή δεδομένων - SDA/SDI, καρφίτσα συγχρονισμού - SCL/SCK):

έξοδος αισθητήρα VCC GND SDI SCK
συμπέρασμα Arduino 3v3 GND Α4 Α5

αφρούτος- αρχεία Adafruit_Sensor.h, Adafruit_BMP280.h, Adafruit_BMP280.cpp.

Μονάδες ατμοσφαιρικής πίεσης

Αισθητήρας μέσω λειτουργίας Πίεση ανάγνωσηςδίνει την τιμή της ατμοσφαιρικής πίεσης σε πασκάλ. Η βασική μονάδα μέτρησης της ατμοσφαιρικής πίεσης είναι εκτοπασκάλ(hPa) (1 hPa = 100 Pa), του οποίου το ανάλογο είναι η μονάδα εκτός συστήματος " χιλιοστόβαρο" (mbar) (1 mbar = 100Pa = 1hPa). Για μετατροπή μεταξύ μιας συνήθως χρησιμοποιούμενης μη συστημικής μονάδας πίεσης " χιλιοστό υδραργύρου" (mm Hg) και εκτοπασκάλια, χρησιμοποιούνται οι ακόλουθες αναλογίες:
1 hPa = 0,75006 mmHg Τέχνη. ≈ 3/4 mm Hg; 1 mmHg =1,3332 hPa ≈ 4/3 hPa.

Η εξάρτηση της ατμοσφαιρικής πίεσης από το υψόμετρο πάνω από την επιφάνεια της θάλασσας

Η ατμοσφαιρική πίεση μπορεί να αναπαρασταθεί τόσο σε απόλυτη όσο και σε σχετική μορφή.
Απόλυτη πίεση QFE(Αγγλικά) απόλυτη πίεση) είναι η πραγματική ατμοσφαιρική πίεση, χωρίς να λαμβάνεται υπόψη η διόρθωση πάνω από την επιφάνεια της θάλασσας.
Η ατμοσφαιρική πίεση μειώνεται κατά περίπου 1 hPa με αύξηση στο υψόμετρο 1 m:

Ο βαρομετρικός τύπος σάς επιτρέπει να προσδιορίσετε τη διόρθωση των ενδείξεων του βαρόμετρου για να λάβετε σχετική πίεση (σε mmHg):
$\Delta P = 760 \cdot (1 - (1 \πάνω (10^ ( (0,0081350 \cdot H) \over (T + 0,00178308 \cdot H) ))))$ ,
όπου $T$ είναι η μέση θερμοκρασία του αέρα στην κλίμακα Rankin, ° Ra, $H$ - ύψος πάνω από την επιφάνεια της θάλασσας, πόδια.
Μετατροπή βαθμών Κελσίου σε βαθμούς Rankine:
$^(\circ)Ra = (^(\circ)C \cdot 1,8) + 491,67$
Ο βαρομετρικός τύπος χρησιμοποιείται για βαρομετρική ισοπέδωση - προσδιορισμό υψών (με σφάλμα 0,1 - 0,5%). Ο τύπος δεν λαμβάνει υπόψη την υγρασία του αέρα και την αλλαγή στην επιτάχυνση της ελεύθερης πτώσης με το ύψος. Για μικρές διαφορές ύψους, αυτή η εκθετική εξάρτηση μπορεί να προσεγγιστεί με επαρκή ακρίβεια με μια γραμμική εξάρτηση.
Σχετική πίεση QNH(Αγγλικά) σχετική πίεση, Ναυτικό ύψος με κωδικό Q) είναι η ατμοσφαιρική πίεση που ρυθμίζεται για τη μέση στάθμη της θάλασσας. Μέση στάθμη της θάλασσας, MSL) (Για ΕΙΝΑΙ ΕΝΑκαι θερμοκρασία 15 βαθμών Κελσίου), και ρυθμίζεται αρχικά λαμβάνοντας υπόψη το υψόμετρο στο οποίο βρίσκεται ο μετεωρολογικός σταθμός. Βρίσκεται από τα στοιχεία της μετεωρολογικής υπηρεσίας, τις ενδείξεις βαθμονομημένων οργάνων σε δημόσιους χώρους, το αεροδρόμιο (από αναφορές ΜΕΤΑΡ), από το διαδίκτυο.
Για παράδειγμα, για το κοντινό αεροδρόμιο Gomel ( UMGG) Μπορώ να δω το πραγματικό δελτίο καιρού ΜΕΤΑΡστη διεύθυνση ru.allmetsat.com/metar-taf/russia.php?icao=UMGG:
UMGG 191800Z 16003MPS CAVOK M06/M15 Q1014 R28/CLRD//NOSIG ,
όπου Q1014- πίεση QNHστο αεροδρόμιο είναι 1014 hPa.
Ιστορία των δελτίων ΜΕΤΑΡδιαθέσιμο από το aviationwxchartsarchive.com/product/metar.
Για κανονική σχετική πίεση αέρα QNHγίνεται αποδεκτή πίεση 760 mm Hg. Τέχνη. ή 1013,25 hPa (σε θερμοκρασία 0ºС, κάτω από γεωγραφικό πλάτος 45º του Βορείου ή του Νοτίου Ημισφαιρίου).
Ρύθμισα την πίεση για το βαρόμετρο ανεροειδούς QNHμε τη βίδα ρύθμισης ευαισθησίας:

Μετεωρολογική πρόγνωση

Η ανάλυση των αλλαγών πίεσης σάς επιτρέπει να δημιουργήσετε μια πρόγνωση καιρού και η ακρίβειά της είναι όσο μεγαλύτερη, τόσο πιο απότομα αλλάζει η πίεση. Για παράδειγμα, ο εμπειρικός κανόνας ενός παλιού πλοηγού είναι ότι μια πτώση πίεσης 10 hPa (7,5 mmHg) σε μια περίοδο 8 ωρών σημαίνει ότι έρχονται ισχυροί άνεμοι.

Από πού προέρχεται ο άνεμος; Ο αέρας ρέει στο κέντρο της περιοχής χαμηλής πίεσης, άνεμος- οριζόντια κίνηση του αέρα από περιοχές υψηλής πίεσης σε περιοχές χαμηλής πίεσης (η υψηλή ατμοσφαιρική πίεση συμπιέζει τις αέριες μάζες σε περιοχές χαμηλής ατμοσφαιρικής πίεσης). Εάν η πίεση είναι πολύ χαμηλή, ο άνεμος μπορεί να φτάσει καταιγίδα. Παράλληλα, στην περιοχή μειωμένοςπίεση (βαρική κατάθλιψη ή κυκλώνας), θερμός αέρας ανεβαίνει και σχηματίζει σύννεφα, που συχνά φέρνουν βροχήή χιόνι.

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

Αυτή η κατεύθυνση μειώνεται σε οκτώ σημεία.

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

Αισθητήρας υγρασίας

Για να προσδιορίσω τη σχετική υγρασία του αέρα, χρησιμοποιώ τη μονάδα DHT11(αγοράστηκε από την αγορά eBay):

Αισθητήρας υγρασίας DHT11έχει τρεις εξόδους - ισχύ ( + ), δεδομένα ( έξω), Γη ( - ):

έξοδος αισθητήρα + έξω -
συμπέρασμα Arduino 5V D10 GND

Για να εργαστώ με τον αισθητήρα, χρησιμοποιώ τη βιβλιοθήκη από αφρούτος- αρχεία DHT.h, DHT.cpp.

Η υγρασία χαρακτηρίζει την ποσότητα των υδρατμών που περιέχονται στον αέρα. Σχετική υγρασίαδείχνει την αναλογία της υγρασίας στον αέρα (ως ποσοστό) σε σχέση με τη μέγιστη δυνατή ποσότητα στην τρέχουσα θερμοκρασία. Χρησιμοποιείται για τη μέτρηση της σχετικής υγρασίας :

Για ένα άτομο, το βέλτιστο εύρος υγρασίας αέρα είναι 40 ... 60%.

Ρολόι πραγματικού χρόνου

Ως ρολόι πραγματικού χρόνου, εφάρμοσα την ενότητα RTC DS1302(ένα μαντήλι με ένα ρολόι αγοράστηκε στην αγορά eBay):

Μονάδα μέτρησης DS1302συνδεδεμένο με το λεωφορείο 3 σύρμα. Για να χρησιμοποιήσετε αυτήν την ενότητα με Arduinoαναπτύχθηκε βιβλιοθήκη arduino_RTC(από iarduino.ru).

Ταμπλό με ενότητα DS1302έχει πέντε ακίδες που συνέδεσα στις ακίδες της πλακέτας Arduino Nano:

συμπέρασμα RTC VCC GND RST CLK DAT
συμπέρασμα Arduino 5V GND Δ2 Δ1 D0

Για να διατηρήσω τις σωστές ενδείξεις του ρολογιού όταν το ρεύμα είναι απενεργοποιημένο, έβαλα μια μπαταρία στην υποδοχή της πλακέτας. CR2032.

Η ακρίβεια της μονάδας ρολογιού μου δεν ήταν πολύ υψηλή - το ρολόι είναι ταχύτερο κατά περίπου ένα λεπτό σε τέσσερις ημέρες. Επομένως, επαναφέρω τα λεπτά στο "μηδέν" και την ώρα στο πλησιέστερο κρατώντας πατημένο το κουμπί που είναι συνδεδεμένο στον ακροδέκτη A0 του Arduino αφού ενεργοποιήσω την τροφοδοσία του μετεωρολογικού σταθμού. Μετά την προετοιμασία, ο ακροδέκτης A0 χρησιμοποιείται για τη μεταφορά δεδομένων μέσω της σειριακής σύνδεσης.

Μεταφορά δεδομένων σε υπολογιστή και εργασία μέσω του πρωτοκόλλου MQTT

Για να μεταφέρετε δεδομένα μέσω σειριακής σύνδεσης στο Arduinoσυνδέει USB-UARTμετατροπέας:

συμπέρασμα Arduinoχρησιμοποιείται για τη μεταφορά δεδομένων στη μορφή 8Ν1(8 bit δεδομένων, χωρίς ισοτιμία, 1 bit διακοπής) στα 9600 bps. Τα δεδομένα μεταδίδονται σε πακέτα και το μήκος του πακέτου είναι 4 χαρακτήρες. Η μεταφορά δεδομένων πραγματοποιείται σε " bit bangλειτουργία ", χωρίς τη χρήση της σειριακής θύρας υλικού Arduino.

Μορφή μεταδιδόμενων δεδομένων:

Παράμετρος 1ο byte 2ο byte 3ο byte 4ο byte
εξωτερική θερμοκρασία ο χώρο ή μείον δεκάδες μοίρες ή χώρο μονάδες βαθμών
θερμοκρασία δωματίου Εγώ χώρο ή μείον δεκάδες μοίρες ή χώρο μονάδες βαθμών
Ατμοσφαιρική πίεση Π εκατοντάδες mm Τέχνη. δεκάδες mm Hg μονάδες mmHg Με.
σχετική υγρασία η χώρος δεκάδες τοις εκατό ή χώρο τοις εκατό μονάδες
τρέχουσα ώρα δεκάδες ώρες μονάδες ωρών δεκάδες λεπτά μονάδες λεπτών

MQTT

golangεφαρμογή - πρόγραμμα-πελάτης πρωτοκόλλου MQTT, το οποίο στέλνει τις πληροφορίες που λαμβάνονται από τον μετεωρολογικό σταθμό στον διακομιστή ( MQTT-μεσίτης) :

Υπηρεσία σας επιτρέπει να δημιουργήσετε έναν λογαριασμό με ένα δωρεάν πρόγραμμα " " (όρια: 10 συνδέσεις, 10 Kbps):

Για να παρακολουθήσετε τις ενδείξεις του μετεωρολογικού σταθμού, μπορείτε να χρησιμοποιήσετε Android-Παράρτημα :

Φαγητό

Για να τροφοδοτήσω τον μετεωρολογικό σταθμό, χρησιμοποιώ φορτιστή από ένα παλιό κινητό τηλέφωνο. Motorola, με έξοδο τάσης 5 V με ρεύμα έως 0,55 A και συνδεδεμένο στις επαφές 5V(+) και GND (-):

Μπορείτε επίσης να χρησιμοποιήσετε μια μπαταρία 9 V για τροφοδοσία, συνδεδεμένη στις επαφές VIN(+) και GND (-).

Λειτουργία μετεωρολογικού σταθμού

Κατά την εκκίνηση, οι αισθητήρες αρχικοποιούνται και ελέγχονται.

Ελλείψει αισθητήρα DS18x20εκδίδεται σφάλμα "E1", εάν δεν υπάρχει αισθητήρας - σφάλμα "E3".

Στη συνέχεια ξεκινά ο κύκλος εργασίας του μετεωρολογικού σταθμού:

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


Ένα βίντεο του μετεωρολογικού σταθμού μου είναι διαθέσιμο στο δικό μου -κανάλι: https://youtu.be/vVLbirO-FVU

Ένδειξη θερμοκρασίας

Κατά τη μέτρηση της θερμοκρασίας, εμφανίζονται δύο ψηφία της θερμοκρασίας και για μια αρνητική θερμοκρασία, ένα σύμβολο μείον (με σύμβολο βαθμού στο δεξιότερο ψηφίο).
για εξωτερική θερμοκρασία, το σύμβολο βαθμού εμφανίζεται στο επάνω μέρος:


για θερμοκρασία δωματίου - παρακάτω:

Ένδειξη πίεσης

Κατά τη μέτρηση της πίεσης, εμφανίζονται τρία ψηφία πίεσης σε mmHg (με το σύμβολο " Π" στο άκρο δεξιό ψηφίο):

Εάν η πίεση έπεσε απότομα, τότε αντί για το σύμβολο " ΠΤο "ο χαρακτήρας" εμφανίζεται στο άκρο δεξιά ψηφίο μεγάλο"αν έχει αυξηθεί απότομα - τότε" H". Το κριτήριο για την ευκρίνεια της αλλαγής είναι 8 mm Hg σε 8 ώρες:

Επειδή ο μετεωρολογικός σταθμός μου εμφανίζει απόλυτη πίεση ( QFE), τότε οι αναγνώσεις αποδεικνύονται κάπως υποτιμημένες σε σύγκριση με τις πληροφορίες στην περίληψη ΜΕΤΑΡ(που προβλέπει QNH) (14 UTC, 28 Μαρτίου 2018):

Η αναλογία πίεσης (σύμφωνα με ATIS) ήταν $(1015 \πάνω από 998) = 1,017 $. Υψόμετρο του αεροδρομίου Gomel (κωδικός ICAO UMGG) πάνω από την επιφάνεια της θάλασσας είναι 143,6 μ. Η θερμοκρασία σύμφωνα με το ATIS ήταν 1 ° ντο.

Οι μετρήσεις του μετεωρολογικού μου σταθμού σχεδόν συνέπεσαν με την απόλυτη πίεση QFEσύμφωνα με ATIS!

Μέγιστη/ελάχιστη πίεση ( QFE) καταγράφηκε από τον μετεωρολογικό μου σταθμό για ολόκληρη την περίοδο παρατήρησης:

Ένδειξη σχετικής υγρασίας

Η σχετική υγρασία αέρα εμφανίζεται ως ποσοστό (το σύμβολο τοις εκατό εμφανίζεται στα δύο δεξιά ψηφία):

Εμφάνιση τρέχουσας ώρας

Η τρέχουσα ώρα εμφανίζεται στην ένδειξη με τη μορφή "ΩΩ: ΜΛ", με την άνω και κάτω τελεία να αναβοσβήνει μία φορά ανά δευτερόλεπτο:

Εμφάνιση φάσεων της σελήνης και της σεληνιακής ημέρας

Τα δύο πρώτα ψηφία της ένδειξης εμφανίζουν την τρέχουσα σεληνιακή φάση και τα επόμενα δύο - την τρέχουσα σεληνιακή ημέρα:

Η Σελήνη έχει οκτώ φάσεις (δίνονται αγγλικά και ρωσικά (μπλε - ανακριβή) ονόματα):

Στην ένδειξη φάσης εμφανίζονται εικονογράμματα:

φάση εικονόγραμμα
αυξανόμενο δρεπάνι (μισοφέγγαρο)
φθίνουσα ημισέληνος (μισοφέγγαρο)

Μεταφορά δεδομένων σε υπολογιστή

Εάν συνδέσετε τον μετεωρολογικό σταθμό με USB-UARTμετατροπέας (για παράδειγμα, με βάση ένα μικροκύκλωμα CP2102) συνδεδεμένος με USB-θύρα του υπολογιστή, τότε μπορείτε να χρησιμοποιήσετε το πρόγραμμα τερματικού για να παρατηρήσετε τα δεδομένα που μεταδίδονται από τον μετεωρολογικό σταθμό:

Αναπτύχθηκε σε γλώσσα προγραμματισμού golangένα πρόγραμμα που διατηρεί ένα αρχείο μετεωρολογικών παρατηρήσεων και στέλνει δεδομένα στην υπηρεσία και μπορεί να προβληθεί σε Android- smartphone χρησιμοποιώντας την εφαρμογή :

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


παράδειγμα γραφήματος με ελαφρά αύξηση της πίεσης

Προγραμματισμένες βελτιώσεις:

  • προσθέτοντας αισθητήρες κατεύθυνσης και ταχύτητας ανέμου

Σε μετεωρολογικούς σταθμούς, ένα ανεμόμετρο τριών φλιτζανιών (1) χρησιμοποιείται για τη μέτρηση της ταχύτητας του ανέμου και ένας ανεμοδείκτης (2) για τον προσδιορισμό της κατεύθυνσης του ανέμου:

Χρησιμοποιείται επίσης για τη μέτρηση της ταχύτητας του ανέμου. ανεμόμετρα θερμού σύρματος με νήματα(Αγγλικά) Ανεμόμετρο θερμού σύρματος). Ως θερμαινόμενο σύρμα, μπορείτε να χρησιμοποιήσετε ένα νήμα βολφραμίου από έναν λαμπτήρα με σπασμένο γυαλί. Στα βιομηχανικά ανεμόμετρα θερμού καλωδίου, ο αισθητήρας βρίσκεται συνήθως σε έναν τηλεσκοπικό σωλήνα:

Η αρχή λειτουργίας αυτής της συσκευής είναι ότι η θερμότητα αφαιρείται από το θερμαντικό στοιχείο λόγω μεταφοράς από μια ροή αέρα - άνεμο. Σε αυτή την περίπτωση, η αντίσταση του νήματος καθορίζεται από τη θερμοκρασία του νήματος. Ο νόμος της αλλαγής στην αντίσταση του νήματος $R_T$ από τη θερμοκρασία $T$ έχει τη μορφή:
$R_T = R_0 \cdot (1 + (\alpha \cdot (T - T_0)))$ ,
όπου $R_0$ είναι η αντίσταση νήματος σε θερμοκρασία $T_0$, $\alpha$ είναι ο συντελεστής θερμοκρασίας αντίστασης (για βολφράμιο $\alpha = 4,5\cdot(10^(-3) (^(\circ)(C^ (-1))))$).

Με μια αλλαγή στην ταχύτητα της ροής του αέρα, η θερμοκρασία αλλάζει με σταθερό ρεύμα νήματος (ανεμόμετρο με συνεχές ρεύμα, eng. CCA). Εάν η θερμοκρασία του θερμαντικού στοιχείου διατηρείται σταθερή, τότε το ρεύμα διαμέσου του στοιχείου θα είναι ανάλογο με την ταχύτητα της ροής του αέρα (ανεμόμετρο σταθερής θερμοκρασίας, Ελλ. CTA).

Συνεχίζεται

ΚΑΤΗΓΟΡΙΕΣ

Δημοφιλή ΑΡΘΡΑ

2022 "kingad.ru" - υπερηχογραφική εξέταση ανθρώπινων οργάνων