Μετάβαση στο κύριο περιεχόμενο

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

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

 και

Η μονάδα ψηφιακού αισθητήρα πίεσης BMP280 έχει 6 ακίδες: VCC, GND, SCL, SDA, CSB και SDO. Όλες οι ακίδες αυτής της μονάδας αισθητήρα είναι ψηφιακές, εκτός από το VCC και τη γείωση. Η έξοδος ακίδων του αισθητήρα βαρομετρικής πίεσης και θερμοκρασίας BMP280 φαίνεται παρακάτω:






Υλοποίηση κώδικα

Ο κώδικας για τη διασύνδεση του αισθητήρα BMP280 με το Arduino φαίνεται παρακάτω. Ο κώδικας είναι πολύ απλός και εύκολος στην κατανόηση επειδή χρησιμοποιούμε τη βιβλιοθήκη Adafruit BMP280, η οποία κάνει τη διαδικασία κωδικοποίησης πολύ εύκολη. Επομένως, πριν ξεκινήσουμε τη διαδικασία κωδικοποίησης, πρέπει να εγκαταστήσουμε τη βιβλιοθήκη. Για να το κάνετε αυτό, μεταβείτε στην ενότητα Διαχείριση βιβλιοθήκης του Arduino και αναζητήστε το BMP280. Θα βρείτε τη βιβλιοθήκη Adafruit BMP280. Κάντε κλικ στην εγκατάσταση και θα σας ζητηθεί να εγκαταστήσετε όλες τις εξαρτήσεις. Κάντε κλικ στο κουμπί Εγκατάσταση όλων και η βιβλιοθήκη θα πρέπει να εγκατασταθεί.







Ο κώδικας


Στη συνάρτηση setup, όπως πάντα, αρχικοποιούμε τη σειριακή μνήμη για εντοπισμό σφαλμάτων. Ορίσαμε επίσης μια μεταβλητή κατάστασης για να ελέγξουμε εάν η μέθοδος begin της παρουσίας BMP μπόρεσε να επικοινωνήσει με τη μονάδα ή όχι. Εάν η διαδικασία επικοινωνίας επιστρέψει ανεπιτυχής, εκτυπώνουμε κάποιο μήνυμα εντοπισμού σφαλμάτων στο παράθυρο της σειριακής οθόνης. 

/***************************************************************************
  This is a library for the BMP280 humidity, temperature & pressure sensor
  Designed specifically to work with the Adafruit BMP280 Breakout
  ----> http://www.adafruit.com/products/2651
  These sensors use I2C or SPI to communicate, 2 or 4 pins are required
  to interface.
  Adafruit invests time and resources providing this open source code,
  please support Adafruit andopen-source hardware by purchasing products
  from Adafruit!
  Written by Limor Fried & Kevin Townsend for Adafruit Industries.
  BSD license, all text above must be included in any redistribution
 ***************************************************************************/
#include <Wire.h>
#include <SPI.h>
#include <Adafruit_BMP280.h>
#define BMP280_ADDRESS 0x76
Adafruit_BMP280 bmp; // I2C
void setup() {
  Serial.begin(9600);
  while ( !Serial ) delay(100);   // wait for native usb
  Serial.println(F("BMP280 test"));
  unsigned status;
  status = bmp.begin(BMP280_ADDRESS);
  if (!status) {
    Serial.println(F("Could not find a valid BMP280 sensor, check wiring or "
                      "try a different address!"));
    Serial.print("SensorID was: 0x"); Serial.println(bmp.sensorID(),16);
    Serial.print("        ID of 0xFF probably means a bad address, a BMP 180 or BMP 085\n");
    Serial.print("   ID of 0x56-0x58 represents a BMP 280,\n");
    Serial.print("        ID of 0x60 represents a BME 280.\n");
    Serial.print("        ID of 0x61 represents a BME 680.\n");
    while (1) delay(10);
  }
  /* Default settings from datasheet. */
  bmp.setSampling(Adafruit_BMP280::MODE_NORMAL,     /* Operating Mode. */
                  Adafruit_BMP280::SAMPLING_X2,     /* Temp. oversampling */
                  Adafruit_BMP280::SAMPLING_X16,    /* Pressure oversampling */
                  Adafruit_BMP280::FILTER_X16,      /* Filtering. */
                  Adafruit_BMP280::STANDBY_MS_500); /* Standby time. */
}
void loop() {
    Serial.print(F("Temperature = "));
    Serial.print(bmp.readTemperature());
    Serial.println(" *C");
    Serial.print(F("Pressure = "));
    Serial.print(bmp.readPressure());
    Serial.println(" Pa");
    Serial.print(F("Approx altitude = "));
    Serial.print(bmp.readAltitude(1013.25)); /* Adjusted to local forecast! */
    Serial.println(" m");
    Serial.println();
    delay(2000);
}



Σχόλια

Δημοφιλείς αναρτήσεις από αυτό το ιστολόγιο

Σερβοκινητήρας

  Βασικός έλεγχος σερβομηχανισμού Θα μάθουμε πώς να ελέγχετε έναν τυπικό σερβοκινητήρα, να πηγαίνει εμπρός και πίσω κατά 180 μοίρες, χρησιμοποιώντας ένα «βρόχο for()». Αυτό γίνεται με τη βοήθεια της βιβλιοθήκης Servo, η οποία είναι προεγκατεστημένη βιβλιοθήκη στο Arduino IDE (τόσο εκτός σύνδεσης όσο και σε ηλεκτρονική έκδοση). . Αυτό γίνεται με τη βοήθεια της βιβλιοθήκης  Servo     , η οποία είναι προεγκατεστημένη βιβλιοθήκη στο Arduino IDE (τόσο εκτός σύνδεσης όσο και σε ηλεκτρονική έκδοση).      Χρειαζόμαστε τα παρακάτω:     Arduino IDE Arduino UNO  Σερβοκινητήρας 4,8V - 6V  Καλώδια βραχυκυκλωτήρα. Τυπικοί σερβοκινητήρες Οι τυπικοί σερβοκινητήρες είναι ενεργοποιητές που επιτρέπουν τον ακριβή έλεγχο της θέσης (γωνία). Χαρακτηριστικό  είναι ότι η γωνία του κινητήρα είναι 0 - 180 μοίρες. Με άλλα λόγια, μπορεί να κάνει το μισό μιας περιστροφής. Ένας τυπικός σερβοκινητήρας, όπως και άλλοι κινητήρες, είναι ουσιαστικά απλώς ένας...

Αντιστάσεις pull up, pull down

  Αντιστάσεις pull up (Pull up resistors) Οι αντιστάσεις pull up  είναι πολύ συνηθισμένες όταν χρησιμοποιούνται μικροελεγκτές (MCU) ή οποιαδήποτε συσκευή ψηφιακής λογικής. Θα εξηγήσουμε πότε και πού να χρησιμοποιήσετε αντιστάσεις pull up και, στη συνέχεια, θα κάνουμε έναν απλό υπολογισμό για να δείξουμε γιατί είναι σημαντικά τα pull-ups. Τι είναι μια αντίσταση  Pull up Ας υποθέσουμε ότι έχετε ένα MCU με ένα pin διαμορφωμένο ως είσοδο. Εάν δεν υπάρχει τίποτα συνδεδεμένο με τον ακροδέκτη και το πρόγραμμά σας διαβάζει την κατάσταση του ακροδέκτη, θα είναι ψηλά (τραβηγμένο στο VCC) ή χαμηλό (τραβηγμένο στη γείωση);  Αυτό το φαινόμενο αναφέρεται ως  αιωρούμενο  (floating). Για να αποφευχθεί αυτή η άγνωστη κατάσταση, μια αντίσταση pull-up ή pull-down θα διασφαλίσει ότι η ακίδα βρίσκεται είτε σε υψηλή είτε σε χαμηλή κατάσταση, ενώ χρησιμοποιεί επίσης χαμηλή ποσότητα ρεύματος. Για απλότητα, θα εστιάσουμε στα pull-ups καθώς είναι πιο συνηθισμένα από τα pull-down. Λε...

Φωτοαντιστάτης

int a; // εδώ θα κρατάμε την τιμή που διαβάζουμε από τον φωτοαντιστάτη float b; // εδώ θα αποθηκεύουμε την τάση που έχει ο φωτοαντιστάτης στα άκρα του float c; // εδώ θα αποθηκεύουμε την τιμή της αντίστασης του φωτοαντιστάτη int d; // εδώ θα αποθηκεύσουμε την τιμή-όριο πάνω από την οποία θα ανάβουμε το void setup() { Serial.begin(9600); // ξεκινάμε το σειριακό μόνιτορ του Arduino IDE  d=500; // τιμή πάνω από την οποία θα ανάβουμε το LED pinMode(6, OUTPUT); // το πιν 6 θα είναι ή ΕΞΟΔΟΣ που θα συνδέσουμε το LED } void loop() { a=analogRead(A0); // διάβασε την αναλογική είσοδο A0 και βάλε την τιμή στην a  Serial.print("Τιμή: "); // απεικόνισε την τιμή της a στο σειριακό μόνιτορ του Arduino IDΕ Serial.print(a); Serial.print("\t"); b=a*5.0/1023; // υπολόγισε την τιμή της τάσης στα άκρα του φωτοαντιστάτη Serial.print("Τάση: "); Serial.print(b); // απεικόνισε την τιμή της τάσης Serial.print(" V \t"); c=b*10.0/(5-b); // υπολόγισε την αντίσταση του φωτοα...