Αισθητήρας Ατμομετρικής Πίεσης και Θερμοκρασίας BMP180 με Arduino
Οδηγός για τη διασύνδεση της μονάδας BMP180 με το Arduino
O συμπαγής και ισχυρός αισθητήρας μετρά τη θερμοκρασία και την ατμοσφαιρική πίεση, οι οποίες μπορούν να χρησιμοποιηθούν για τον προσδιορισμό του υψομέτρου και την παρακολούθηση των καιρικών φαινομένων.
Καθώς μετακινείστε από το επίπεδο της θάλασσας σε μια κορυφή βουνού, η ατμοσφαιρική πίεση μειώνεται. Μετρώντας αυτήν την αλλαγή, το BMP180 μπορεί να εκτιμήσει το υψόμετρο, καθιστώντας το ιδανικό υψόμετρο για drones, μετεωρολογικά αερόστατα και έργα πλοήγησης σε εξωτερικούς χώρους. Δεδομένου ότι η ατμοσφαιρική πίεση επηρεάζεται επίσης από τις καιρικές συνθήκες, αυτός ο αισθητήρας μπορεί να βοηθήσει στην ανίχνευση τάσεων στην ατμοσφαιρική πίεση, καθιστώντας τον χρήσιμο για την παρακολούθηση και την πρόγνωση του καιρού.
Επισκόπηση υλικού
Στην καρδιά της μονάδας βρίσκεται ο BMP180, ένας ψηφιακός αισθητήρας βαρομετρικής πίεσης και θερμοκρασίας επόμενης γενιάς που δημιουργήθηκε από την Bosch Sensortec.
Τσιπ BMP180
Εσωτερικά, ο αισθητήρας BMP180 περιέχει τρία κύρια εξαρτήματα:
Ένας αισθητήρας πίεσης MEMS
Ένας αναλογικός-ψηφιακός μετατροπέας (ADC) που μετατρέπει τις μετρήσεις πίεσης σε ψηφιακές τιμές.
Μια μονάδα ελέγχου με εργοστασιακά βαθμονομημένους συντελεστές αποθηκευμένους στη μνήμη ROM. Αυτές οι τιμές βαθμονόμησης χρησιμοποιούνται για τον υπολογισμό ακριβών μετρήσεων θερμοκρασίας και πίεσης.
Το BMP180 μετρά την ατμοσφαιρική πίεση μεταξύ 300 hPa και 1100 hPa (καλύπτοντας υψόμετρα από 9000 μέτρα πάνω από την επιφάνεια της θάλασσας έως 500 μέτρα κάτω από την επιφάνεια της θάλασσας). Έχει ανάλυση 0,01 hPa και τυπική απόλυτη ακρίβεια ±1 hPa.
Ο αισθητήρας μπορεί να μετρήσει θερμοκρασίες που κυμαίνονται από -40°C έως 85°C με ανάλυση 0,1°C και ακρίβεια περίπου ±1,0°C.
Απαιτήσεις ισχύος
Η μονάδα περιλαμβάνει έναν ενσωματωμένο ρυθμιστή τάσης LM6206, ο οποίος της επιτρέπει να λειτουργεί με μικροελεγκτές λογικής 3.3V και 5V. Αυτό σημαίνει ότι μπορείτε να τη χρησιμοποιήσετε με ασφάλεια με κοινούς μικροελεγκτές όπως το Arduino ή το Raspberry Pi χωρίς να χρειάζεστε πρόσθετους μετατροπείς τάσης.
Ρυθμιστής Μονάδας 3V3 BMP180
Ο BMP180 είναι ένας αισθητήρας χαμηλής ισχύος, που καταναλώνει περίπου 3 έως 5 µA κατά την κανονική λειτουργία. Λόγω αυτής της χαμηλής κατανάλωσης ενέργειας, είναι ιδανικός για έργα που τροφοδοτούνται από μπαταρία και φορητές συσκευές.
Διεπαφή I2C
Το BMP180 επικοινωνεί με μικροελεγκτές χρησιμοποιώντας το πρωτόκολλο I2C. Λάβετε υπόψη ότι η διεύθυνση I2C του BMP180 έχει οριστεί σε 0x77 , κάτι που είναι σημαντικό κατά τη σύνταξη κώδικα για επικοινωνία με τον αισθητήρα.
Τεχνικές προδιαγραφές
Ακολουθούν οι πλήρεις προδιαγραφές:
Τροφοδοτικό 3,3V έως 5,5V
Τρέχουσα κλήρωση ~3 έως 5µA
Εύρος μέτρησης πίεσης 300 έως 1100 hPa
Απόλυτη ακρίβεια πίεσης ±1 hPa
Εύρος θερμοκρασίας -40˚C έως +85˚C
Ακρίβεια θερμοκρασίας ±1˚C
Για πιο λεπτομερείς πληροφορίες, μπορείτε να ανατρέξετε στο φύλλο δεδομένων του αισθητήρα.
Φύλλο δεδομένων BMP180
Σύνδεση μονάδας BMP180
Η μονάδα BMP180 έχει μόνο τέσσερις ακίδες:
Σύνδεση μονάδας BMP180
VCC χρησιμοποιείται για την παροχή ρεύματος στη μονάδα. Μπορεί να λειτουργήσει με τάση μεταξύ 3,3V και 5V.
Γείωση είναι ο πείρος (υποδοχή) γείωσης.
SCL είναι ένας σειριακός ακροδέκτης ρολογιού για τη διεπαφή I2C.
SDA είναι ένας σειριακός ακροδέκτης δεδομένων για τη διεπαφή I2C.
Καλωδίωση μονάδας BMP180 σε Arduino
Ας συνδέσουμε τη μονάδα BMP180 σε ένα Arduino! Η διαδικασία καλωδίωσης είναι απλή και απαιτεί μόνο λίγα βήματα.
Αρχικά, συνδέστε τον ακροδέκτη VIN στην έξοδο 5V του Arduino και τον ακροδέκτη GND στη γείωση του Arduino.
Στη συνέχεια, πρέπει να συνδέσουμε τις ακίδες που χρησιμοποιούνται για την επικοινωνία I2C. Είναι σημαντικό να γνωρίζουμε ότι διαφορετικές πλακέτες Arduino έχουν διαφορετικές ακίδες I2C και αυτές πρέπει να συνδεθούν σωστά. Στις πλακέτες Arduino με διάταξη R3, οι ακίδες SDA και SCL βρίσκονται επίσης στις κεφαλίδες των ακίδων κοντά στην ακίδα AREF. Ωστόσο, εσωτερικά, είναι ίδιες με τις ακίδες A4 (SDA) και A5 (SCL).
Ακολουθεί ένας σύντομος πίνακας αναφοράς για τις συνδέσεις των ακίδων:
Μονάδα BMP180 Arduino
VCC 5V
Γείωση Γείωση
SCL SCL ή A5
SDA SDA ή A4
Ανατρέξτε στην παρακάτω εικόνα για να δείτε τη σωστή ρύθμιση καλωδίωσης.
Καλωδίωση μονάδας BMP180 με Arduino
Εγκατάσταση απαραίτητων βιβλιοθηκών
Πριν ξεκινήσετε την ανάγνωση δεδομένων από τον αισθητήρα BMP180, πρέπει να εγκαταστήσετε τη βιβλιοθήκη Adafruit BMP180. Είναι διαθέσιμη στον διαχειριστή βιβλιοθηκών Arduino.
Για να εγκαταστήσετε τη βιβλιοθήκη,
Αρχικά, ανοίξτε το πρόγραμμα Arduino IDE. Στη συνέχεια, κάντε κλικ στο εικονίδιο Library Manager στην αριστερή πλαϊνή μπάρα.
Πληκτρολογήστε " bmp180 " στο πλαίσιο αναζήτησης για να φιλτράρετε τα αποτελέσματά σας.
Αναζητήστε τη Βιβλιοθήκη Adafruit BMP085 από την Adafruit .
Κάντε κλικ στο κουμπί Εγκατάσταση για να το προσθέσετε στο Arduino IDE σας.
Εγκατάσταση βιβλιοθήκης arduino bmp180
Δεδομένου ότι η βιβλιοθήκη Adafruit BMP085 βασίζεται σε άλλες βιβλιοθήκες για να λειτουργήσει, θα σας ζητηθεί να εγκαταστήσετε τις εξαρτήσεις της, οι οποίες περιλαμβάνουν το Adafruit Unified Sensor Driver και τη βιβλιοθήκη Adafruit Bus IO .
Όταν εμφανιστεί αυτό το μήνυμα, απλώς κάντε κλικ στην επιλογή ΕΓΚΑΤΑΣΤΑΣΗ ΟΛΩΝ για να βεβαιωθείτε ότι όλα έχουν ρυθμιστεί σωστά.
Εγκατάσταση εξαρτήσεων adafruit busio unifiedsensor
Κώδικας Arduino – Ανάγνωση Θερμοκρασίας και Βαρομετρικής Πίεσης
Αυτό το βασικό πρόγραμμα δείχνει πώς να διαβάσετε τον αισθητήρα BMP180. Με αυτό το πρόγραμμα, μπορείτε να κατασκευάσετε τον δικό σας μετεωρολογικό σταθμό που όχι μόνο σας ενημερώνει για τη θερμοκρασία και την ατμοσφαιρική πίεση, αλλά μπορεί επίσης να εκτιμήσει το υψόμετρο σας πάνω από την επιφάνεια της θάλασσας!
#include <Wire.h>
#include <Adafruit_BMP085.h>
#define seaLevelPressure_hPa 1013.25
Adafruit_BMP085 bmp;
void setup() {
Serial.begin(9600);
if (!bmp.begin()) {
Serial.println("Could not find a valid BMP085 sensor, check wiring!");
while (1) {}
}
}
void loop() {
Serial.print("Temperature = ");
Serial.print(bmp.readTemperature());
Serial.println(" *C");
Serial.print("Pressure = ");
Serial.print(bmp.readPressure());
Serial.println(" Pa");
Serial.print("Altitude = ");
Serial.print(bmp.readAltitude());
Serial.println(" meters");
Serial.print("Pressure at sealevel (calculated) = ");
Serial.print(bmp.readSealevelPressure());
Serial.println(" Pa");
Serial.print("Real altitude = ");
Serial.print(bmp.readAltitude(seaLevelPressure_hPa * 100));
Serial.println(" meters");
Serial.println();
delay(500);
}
Αφού ανεβάσετε αυτό το πρόγραμμα στο Arduino σας, μπορείτε να ανοίξετε την Σειριακή Οθόνη. Θα βλέπετε μετρήσεις θερμοκρασίας, πίεσης και υψομέτρου να εμφανίζονται κάθε λίγα δευτερόλεπτα.
έξοδος θερμοκρασίας/πίεσης/υψομέτρου bmp180
Σημείωση: Για πιο ακριβείς μετρήσεις υψομέτρου, φροντίστε να ενημερώσετε τη seaLevelPressure_hPaμεταβλητή με τη σωστή τιμή για την τοποθεσία σας εκείνη την ημέρα.
Επεξήγηση Κώδικα:
Το πρόγραμμα ξεκινά συμπεριλαμβάνοντας δύο σημαντικές βιβλιοθήκες: την Wire.h, η οποία βοηθά το Arduino να επικοινωνεί με τη μονάδα BMP180 χρησιμοποιώντας το πρωτόκολλο I2C, και την Adafruit_BMP085.h, η οποία περιέχει συναρτήσεις για τον έλεγχο της μονάδας BMP180.
#include <Wire.h>
#include <Adafruit_BMP085.h>
Στη συνέχεια, ορίζουμε μια μεταβλητή που ονομάζεται seaLevelPressure_hPaκαι την ορίζουμε σε 1013,25 hPa. Αυτή αντιπροσωπεύει την τυπική ατμοσφαιρική πίεση στο επίπεδο της θάλασσας. Χρειαζόμαστε αυτόν τον αριθμό για να υπολογίσουμε το υψόμετρο με βάση την ατμοσφαιρική πίεση. Να κάτι σημαντικό που πρέπει να γνωρίζετε: Εάν αυτός ο αριθμός είναι απόκλισης μόνο κατά 1 hPa, ο υπολογισμός του υψομέτρου σας μπορεί να είναι λανθασμένος κατά περίπου 8,5 μέτρα! Για καλύτερα αποτελέσματα, θα πρέπει να μάθετε την τρέχουσα πίεση στο επίπεδο της θάλασσας στην περιοχή σας και να ενημερώσετε αυτόν τον αριθμό.
#define seaLevelPressure_hPa 1013.25
Στη συνέχεια, δημιουργούμε ένα bmp αντικείμενο από την κλάση Adafruit_BMP085, το οποίο μας επιτρέπει να αλληλεπιδρούμε με τον αισθητήρα.
Adafruit_BMP085 bmp;
Μέσα στη συνάρτηση setup(), αρχικοποιούμε τη σειριακή επικοινωνία με τον υπολογιστή, ώστε να μπορούμε να δούμε τις μετρήσεις του αισθητήρα στην Σειριακή Οθόνη. Στη συνέχεια, καλούμε τη begin()συνάρτηση για να αρχικοποιήσουμε τον αισθητήρα BMP180. Αυτή η συνάρτηση ρυθμίζει την επικοινωνία I2C, επαληθεύει το αναγνωριστικό τσιπ του αισθητήρα, εκτελεί μια μαλακή επαναφορά και περιμένει τη βαθμονόμηση πριν ο αισθητήρας αρχίσει να παρέχει ακριβείς μετρήσεις. Εάν ο αισθητήρας δεν εντοπιστεί, εμφανίζεται ένα μήνυμα σφάλματος στην Σειριακή Οθόνη και το πρόγραμμα σταματά.
Serial.begin(9600);
if (!bmp.begin()) {
Serial.println("Could not find a valid BMP085 sensor, check wiring!");
while (1) {}
}
Στη συνάρτηση loop(), χρησιμοποιούμε τις ακόλουθες συναρτήσεις για να διαβάσουμε τον αισθητήρα BMP180.
readTemperature() Η συνάρτηση επιστρέφει τη θερμοκρασία σε βαθμούς Κελσίου.
readPressure() Η συνάρτηση επιστρέφει την ατμοσφαιρική πίεση σε Pascal.
readAltitude(seaLevelPressure_hPa * 100) Η συνάρτηση υπολογίζει το υψόμετρο σας (σε μέτρα) με βάση την δεδομένη πίεση στην επιφάνεια της θάλασσας (σε hPa).
readSealevelPressure() Η συνάρτηση υπολογίζει την πίεση (σε hPa) στο επίπεδο της θάλασσας από την τρέχουσα τοποθεσία σας.
Serial.print("Temperature = ");
Serial.print(bmp.readTemperature());
Serial.println(" *C");
Serial.print("Pressure = ");
Serial.print(bmp.readPressure());
Serial.println(" Pa");
Serial.print("Altitude = ");
Serial.print(bmp.readAltitude());
Serial.println(" meters");
Serial.print("Pressure at sealevel (calculated) = ");
Serial.print(bmp.readSealevelPressure());
Serial.println(" Pa");
Serial.print("Real altitude = ");
Serial.print(bmp.readAltitude(seaLevelPressure_hPa * 100));
Serial.println(" meters");
Σχόλια
Δημοσίευση σχολίου