Mục lục:

Arduino Nano - Hướng dẫn sử dụng cảm biến đo độ cao chính xác MPL3115A2: 4 bước
Arduino Nano - Hướng dẫn sử dụng cảm biến đo độ cao chính xác MPL3115A2: 4 bước

Video: Arduino Nano - Hướng dẫn sử dụng cảm biến đo độ cao chính xác MPL3115A2: 4 bước

Video: Arduino Nano - Hướng dẫn sử dụng cảm biến đo độ cao chính xác MPL3115A2: 4 bước
Video: Arduino Nano MPL115A2 Digital Barometer Tutorial 2024, Tháng bảy
Anonim
Image
Image

MPL3115A2 sử dụng cảm biến áp suất MEMS với giao diện I2C để cung cấp dữ liệu Áp suất / Độ cao và Nhiệt độ chính xác. Các đầu ra cảm biến được số hóa bằng ADC 24-bit có độ phân giải cao. Xử lý nội bộ loại bỏ các nhiệm vụ bồi thường khỏi hệ thống MCU chủ. Nó có khả năng phát hiện sự thay đổi chỉ 0,05 kPa tương đương với sự thay đổi độ cao 0,3m. Đây là phần trình diễn của nó với Arduino Nano.

Bước 1: Những gì bạn cần.. !

Những gì bạn cần.. !!
Những gì bạn cần.. !!

1. Arduino Nano

2. MPL3115A2

3. Cáp I²C

4. Tấm chắn I²C cho Arduino Nano

Bước 2: Kết nối:

Kết nối
Kết nối
Kết nối
Kết nối
Kết nối
Kết nối
Kết nối
Kết nối

Lấy một tấm chắn I2C cho Arduino Nano và nhẹ nhàng đẩy nó qua các chân của Nano.

Sau đó kết nối một đầu của cáp I2C với cảm biến MPL3115A2 và đầu kia với tấm chắn I2C.

Các kết nối được hiển thị trong hình trên.

Bước 3: Mã:

Mã số
Mã số

Có thể tải xuống mã arduino cho MPL3115A2 từ kho lưu trữ github-DCUBE Store của chúng tôi.

Đây là liên kết cho cùng một:

github.com/DcubeTechVentures/MPL3115A2/blob/master/Arduino/MPL3115A2.ino

Chúng tôi bao gồm thư viện Wire.h để tạo điều kiện giao tiếp I2c của cảm biến với bảng Arduino.

Bạn cũng có thể sao chép mã từ đây, nó được đưa ra như sau:

// Được phân phối với một giấy phép tự do.

// Sử dụng nó theo bất kỳ cách nào bạn muốn, lợi nhuận hoặc miễn phí, miễn là nó phù hợp với giấy phép của các tác phẩm liên quan.

// MPL3115A2

// Mã này được thiết kế để hoạt động với Mô-đun Mini MPL3115A2_I2CS I2C

#bao gồm

// MPL3115A2 Địa chỉ I2C là 0x60 (96)

#define Addr 0x60

void setup ()

{

// Khởi tạo giao tiếp I2C

Wire.begin ();

// Giao tiếp nối tiếp khởi tạo, đặt tốc độ truyền = 9600

Serial.begin (9600);

// Bắt đầu truyền I2C

Wire.beginTransmission (Addr);

// Chọn thanh ghi điều khiển

Wire.write (0x26);

// Chế độ hoạt động, OSR = 128, chế độ đo độ cao

Wire.write (0xB9);

// Dừng truyền I2C

Wire.endTransmission ();

// Bắt đầu truyền I2C

Wire.beginTransmission (Addr);

// Chọn thanh ghi cấu hình dữ liệu

Wire.write (0x13);

// Sự kiện sẵn sàng dữ liệu được bật cho độ cao, áp suất, nhiệt độ

Wire.write (0x07);

// Dừng truyền I2C

Wire.endTransmission ();

chậm trễ (300);

}

void loop ()

{

dữ liệu int không dấu [6];

// Bắt đầu truyền I2C

Wire.beginTransmission (Addr);

// Chọn thanh ghi điều khiển

Wire.write (0x26);

// Chế độ hoạt động, OSR = 128, chế độ đo độ cao

Wire.write (0xB9);

// Dừng truyền I2C

Wire.endTransmission ();

chậm trễ (1000);

// Bắt đầu truyền I2C

Wire.beginTransmission (Addr);

// Chọn thanh ghi dữ liệu

Wire.write (0x00);

// Dừng truyền I2C

Wire.endTransmission ();

// Yêu cầu 6 byte dữ liệu

Wire.requestFrom (Addr, 6);

// Đọc 6 byte dữ liệu từ địa chỉ 0x00 (00)

// trạng thái, tHeight msb1, tHeight msb, tHeight lsb, temp msb, temp lsb

if (Wire.available () == 6)

{

data [0] = Wire.read ();

data [1] = Wire.read ();

data [2] = Wire.read ();

data [3] = Wire.read ();

data [4] = Wire.read ();

data [5] = Wire.read ();

}

// Chuyển đổi dữ liệu thành 20 bit

int tHeight = (((long) (data [1] * (long) 65536) + (data [2] * 256) + (data [3] & 0xF0)) / 16);

int temp = ((dữ liệu [4] * 256) + (dữ liệu [5] & 0xF0)) / 16;

độ cao phao = tHeight / 16,0;

float cTemp = (temp / 16.0);

float fTemp = cTemp * 1.8 + 32;

// Bắt đầu truyền I2C

Wire.beginTransmission (Addr);

// Chọn thanh ghi điều khiển

Wire.write (0x26);

// Chế độ hoạt động, OSR = 128, chế độ phong vũ biểu

Wire.write (0x39);

// Dừng truyền I2C

Wire.endTransmission ();

chậm trễ (1000);

// Bắt đầu truyền I2C

Wire.beginTransmission (Addr);

// Chọn thanh ghi dữ liệu

Wire.write (0x00);

// Dừng truyền I2C

Wire.endTransmission ();

// Yêu cầu 4 byte dữ liệu

Wire.requestFrom (Addr, 4);

// Đọc 4 byte dữ liệu

// trạng thái, msb1 đặt trước, msb đặt trước, lsb đặt trước

if (Wire.available () == 4)

{

data [0] = Wire.read ();

data [1] = Wire.read ();

data [2] = Wire.read ();

data [3] = Wire.read ();

}

// Chuyển đổi dữ liệu thành 20 bit

long pres = (((long) data [1] * (long) 65536) + (data [2] * 256) + (data [3] & 0xF0)) / 16;

áp suất phao = (pres / 4.0) / 1000.0;

// Xuất dữ liệu ra màn hình nối tiếp

Serial.print ("Cao độ:");

Serial.print (độ cao);

Serial.println ("m");

Serial.print ("Áp suất:");

Serial.print (áp suất);

Serial.println ("kPa");

Serial.print ("Nhiệt độ tính bằng độ C:");

Serial.print (cTemp);

Serial.println ("C");

Serial.print ("Nhiệt độ tính bằng Fahrenheit:");

Serial.print (fTemp);

Serial.println ("F");

chậm trễ (500);

}

Bước 4: Ứng dụng:

Các ứng dụng khác nhau của MPL3115A2 bao gồm Đo độ chính xác cao, Điện thoại thông minh / Máy tính bảng, Đo độ cao điện tử cá nhân, v.v. Nó cũng có thể được kết hợp trong GPS Dead Reckoning, Tăng cường GPS cho Dịch vụ Khẩn cấp, Hỗ trợ Bản đồ, Điều hướng cũng như Thiết bị Trạm Thời tiết.

Đề xuất: