Οδηγός για τον αισθητήρα BME280 με Arduino (Ατμοσφαιρική πίεση, Θερμοκρασία, Υγρασία)

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

Εισαγωγή στον αισθητήρα BME280

Ο αισθητήρας BME280 διαβάζει την βαρομετρική πίεση, τη θερμοκρασία και την υγρασία.Επειδή η πίεση αλλάζει με το υψόμετρο, μπορείτε επίσης να υπολογίσετε το υψόμετρο.Υπάρχουν διάφορες εκδόσεις αυτής της μονάδας αισθητήρα.Ο αισθητήρας BME280 χρησιμοποιεί πρωτόκολλο επικοινωνίας I2C ή SPI για την ανταλλαγή δεδομένων με έναν μικροελεγκτή.

 

Η συνδεσμολογία

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

BME280Arduino
Vin5V
GNDGND
SCLA5
SDAA4

Εάν χρησιμοποιείτε πρωτόκολλο επικοινωνίας SPI, πρέπει να χρησιμοποιήσετε τις ακόλουθες ακίδες:

BME280Arduino
SCK (SPI Clock)Pin 13
SDO (MISO)Pin 12
SDI (MOSI)Pin 11
CS (Chip Select)Pin 10

 

Απαιτούμενα εξαρτήματα

Αισθητήρας BME280, Arduino UNO, breadboard, καλώδια

Σχεδιάγραμμα

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

Εγκατάσταση της βιβλιοθήκης BME280

Για να λάβετε μετρήσεις από τον αισθητήρα BME280, πρέπει να χρησιμοποιήσετε τη βιβλιοθήκη Adafruit_BME280. Ακολουθήστε τα επόμενα βήματα για να εγκαταστήσετε τη βιβλιοθήκη στο Arduino IDE σας: Ανοίξτε το Arduino IDE σας και μεταβείτε στο Sketch > Include Library > Manage Libraries. Θα πρέπει να ανοίξει ο Library Manager. Αναζητήστε “adafruit bme280” στο πλαίσιο αναζήτησης και εγκαταστήστε τη βιβλιοθήκη.

Εγκατάσταση της βιβλιοθήκης Adafruit_Sensor

Για να χρησιμοποιήσετε τη βιβλιοθήκη BME280, πρέπει επίσης να εγκαταστήσετε τη βιβλιοθήκη Adafruit_Sensor. Ακολουθήστε τα επόμενα βήματα για να εγκαταστήσετε τη βιβλιοθήκη στο Arduino IDE σας: Μεταβείτε στο Sketch > Include Library > Manage Libraries και πληκτρολογήστε “Adafruit Unified Sensor” στο πλαίσιο αναζήτησης. Κάντε κύλιση προς τα κάτω για να βρείτε τη βιβλιοθήκη και να την εγκαταστήσετε.

Αφού εγκαταστήσετε τις βιβλιοθήκες, επανεκκινήστε το Arduino IDE σας.

Ανάγνωση πίεσης, θερμοκρασίας και υγρασίας

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

Αφού εγκαταστήσετε τη βιβλιοθήκη BME280 και τη βιβλιοθήκη Adafruit_Sensor, ανοίξτε το Arduino IDE και μεταβείτε στο File > Examples > Adafruit BME280 library > bme280 test.

Γράφουμε τον κώδικα

#include   // Βιβλιοθήκη για I2C επικοινωνία
#include  // Βιβλιοθήκη για SPI επικοινωνία
#include  // Βασική βιβλιοθήκη αισθητήρων Adafruit
#include  // Βιβλιοθήκη για τον αισθητήρα BME280

// Pins για περίπτωση που χρησιμοποιηθεί SPI (εδώ ΔΕΝ χρησιμοποιούνται γιατί είναι I2C)

#define BME_SCK 13
#define BME_MISO 12
#define BME_MOSI 11
#define BME_CS 10

// Σταθερή τιμή ατμοσφαιρικής πίεσης στο επίπεδο της θάλασσας (για υπολογισμό υψομέτρου)

#define SEALEVELPRESSURE_HPA (1013.25)

// Δημιουργία αντικειμένου αισθητήρα (I2C mode)
Adafruit_BME280 bme;

// Εναλλακτικοί τρόποι αρχικοποίησης (SPI) – είναι σχολιασμένοι
//Adafruit_BME280 bme(BME_CS); // hardware SPI
//Adafruit_BME280 bme(BME_CS, BME_MOSI, BME_MISO, BME_SCK); // software SPI
unsigned long delayTime; // Χρόνος καθυστέρησης μεταξύ μετρήσεων

void setup() {

Serial.begin(9600); // Έναρξη σειριακής επικοινωνίας
Serial.println(F("BME280 test")); // Μήνυμα εκκίνησης

bool status;
status = bme.begin(); // Εκκίνηση αισθητήρα

// Αν δεν βρεθεί ο αισθητήρας, σταματάει το πρόγραμμα

if (!status) {
Serial.println("Could not find a valid BME280 sensor, check wiring!");
while (1); // infinite loop
}
Serial.println("-- Default Test --");
delayTime = 1000; // Μετρήσεις κάθε 1 δευτερόλεπτο
Serial.println();
}

void loop() {
printValues(); // Κλήση συνάρτησης που διαβάζει και εμφανίζει μετρήσεις
delay(delayTime); // Αναμονή
}

void printValues() {
Serial.print("Temperature = ");
Serial.print(bme.readTemperature()); // Ανάγνωση θερμοκρασίας σε °C 
Serial.println(" *C");
Serial.print("Pressure = ");
Serial.print(bme.readPressure() / 100.0F); // Μετατροπή από Pa σε hPa
Serial.println(" hPa");
Serial.print("Approx. Altitude = "); 
Serial.print(bme.readAltitude(SEALEVELPRESSURE_HPA)); // Υπολογισμός υψομέτρου
Serial.println(" m");
Serial.print("Humidity = ");
Serial.print(bme.readHumidity()); // Ανάγνωση υγρασίας 
Serial.println(" %");
Serial.println(); // Κενή γραμμή για ευκολότερη ανάγνωση

}

Πίεση στο επίπεδο της θάλασσας

Δημιουργείται μια μεταβλητή με όνομα SEALEVELPRESSURE_HPA.

#define SEALEVELPRESSURE_HPA (1013.25)

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

Σημείωση: κατά τον έλεγχο του αισθητήρα, εάν δεν μπορείτε να λάβετε καμία ένδειξη από τον αισθητήρα, ίσως χρειαστεί να βρείτε τη διεύθυνση I2C του αισθητήρα BME280. Με το BME280 συνδεδεμένο στο Arduino σας, εκτελέστε αυτό το I2C scanner sketch για να ελέγξετε τη διεύθυνση του αισθητήρα σας. Στη συνέχεια, περάστε τη διεύθυνση στη μέθοδο begin().

Ανοίγουμε το serial monitor και παρατηρούμε τις τιμές ατμοσφαιρικής πίεσης, θερμοκρασίας, υγρασίας.

Πώς δουλεύει ο κώδικας

  • Το Arduino χρησιμοποιεί τη βιβλιοθήκη Adafruit_BME280 για να επικοινωνήσει με τον αισθητήρα μέσω I2C.
  • Στο setup() ξεκινά η σειριακή επικοινωνία ώστε να βλέπουμε δεδομένα στο Serial Monitor.
  • Γίνεται προσπάθεια αρχικοποίησης του BME280 με bme.begin().
  • Αν ο αισθητήρας δεν βρεθεί, το πρόγραμμα εμφανίζει μήνυμα λάθους και σταματά σε άπειρο βρόχο.
  • Ορίζεται καθυστέρηση 1 δευτερολέπτου ανάμεσα στις μετρήσεις.
  • Στο loop() καλείται η συνάρτηση printValues() ξανά και ξανά.
  • Η συνάρτηση διαβάζει θερμοκρασία, ατμοσφαιρική πίεση και υγρασία από τον αισθητήρα.
  • Με βάση την πίεση και μια σταθερή τιμή επιπέδου θάλασσας, υπολογίζεται και εμφανίζεται και το προσεγγιστικό υψόμετρο.