Πίνακας περιεχομένων:

Μετεωρολογικός σταθμός με χρήση Arduino UNO: 7 βήματα
Μετεωρολογικός σταθμός με χρήση Arduino UNO: 7 βήματα

Βίντεο: Μετεωρολογικός σταθμός με χρήση Arduino UNO: 7 βήματα

Βίντεο: Μετεωρολογικός σταθμός με χρήση Arduino UNO: 7 βήματα
Βίντεο: Lesson 1_ Coding with Diana Voutyrakou 2024, Ιούλιος
Anonim
Μετεωρολογικός σταθμός χρησιμοποιώντας Arduino UNO
Μετεωρολογικός σταθμός χρησιμοποιώντας Arduino UNO

Δημιουργήθηκε από: Hazel Yang

Αυτό το έργο είναι ένας μετεωρολογικός σταθμός που χρησιμοποιεί έναν πίνακα Arduino UNO για τον έλεγχο της ροής δεδομένων, έναν αισθητήρα DHT22 για τη συλλογή των δεδομένων και μια οθόνη OLED για την εμφάνιση των δεδομένων.

Βήμα 1: Λίστα στοιχείων

Λίστα προϊόντων
Λίστα προϊόντων

1. Οθόνη: OLED, 1.3 SH1106, I2C λευκό χρώμα ---- PID: 18283

2. Αισθητήρας: Digitalηφιακός αισθητήρας υγρασίας και θερμοκρασίας DHT22 ---- PID: 7375

3. Συνδέεται: Jumper Wires ---- PID: 10316 ή 10318 ή 10312 (εξαρτάται από το μήκος) ή μπορείτε να χρησιμοποιήσετε συμπαγές σύρμα 22 AWG ---- PID: 22490

Breadboard ---- PID: 10686 ή 10698 ή 103142 (εξαρτάται από το μέγεθος)

4. Τροφοδοσία: Αυτό το καλώδιο μπορεί να συνδεθεί μόνο με θύρα USB υπολογιστή και το καλώδιο χρησιμοποιείται επίσης για μεταφορά δεδομένων μεταξύ του IDE και του πίνακα Arduino. USB CABLE, A TO B, M/M, 0.5M (1.5FT) ---- PID: 29862

Or μπορείτε να το χρησιμοποιήσετε για να τροφοδοτήσετε την πλακέτα: Προσαρμογέας 5V 2A AC/DC-PID: 10817.

Βήμα 2: Σχετική εισαγωγή

Σχετική Εισαγωγή
Σχετική Εισαγωγή
Σχετική Εισαγωγή
Σχετική Εισαγωγή

Εισαγωγή οθόνης: Οθόνη OLED 1.3 λευκή

1. Μπορείτε να βρείτε το έγγραφο που δείχνει τη βασική ρύθμιση και περιγραφές:

Εισαγωγή αισθητήρα: Αισθητήρας υγρασίας και θερμοκρασίας DHT22 1. Μπορείτε να βρείτε το έγγραφο που δείχνει τις περιγραφές:

Βήμα 3: Συνδέστε το κύκλωμα

Συνδέστε το κύκλωμα
Συνδέστε το κύκλωμα

Ο αισθητήρας DHT22 στέλνει σειριακά δεδομένα στον ακροδέκτη 2. Συνεπώς, συνδέστε τον δεύτερο πείρο από αριστερά, ο ακροδέκτης "SDA" πρέπει να συνδεθεί στον ακροδέκτη 2.

Για την οθόνη SSH1106, χρησιμοποιεί την αναλογική ακίδα για μετάδοση. Το κύκλωμα της οθόνης θα είναι "SCL" pin στο Arduino's "A5" and "SDA" pin to Arduino's "A4". Ενώ τα δεδομένα θέσης pixel μεταδίδονται συνεχώς, η λειτουργία εμφάνισης στο πρόγραμμα ενεργοποιεί την εντολή μόνο μία φορά κάθε φορά που διαβάζει τα δεδομένα από τον αισθητήρα.

Τόσο ο αισθητήρας όσο και η οθόνη μπορούν να χρησιμοποιήσουν το 3.3V για να ενεργοποιήσουν το Arduino ως είσοδο τροφοδοσίας DC. Για την τροφοδοσία, πρέπει να συνδέσουμε και τις δύο ακίδες "VCC" με το "3.3V" του Arduino. Και οι ακίδες "GND" μπορούν απλά να συνδεθούν με τον πείρο "GND" στον πίνακα Arduino.

Χρησιμοποιήστε το καλώδιο USB A σε B, συνδέστε το Arudino στον υπολογιστή.

Βήμα 4: Προετοιμασία για μεταγλώττιση

"u8glib" για οθόνη SSH1106 από το Olikraus.

"Βιβλιοθήκη αισθητήρων DHT" για αισθητήρα DHT22 από την Adafruit. Θα πρέπει να κατεβάσετε τις δύο βιβλιοθήκες: Βιβλιοθήκη αισθητήρων DHT22:

U8glib:

Και χρησιμοποιήστε τη "διαχείριση βιβλιοθήκης" στο IDE για να τα αποσυμπιέσετε. Διαδικτυακή οδηγία διαχείρισης βιβλιοθηκών:

Βήμα 5: Κωδικός δοκιμής για σειριακή θύρα αισθητήρα DHT22

Συντελεστής δοκιμής για σειριακή θύρα αισθητήρα DHT22 (που βρίσκεται μέσα στη βιβλιοθήκη DHT22 >> παραδείγματα):

(Μπορείτε να παραλείψετε αυτό το μέρος.)

Απλώς για να δοκιμάσει ο αισθητήρας DHT22 διαβάζει τα δεδομένα κανονικά

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

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

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

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

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

#define DHTPIN 2

#define DHTTYPE DHT22

DHT dht (DHTPIN, DHTTYPE);

void setup () {

Serial.begin (9600);

Serial.println (F ("δοκιμή DHT22!"));

dht.begin ();

}

void loop () {

// Περιμένετε μερικά δευτερόλεπτα μεταξύ των μετρήσεων.

καθυστέρηση (2000).

// Η θερμοκρασία ή η υγρασία ανάγνωσης διαρκεί περίπου 250 χιλιοστά του δευτερολέπτου!

// Οι ενδείξεις αισθητήρων μπορεί επίσης να είναι παλιές έως και 2 δευτερόλεπτα (είναι πολύ αργός αισθητήρας)

float h = dht.readHumidity ();

// Διαβάστε τη θερμοκρασία Κελσίου (η προεπιλογή)

float t = dht.readTemperature ();

// Διαβάστε τη θερμοκρασία ως Φαρενάιτ (isFahrenheit = true)

float f = dht.readTemperature (true);

// Ελέγξτε αν απέτυχε η ανάγνωση και βγείτε νωρίς (για να προσπαθήσετε ξανά).

εάν (isnan (h) || isnan (t) || isnan (f)) {

Serial.println (F ("Αποτυχία ανάγνωσης από αισθητήρα DHT!"));

ΕΠΙΣΤΡΟΦΗ;

}

// Υπολογισμός δείκτη θερμότητας σε Φαρενάιτ (η προεπιλογή)

float hif = dht.computeHeatIndex (f, h);

// Υπολογισμός δείκτη θερμότητας σε Κελσίου (isFahreheit = false)

float hic = dht.computeHeatIndex (t, h, false);

Serial.print (F ("Υγρασία:"));

Serial.print (h);

Serial.print (F ("% Temperature:"));

Serial.print (t);

Serial.print (F ("° C"));

Serial.print (f);

Serial.print (F ("° F Δείκτης θερμότητας:"));

Serial.print (hic);

Serial.print (F ("° C"));

Serial.print (hif);

Serial.println (F ("° F"));

}

// Μετά την κατάρτιση του προγράμματος, κάντε κλικ στο ΕΡΓΑΛΕΙΑ >> ΣΕΙΡΙΑ ΠΑΡΑΚΟΛΟΥΘΗΣΗ για να ελέγξετε τα δεδομένα.

// Τέλος του προγράμματος δοκιμών.

Βήμα 6: Κωδικός για το έργο

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

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

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

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

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

#define DHTPIN 2

#define DHTTYPE DHT22

#include "U8glib.h"

U8GLIB_SH1106_128X64 u8g (U8G_I2C_OPT_NONE);

Αισθητήρας DHT (DHTPIN, DHTTYPE).

void draw (void) {

u8g.setFont (u8g_font_unifont);

float h = sensor.readHumidity ();

// Διαβάστε τη θερμοκρασία ως Κελσίου (η προεπιλογή)

float t = sensor.readTemperature ();

// Ελέγξτε αν απέτυχε η ανάγνωση και βγείτε νωρίς (για να προσπαθήσετε ξανά).

αν (ισνάν (η) || ισνάν (τ)) {

u8g.print ("Σφάλμα.");

Για(;;);

ΕΠΙΣΤΡΟΦΗ;

}

u8g.setPrintPos (4, 10);

u8g.print ("Θερμοκρασία (C):");

u8g.setPrintPos (4, 25);

u8g.print (t);

u8g.setPrintPos (4, 40);

u8g.print ("Υγρασία (%):");

u8g.setPrintPos (4, 55);

u8g. εκτύπωση (h);

}

void setup (void) {

u8g.setRot180 ();

Serial.begin (9600);

sensor.begin ();

}

void loop (void) {

// βρόχος εικόνας

u8g.firstPage ();

κάνω {

σχεδιάζω();

} while (u8g.nextPage ());

// ξαναχτίστε την εικόνα μετά από κάποια καθυστέρηση (2000).

}

// Τέλος του κύριου προγράμματος.

Βήμα 7: Περιγραφή

Περιγραφή
Περιγραφή

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

Και μπορείτε να δοκιμάσετε τα δεδομένα του αισθητήρα παρακολουθώντας τα δεδομένα εξόδου μέσω του ψηφιακού pin 2 χρησιμοποιώντας τη λειτουργία που ονομάζεται "Serial.print ()". Επειδή η συχνότητα μετάδοσης δεδομένων είναι περίπου 1 ανάγνωση κάθε 2 δευτερόλεπτα (που είναι 0,5 Hz), όταν προγραμματίζεται στο Arduino IDE, πρέπει να ορίσουμε την καθυστέρηση μέσα στη λειτουργία του βρόχου να είναι μεγαλύτερη από 2 δευτερόλεπτα. Υπάρχει λοιπόν μια "καθυστέρηση (2000)" μέσα στη λειτουργία βρόχου. Αυτό διασφαλίζει ότι τα δεδομένα θα ανανεώνονται συχνά. Στη συνάρτηση "σχεδίαση", λάβετε τα δεδομένα από τη θύρα σειριακών δεδομένων και τοποθετήστε τα σε αριθμούς πλωτήρα χρησιμοποιώντας τις λειτουργίες "readHumidity" και "readTemperature".

Εκτυπώστε την υγρασία και τη θερμοκρασία χρησιμοποιώντας τη λειτουργία εκτύπωσης στο αρχείο "u8glib". Μπορείτε να προσαρμόσετε τη θέση αλλάζοντας τον αριθμό στη λειτουργία "setPrintPos". Η λειτουργία εκτύπωσης μπορεί να εμφανίσει απευθείας το κείμενο και τους αριθμούς.

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

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

Η οθόνη μοιάζει με αυτήν:

Μπορείτε να αποσυνδέσετε το Arduino UNO από τον υπολογιστή σας και να το τροφοδοτήσετε χρησιμοποιώντας έναν προσαρμογέα ρεύματος 5V DC που συνδέεται στην υποδοχή τροφοδοσίας 2.1mm. Αποθηκεύει το πρόγραμμα μέσα στη μονάδα δίσκου του και μπορεί να εκτελεί συνεχώς ξανά το πρόγραμμα μετά την τροφοδοσία του.

Συνιστάται: