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

Προσωπικός μετεωρολογικός σταθμός χρησιμοποιώντας Raspberry Pi με BME280 σε Java: 6 βήματα
Προσωπικός μετεωρολογικός σταθμός χρησιμοποιώντας Raspberry Pi με BME280 σε Java: 6 βήματα

Βίντεο: Προσωπικός μετεωρολογικός σταθμός χρησιμοποιώντας Raspberry Pi με BME280 σε Java: 6 βήματα

Βίντεο: Προσωπικός μετεωρολογικός σταθμός χρησιμοποιώντας Raspberry Pi με BME280 σε Java: 6 βήματα
Βίντεο: Φτιάξε ενα μικρό μετεωρολογικό σταθμό 2024, Ιούλιος
Anonim
Image
Image
Λογαριασμός βασικού εξοπλισμού
Λογαριασμός βασικού εξοπλισμού

Ο κακός καιρός φαίνεται πάντα χειρότερος μέσα από ένα παράθυρο

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

Βήμα 1: Λογαριασμός βασικού εξοπλισμού

Λογαριασμός βασικού εξοπλισμού
Λογαριασμός βασικού εξοπλισμού
Λογαριασμός βασικού εξοπλισμού
Λογαριασμός βασικού εξοπλισμού
Λογαριασμός βασικού εξοπλισμού
Λογαριασμός βασικού εξοπλισμού

1. Ένα Raspberry Pi

Το πρώτο βήμα είναι να πιάσετε τα χέρια σας σε έναν πίνακα Raspberry Pi. Το Raspberry Pi είναι ένας υπολογιστής με μονά κάρτα που λειτουργεί με Linux. Ο στόχος του είναι να βελτιώσει τις δεξιότητες προγραμματισμού και την κατανόηση υλικού. Υιοθετήθηκε γρήγορα από χομπίστες και λάτρεις των ηλεκτρονικών για καινοτόμα έργα.

2. I²C Shield για το Raspberry Pi

Ο INPI2 (προσαρμογέας I2C) παρέχει στο Raspberry Pi 2/3 μια θύρα I²C για χρήση με πολλές συσκευές I²C. Είναι διαθέσιμο στο Dcube Store

3. Digitalηφιακός αισθητήρας υγρασίας, πίεσης και θερμοκρασίας, BME280

Το BME280 είναι αισθητήρας υγρασίας, πίεσης και θερμοκρασίας που έχει γρήγορο χρόνο απόκρισης και υψηλή συνολική ακρίβεια. Αγοράσαμε αυτόν τον αισθητήρα από το Dcube Store

4. Καλώδιο σύνδεσης I²C

Είχαμε το καλώδιο σύνδεσης I²C διαθέσιμο στο Dcube Store

5. Καλώδιο Micro USB

Το καλώδιο micro USB Το τροφοδοτικό είναι μια ιδανική επιλογή για την τροφοδοσία του Raspberry Pi.

6. Ερμηνεύστε την πρόσβαση στο Internet μέσω EthernetCable/WiFi Adapter

Ένα από τα πρώτα πράγματα που θα θέλετε να κάνετε είναι να συνδέσετε το Raspberry Pi στο Διαδίκτυο. Μπορούμε να συνδεθούμε χρησιμοποιώντας ένα καλώδιο Ethernet. Μια άλλη πιθανότητα είναι ότι μπορείτε να συνδεθείτε σε ασύρματο δίκτυο χρησιμοποιώντας ασύρματο προσαρμογέα USB.

7. Καλώδιο HDMI (Καλώδιο οθόνης & συνδεσιμότητας)

Οποιαδήποτε οθόνη HDMI/DVI και οποιαδήποτε τηλεόραση πρέπει να λειτουργούν ως οθόνη για το Pi. Αλλά είναι προαιρετικό. Δεν μπορεί επίσης να αποκλειστεί η δυνατότητα απομακρυσμένης πρόσβασης (όπως-SSH). Μπορείτε επίσης να αποκτήσετε πρόσβαση με το λογισμικό PUTTY.

Βήμα 2: Συνδέσεις υλικού για εγκατάσταση

Συνδέσεις υλικού για εγκατάσταση
Συνδέσεις υλικού για εγκατάσταση
Συνδέσεις υλικού για εγκατάσταση
Συνδέσεις υλικού για εγκατάσταση

Κάντε το κύκλωμα σύμφωνα με το σχηματικό σχήμα που φαίνεται.

Κατά τη διάρκεια της μάθησης, μάθαμε καλά τα βασικά των ηλεκτρονικών σχετικά με τις γνώσεις υλικού και λογισμικού. Θέλαμε να σχεδιάσουμε ένα απλό ηλεκτρονικό σχήμα για αυτό το έργο. Τα ηλεκτρονικά σχήματα είναι σαν ένα σχέδιο για τα ηλεκτρονικά. Σχεδιάστε ένα σχέδιο και ακολουθήστε προσεκτικά το σχέδιο. Έχουμε εφαρμόσει ορισμένα βασικά ηλεκτρονικά εδώ. Η λογική σε οδηγεί από το Α στο Β, η Φαντασία θα σε πάει παντού!

Σύνδεση Raspberry Pi και I²C Shield

Πρώτα απ 'όλα πάρτε το Raspberry Pi και τοποθετήστε το I²C Shield (με το Inward Facing I²C Port) πάνω του. Πατήστε το Shield απαλά πάνω από τις καρφίτσες GPIO του Pi και τελειώσαμε με αυτό το βήμα τόσο εύκολα όσο η πίτα (δείτε την εικόνα).

Σύνδεση αισθητήρα και Raspberry Pi

Πάρτε τον αισθητήρα και συνδέστε το καλώδιο I²C με αυτόν. Βεβαιωθείτε ότι η έξοδος I²C συνδέεται ΠΑΝΤΑ με την είσοδο I²C. Το ίδιο πρέπει να ακολουθηθεί και για το Raspberry Pi με την ασπίδα I²C τοποθετημένη πάνω της με τις καρφίτσες GPIO. Έχουμε την ασπίδα I²C και τα καλώδια σύνδεσης από την πλευρά μας ως πολύ μεγάλη ανακούφιση και πολύ μεγάλο πλεονέκτημα, καθώς μας μένει μόνο το plug and play επιλογή. Δεν υπάρχουν πείροι και πρόβλημα καλωδίωσης και ως εκ τούτου, η σύγχυση έχει φύγει. Απλά φανταστείτε τον εαυτό σας στον ιστό των καλωδίων και να μπείτε σε αυτό. Μια ανακούφιση από αυτό. Αυτό κάνει τα πράγματα ακομπλεξάριστα.

Σημείωση: Το καφέ σύρμα πρέπει πάντα να ακολουθεί τη σύνδεση Ground (GND) μεταξύ της εξόδου μιας συσκευής και της εισόδου μιας άλλης συσκευής

Η συνδεσιμότητα στο Διαδίκτυο είναι μια ανάγκη

Στην πραγματικότητα έχετε μια επιλογή εδώ. Μπορείτε να συνδέσετε το Raspberry Pi με το καλώδιο LAN ή τον ασύρματο προσαρμογέα USB Nano για συνδεσιμότητα WIFI. Είτε έτσι είτε αλλιώς, το μανιφέστο είναι να συνδεθεί στο Διαδίκτυο που έχει επιτευχθεί.

Τροφοδοσία του κυκλώματος

Συνδέστε το καλώδιο Micro USB στην υποδοχή τροφοδοσίας του Raspberry Pi. Τρυπήστε και voila! Όλα είναι καλά και θα ξεκινήσουμε αμέσως.

Σύνδεση στην οθόνη

Μπορούμε είτε να έχουμε το καλώδιο HDMI συνδεδεμένο με οθόνη είτε με τηλεόραση. Μπορούμε να έχουμε πρόσβαση σε ένα Raspberry Pi χωρίς να το συνδέσουμε σε οθόνη χρησιμοποιώντας -SSH (Πρόσβαση στη γραμμή εντολών του Pi από άλλο υπολογιστή). Μπορείτε επίσης να χρησιμοποιήσετε το λογισμικό PUTTY για αυτό. Αυτή η επιλογή είναι για προχωρημένους χρήστες, οπότε δεν θα την καλύψουμε λεπτομερώς εδώ.

Άκουσα ότι θα υπάρξει ύφεση, αποφάσισα να μην συμμετάσχω

Βήμα 3: Προγραμματισμός Raspberry Pi σε Java

Προγραμματισμός Raspberry Pi σε Java
Προγραμματισμός Raspberry Pi σε Java

Ο κώδικας Java για το Raspberry Pi και τον αισθητήρα BME280. Είναι διαθέσιμο στο αποθετήριο μαςGithub.

Πριν προχωρήσετε στον κώδικα, βεβαιωθείτε ότι έχετε διαβάσει τις οδηγίες που δίνονται στο αρχείο Readme και ρυθμίστε το Raspberry Pi σύμφωνα με αυτό. Θα χρειαστεί μόνο μια στιγμή για να γίνει αυτό. Ένας προσωπικός μετεωρολογικός σταθμός είναι ένα σύνολο οργάνων μέτρησης καιρού που λειτουργούν από ιδιώτη, σύλλογο, ένωση ή ακόμη και επιχειρήσεις. Οι προσωπικοί μετεωρολογικοί σταθμοί μπορούν να λειτουργούν αποκλειστικά για τη διασκέδαση και την εκπαίδευση του ιδιοκτήτη, αλλά πολλοί χειριστές προσωπικών μετεωρολογικών σταθμών μοιράζονται επίσης τα δεδομένα τους με άλλους, είτε με τη μη αυτόματη συλλογή δεδομένων και τη διανομή τους, είτε με τη χρήση διαδικτύου ή ερασιτεχνικού ραδιοφώνου.

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

Μπορείτε να αντιγράψετε τον λειτουργικό κώδικα java για αυτόν τον αισθητήρα και από εδώ.

// Διανέμεται με άδεια ελεύθερης βούλησης.// Χρησιμοποιήστε το με όποιον τρόπο θέλετε, κέρδος ή δωρεάν, υπό την προϋπόθεση ότι ταιριάζει στις άδειες των σχετικών έργων του. // BME280 // Αυτός ο κώδικας έχει σχεδιαστεί για να λειτουργεί με το Mini Module BME280_I2CS I2C διαθέσιμο από το ControlEverything.com. //

εισαγωγή com.pi4j.io.i2c. I2CBus;

εισαγωγή com.pi4j.io.i2c. I2CDevice; εισαγωγή com.pi4j.io.i2c. I2CFactory? εισαγωγή java.io. IOException;

δημόσια τάξη BME280

{public static void main (String args ) ρίχνει Εξαίρεση {// Create I2C bus I2CBus bus = I2CFactory.getInstance (I2CBus. BUS_1); // Λήψη συσκευής I2C, η διεύθυνση BME280 I2C είναι 0x76 (108) I2CDevice device = bus.getDevice (0x76); // Διαβάστε 24 byte δεδομένων από τη διεύθυνση 0x88 (136) byte b1 = νέο byte [24]; device.read (0x88, b1, 0, 24); // Μετατροπή των δεδομένων // συντελεστές θερμοκρασίας int dig_T1 = (b1 [0] & 0xFF) + ((b1 [1] & 0xFF) * 256); int dig_T2 = (b1 [2] & 0xFF) + ((b1 [3] & 0xFF) * 256); εάν (dig_T2> 32767) {dig_T2 -= 65536; } int dig_T3 = (b1 [4] & 0xFF) + ((b1 [5] & 0xFF) * 256); εάν (dig_T3> 32767) {dig_T3 -= 65536; } // συντελεστές πίεσης int dig_P1 = (b1 [6] & 0xFF) + ((b1 [7] & 0xFF) * 256); int dig_P2 = (b1 [8] & 0xFF) + ((b1 [9] & 0xFF) * 256); αν (dig_P2> 32767) {dig_P2 -= 65536; } int dig_P3 = (b1 [10] & 0xFF) + ((b1 [11] & 0xFF) * 256); αν (dig_P3> 32767) {dig_P3 -= 65536; } int dig_P4 = (b1 [12] & 0xFF) + ((b1 [13] & 0xFF) * 256); αν (dig_P4> 32767) {dig_P4 -= 65536; } int dig_P5 = (b1 [14] & 0xFF) + ((b1 [15] & 0xFF) * 256); αν (dig_P5> 32767) {dig_P5 -= 65536; } int dig_P6 = (b1 [16] & 0xFF) + ((b1 [17] & 0xFF) * 256); αν (dig_P6> 32767) {dig_P6 -= 65536; } int dig_P7 = (b1 [18] & 0xFF) + ((b1 [19] & 0xFF) * 256); αν (dig_P7> 32767) {dig_P7 -= 65536; } int dig_P8 = (b1 [20] & 0xFF) + ((b1 [21] & 0xFF) * 256); αν (dig_P8> 32767) {dig_P8 -= 65536; } int dig_P9 = (b1 [22] & 0xFF) + ((b1 [23] & 0xFF) * 256); αν (dig_P9> 32767) {dig_P9 -= 65536; } // Διαβάστε 1 byte δεδομένων από τη διεύθυνση 0xA1 (161) int dig_H1 = ((byte) device.read (0xA1) & 0xFF); // Διαβάστε 7 byte δεδομένων από τη διεύθυνση 0xE1 (225) device.read (0xE1, b1, 0, 7). // Μετατρέψτε τα δεδομένα // συντελεστές υγρασίας int dig_H2 = (b1 [0] & 0xFF) + (b1 [1] * 256); αν (dig_H2> 32767) {dig_H2 -= 65536; } int dig_H3 = b1 [2] & 0xFF; int dig_H4 = ((b1 [3] & 0xFF) * 16) + (b1 [4] & 0xF); αν (dig_H4> 32767) {dig_H4 -= 65536; } int dig_H5 = ((b1 [4] & 0xFF) / 16) + ((b1 [5] & 0xFF) * 16); αν (dig_H5> 32767) {dig_H5 -= 65536; } int dig_H6 = b1 [6] & 0xFF; αν (dig_H6> 127) {dig_H6 -= 256; } // Επιλέξτε μητρώο υγρασίας ελέγχου // Υγρασία πάνω από το ρυθμό δειγματοληψίας = 1 συσκευή. Γράψτε (0xF2, (byte) 0x01); // Επιλογή καταχωρητή μέτρησης ελέγχου // Κανονική λειτουργία, θερμοκρασία και πίεση πάνω από το ρυθμό δειγματοληψίας = 1 συσκευή. Εγγραφή (0xF4, (byte) 0x27); // Επιλέξτε καταχώριση ρυθμίσεων // Χρόνος αναμονής = 1000 ms device.write (0xF5, (byte) 0xA0); // Διαβάστε 8 byte δεδομένων από τη διεύθυνση 0xF7 (247) // πίεση msb1, πίεση msb, πίεση lsb, temp msb1, temp msb, temp lsb, υγρασία lsb, υγρασία msb byte δεδομένα = νέο byte [8]; device.read (0xF7, δεδομένα, 0, 8); // Μετατρέψτε τα δεδομένα πίεσης και θερμοκρασίας σε 19-bit adc_p = (((long) (data [0] & 0xFF) * 65536) + ((long) (data [1] & 0xFF) * 256) + (long) (δεδομένα [2] & 0xF0)) / 16; long adc_t = (((long) (δεδομένα [3] & 0xFF) * 65536) + ((long) (δεδομένα [4] & 0xFF) * 256) + (long) (δεδομένα [5] & 0xF0)) / 16 ? // Μετατροπή δεδομένων υγρασίας long adc_h = ((long) (data [6] & 0xFF) * 256 + (long) (data [7] & 0xFF)); // Υπολογισμοί μετατόπισης θερμοκρασίας διπλό var1 = (((διπλό) adc_t) / 16384.0 - ((διπλό) dig_T1) / 1024.0) * ((διπλό) dig_T2); διπλό var2 = ((((διπλό) adc_t) / 131072.0 - ((διπλό) dig_T1) / 8192.0) * (((διπλό) adc_t) /131072.0 - ((διπλό) dig_T1) /8192.0)) * ((διπλό) dig_T3); διπλό t_fine = (μακρύ) (var1 + var2); διπλό cTemp = (var1 + var2) / 5120.0; διπλό fTemp = cTemp * 1,8 + 32; // Υπολογισμοί μετατόπισης πίεσης var1 = ((διπλό) t_fine / 2.0) - 64000.0; var2 = var1 * var1 * ((διπλό) dig_P6) / 32768.0; var2 = var2 + var1 * ((διπλό) dig_P5) * 2.0; var2 = (var2 / 4.0) + (((διπλό) dig_P4) * 65536.0); var1 = (((διπλό) dig_P3) * var1 * var1 / 524288.0 + ((διπλό) dig_P2) * var1) / 524288.0; var1 = (1.0 + var1 / 32768.0) * ((διπλό) dig_P1); διπλό p = 1048576.0 - (διπλό) adc_p; p = (p - (var2 / 4096.0)) * 6250.0 / var1; var1 = ((διπλό) dig_P9) * p * p / 2147483648.0; var2 = p * ((διπλό) dig_P8) / 32768.0; διπλή πίεση = (p + (var1 + var2 + ((διπλό) dig_P7)) / 16.0) / 100; // Υπολογισμοί αντιστάθμισης υγρασίας διπλός var_H = (((διπλός) t_fine) - 76800.0); var_H = (adc_h - (dig_H4 * 64.0 + dig_H5 / 16384.0 * var_H)) * (dig_H2 / 65536.0 * (1.0 + dig_H6 / 67108864.0 * var_H * (1.0 + dig_H3 / 67108864.0 * var_H))); διπλή υγρασία = var_H * (1.0 - dig_H1 * var_H / 524288.0); εάν (υγρασία> 100,0) {υγρασία = 100,0; } else if (υγρασία <0,0) {υγρασία = 0,0; } // Έξοδος δεδομένων στην οθόνη System.out.printf ("Θερμοκρασία σε Κελσίου: %.2f C %n", cTemp); System.out.printf ("Θερμοκρασία σε Φαρενάιτ: %.2f F %n", fTemp); System.out.printf ("Πίεση: %.2f hPa %n", πίεση); System.out.printf ("Σχετική υγρασία: %.2f %% RH %n", υγρασία); }}

Βήμα 4: Η πρακτικότητα του κώδικα

Ο Κώδικας Πρακτικότητα
Ο Κώδικας Πρακτικότητα

Τώρα, κάντε λήψη (ή git pull) τον κώδικα και ανοίξτε τον στο Raspberry Pi.

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

Βήμα 5: Αξιοποίηση στον εποικοδομητικό κόσμο

Το BME280 επιτυγχάνει υψηλές επιδόσεις σε όλες τις εφαρμογές που απαιτούν μέτρηση υγρασίας και πίεσης. Αυτές οι αναδυόμενες εφαρμογές είναι το Context Awareness, π.χ. Ανίχνευση δέρματος, Ανίχνευση αλλαγής δωματίου, Παρακολούθηση / ευεξία φυσικής κατάστασης, Προειδοποίηση για ξηρότητα ή υψηλές θερμοκρασίες, μέτρηση όγκου και ροής αέρα, έλεγχος αυτοματισμού σπιτιού, έλεγχος θέρμανσης, εξαερισμός, κλιματισμός (HVAC), Internet of Things (IoT), Ενίσχυση GPS (π.χ. Βελτίωση χρονικής αρχικής διόρθωσης, Νεκρός απολογισμός, Ανίχνευση κλίσης), Εσωτερική πλοήγηση (Αλλαγή ανίχνευσης δαπέδου, Ανίχνευση ανελκυστήρων), Εξωτερική πλοήγηση, Εφαρμογές αναψυχής και αθλητισμού, Πρόβλεψη καιρού και Ένδειξη κατακόρυφης ταχύτητας (Άνοδος/Βύθιση Ταχύτητα).

Βήμα 6: Συμπέρασμα

Όπως μπορείτε να δείτε, αυτό το έργο είναι μια μεγάλη επίδειξη του τι είναι ικανό το υλικό και το λογισμικό. Σε λίγο χρόνο, μπορεί κανείς να χτίσει ένα τόσο εντυπωσιακό έργο! Φυσικά, αυτή είναι μόνο η αρχή. Η δημιουργία ενός πιο εξελιγμένου Προσωπικού Μετεωρολογικού Σταθμού όπως το Automated Airport Personal Weather Stations μπορεί να περιλαμβάνει περισσότερους αισθητήρες όπως Ανεμόμετρο (ταχύτητα ανέμου), Διαβιβαστόμετρο (ορατότητα), Πυρανόμετρο (ηλιακή ακτινοβολία) κλπ. Έχουμε ένα σεμινάριο βίντεο στο Youtube με τη βασική λειτουργία του Αισθητήρας I²C με Rasp Pi. Είναι πραγματικά εκπληκτικό να βλέπεις τα αποτελέσματα και τη λειτουργία των επικοινωνιών I²C. Ελέγξτε το επίσης. Καλή διασκέδαση με την οικοδόμηση και τη μάθηση! Ενημερώστε μας τι πιστεύετε για αυτό το διδακτικό. Θα θέλαμε να κάνουμε κάποιες βελτιώσεις αν χρειαστεί.

Συνιστάται: