Hướng dẫn sử dụng cảm biến áp suất không khí BMP180 với Arduino

Hướng dẫn sử dụng cảm biến áp suất không khí BMP180 với Arduino

Cảm biến áp suất không khí BMP180 là một thiết bị nhỏ gọn và tiện lợi được sử dụng để đo áp suất không khí. Với khả năng đo áp suất và nhiệt độ chính xác, cảm biến BMP180 arduino mang lại nhiều lợi ích quan trọng trong các ứng dụng đo lường và giám sát môi trường.

Với giao tiếp thông qua chuẩn I2C, cảm biến dễ dàng tích hợp vào các hệ thống nhúng và các dự án điện tử. Bằng cách sử dụng cảm biến áp suất BMP180, các bạn có thể đo lường áp suất, nhiệt độ và tính toán độ cao trong thời gian thực, mở ra nhiều ứng dụng trong việc đo lường, theo dõi thời tiết, điều khiển độ cao và nhiều ứng dụng khác.

Để tạo động lực cho Team Arduino KIT ra nhiều bài viết chất lượng hơn, các bạn có thể ủng hộ mình bằng cách Donate qua MoMo, Ngân hàng, Paypal…Nhấn vào link bên dưới nhé.

Linh kiện cần thiết cho dự án

TÊN LINH KIỆN SỐ LƯỢNG NƠI BÁN
Arduino Uno R3 1 Shopee | Cytron
Cảm biến áp suất không khí BMP180 1 Shopee | Cytron
Breadboard 1 Shopee | Cytron
Dây cắm (Đực – Đực) 10 – 20 Shopee | Cytron

Tổng quan về cảm biến áp suất không khí BMP180

Chip BMP180 là một cảm biến áp suất và nhiệt độ có thể được sử dụng để đo áp suất không khí và nhiệt độ môi trường. Nó được sản xuất bởi Bosch Sensortec và được sử dụng phổ biến trong các ứng dụng đo áp suất, như đo độ cao, thời tiết, điều khiển môi trường, và điều hòa không khí.

BMP180 sử dụng công nghệ cảm biến áp suất Piezo-resistive, trong đó áp suất được chuyển đổi thành một giá trị điện trở. Chip này cung cấp độ chính xác cao và tiêu thụ năng lượng thấp.

Xem ngay: Hướng dẫn sử dụng cảm biến từ trường (Reed Switch) với Arduino

Chip BMP180

BMP180 có khả năng đo áp suất không khí từ 300 đến 1100 hPa (hectopascal). Điều này tương đương với khoảng 9000 mét dưới mực nước biển đến 500 mét trên mực nước biển. Tuy nhiên, để đạt được độ chính xác tốt nhất, các thông số được khuyến nghị để đo áp suất không khí là trong khoảng từ 700 đến 900 hPa.

Nguồn cấp

Cảm biến áp suất khí quyển BMP180 yêu cầu về điện áp từ 1.8V đến 3.6V. Điện áp hoạt động tiêu chuẩn là 3.3V. Các bạn có thể sử dụng nguồn 5V của Arduino.

BMP180 tiêu thụ dòng rất ít, dưới 1mA trong khi đo và chỉ 5μA khi không hoạt động. Mức tiêu thụ điện năng này cho phép ứng dụng trong các thiết bị chạy bằng pin.

Giao tiếp I2C

Cảm biến áp suất không khí BMP180 Arduino sử dụng giao tiếp I2C để truyền dữ liệu giữa cảm biến và vi điều khiển. Giao tiếp I2C cho phép cảm biến truyền thông tin về áp suất không khí và nhiệt độ đến vi điều khiển thông qua SDA và SCL.

BMP180 sử dụng địa chỉ I2C 7 bit là 0x77 để truyền và nhận dữ liệu. Vi điều khiển sẽ gửi một yêu cầu đọc hoặc ghi đến cảm biến áp suất khí quyển theo địa chỉ này và cảm biến sẽ phản hồi bằng cách gửi dữ liệu tương ứng.

Sơ đồ chân Module BMP180

Sơ đồ chân của Module BMP180 thông qua giao tiếp I2C bao gồm các chân sau:

VCC: Chân nguồn cung cấp cho module (3.3V hoặc 5V).

GND: Chân nối đất.

SDA: Chân dữ liệu (Serial Data) trong giao tiếp I2C, kết nối với chân SDA của Arduino.

SCL: Chân xung nhịp đồng hồ (Serial Clock) trong giao tiếp I2C, kết nối với chân SCL của Arduino.

Sơ đồ đấu nối cảm biến áp suất không khí BMP180 với Arduino

SCL SDA
Arduino Uno A5 A4
Arduino Nano A5 A4
Arduino Mega 21 20
Leonardo/Micro 3 2

Cài đặt thư viện BMP085

Khởi động phần mềm Arduino IDE và truy cập theo đường dẫn sau: Sketch > Include Library > Manage Libraries…

Ở cửa sổ Library Manager, nhập vào ô tìm kiếm từ khóa “bmp180” kéo xuống tìm đến thư viện của Adafruit BMP085 chọn phiên bản mới nhất và tiến hành cài đặt.

Code đọc nhiệt độ và áp suất không khí Arduino

Đoạn code trên là một ví dụ về cách sử dụng thư viện Adafruit_BMP085 để đọc dữ liệu từ cảm biến áp suất BMP085 và hiển thị thông qua giao tiếp Serial.

Đoạn code này cho phép đọc và hiển thị thông tin nhiệt độ, áp suất, độ cao và áp suất mức biển từ cảm biến BMP085 thông qua giao tiếp Serial.

#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);
}

Giải thích Code

#include <Wire.h>
#include <Adafruit_BMP085.h>

Đầu tiên, khai báo hai thư viện cần thiết: Wire.h để thực hiện giao tiếp I2CAdafruit_BMP085.h để sử dụng các chức năng của cảm biến áp suất không khí BMP085.

#define seaLevelPressure_hPa 1013.25

"#define seaLevelPressure_hPa 1013.25" được sử dụng để định nghĩa áp suất mức biển, giá trị này được sử dụng trong việc tính toán độ cao thực tế.

void setup() {
  Serial.begin(9600);
  if (!bmp.begin()) {
	Serial.println("Could not find a valid BMP085 sensor, check wiring!");
	while (1) {}
  }
}

Trong hàm setup(), khởi tạo giao tiếp Serial với baud rate 9600 và kiểm tra xem cảm biến BMP085 có sẵn không. Nếu không tìm thấy cảm biến, chương trình sẽ in ra thông báo và dừng lại.

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);
}

Trong hàm loop(), thực hiện đọc và hiển thị dữ liệu từ cảm biến. Cụ thể, sử dụng các hàm của thư viện BMP để đọc và tính toán nhiệt độ (readTemperature()), áp suất (readPressure()), độ cao (readAltitude()), và áp suất mức biển (readSealevelPressure()). Kết quả được in ra thông qua giao tiếp Serial.

Cuối cùng, sử dụng hàm delay(500) để chờ 500ms trước khi lặp lại quá trình đo và hiển thị dữ liệu.

Bài viết liên quan

Subscribe
Notify of
guest

0 Comments
Inline Feedbacks
View all comments