Daftar Isi:
2025 Pengarang: John Day | [email protected]. Terakhir diubah: 2025-01-13 06:57
MPL3115A2 menggunakan sensor tekanan MEMS dengan antarmuka I2C untuk memberikan data Tekanan/Ketinggian dan Suhu yang akurat. Output sensor didigitalkan oleh ADC 24-bit resolusi tinggi. Pemrosesan internal menghapus tugas kompensasi dari sistem MCU host. Ia mampu mendeteksi perubahan hanya 0,05 kPa yang setara dengan perubahan ketinggian 0,3 m. Berikut adalah demonstrasinya dengan Arduino Nano.
Langkah 1: Yang Anda Butuhkan.
1. Arduino Nano
2. MPL3115A2
3. Kabel I²C
4. Perisai I²C untuk Arduino Nano
Langkah 2: Koneksi:
Ambil pelindung I2C untuk Arduino Nano dan dorong perlahan ke pin Nano.
Kemudian sambungkan salah satu ujung kabel I2C ke sensor MPL3115A2 dan ujung lainnya ke pelindung I2C.
Koneksi ditunjukkan pada gambar di atas.
Langkah 3: Kode:
Kode arduino untuk MPL3115A2 dapat diunduh dari repositori github-DCUBE Store kami.
Berikut ini tautan untuk hal yang sama:
github.com/DcubeTechVentures/MPL3115A2/blob/master/Arduino/MPL3115A2.ino
Kami menyertakan library Wire.h untuk memfasilitasi komunikasi I2c dari sensor dengan board Arduino.
Anda juga dapat menyalin kode dari sini, diberikan sebagai berikut:
// Didistribusikan dengan lisensi kehendak bebas.
// Gunakan sesuka Anda, untung atau gratis, asalkan sesuai dengan lisensi karya terkait.
// MPL3115A2
// Kode ini dirancang untuk bekerja dengan Modul Mini MPL3115A2_I2CS I2C
#termasuk
// Alamat MPL3115A2 I2C adalah 0x60(96)
#tentukan Addr 0x60
batalkan pengaturan()
{
// Inisialisasi komunikasi I2C
Kawat.mulai();
// Inisialisasi Komunikasi Serial, setel baud rate = 9600
Serial.begin(9600);
// Mulai transmisi I2C
Wire.beginTransmission(Addr);
// Pilih register kontrol
Kawat.tulis (0x26);
// Mode aktif, OSR = 128, mode altimeter
Wire.write(0xB9);
// Hentikan transmisi I2C
Kawat.endTransmisi();
// Mulai transmisi I2C
Wire.beginTransmission(Addr);
// Pilih register konfigurasi data
Kawat.tulis (0x13);
// Acara siap data diaktifkan untuk ketinggian, tekanan, suhu
Kawat.tulis (0x07);
// Hentikan transmisi I2C
Kawat.endTransmisi();
penundaan (300);
}
lingkaran kosong()
{
data int yang tidak ditandatangani[6];
// Mulai transmisi I2C
Wire.beginTransmission(Addr);
// Pilih register kontrol
Kawat.tulis (0x26);
// Mode aktif, OSR = 128, mode altimeter
Wire.write(0xB9);
// Hentikan transmisi I2C
Kawat.endTransmisi();
penundaan (1000);
// Mulai transmisi I2C
Wire.beginTransmission(Addr);
// Pilih daftar data
Kawat.tulis (0x00);
// Hentikan transmisi I2C
Kawat.endTransmisi();
// Meminta 6 byte data
Wire.requestFrom(Addr, 6);
// Baca 6 byte data dari alamat 0x00(00)
// status, tHeight msb1, tHeight msb, tHeight lsb, temp msb, temp lsb
jika (Wire.available() == 6)
{
data[0] = Wire.read();
data[1] = Kawat.baca();
data[2] = Wire.read();
data[3] = Wire.read();
data[4] = Kawat.baca();
data[5] = Wire.read();
}
// Ubah data menjadi 20-bit
int tinggi = (((panjang)(data[1] * (panjang)65536) + (data[2] * 256) + (data[3] & 0xF0)) / 16);
int temp = ((data[4] * 256) + (data[5] & 0xF0)) / 16;
ketinggian mengambang = tHeight / 16.0;
float cTemp = (temp / 16.0);
float fTemp = cTemp * 1,8 + 32;
// Mulai transmisi I2C
Wire.beginTransmission(Addr);
// Pilih register kontrol
Kawat.tulis (0x26);
// Mode aktif, OSR = 128, mode barometer
Kawat.tulis (0x39);
// Hentikan transmisi I2C
Kawat.endTransmisi();
penundaan (1000);
// Mulai transmisi I2C
Wire.beginTransmission(Addr);
// Pilih daftar data
Kawat.tulis (0x00);
// Hentikan transmisi I2C
Kawat.endTransmisi();
// Meminta 4 byte data
Wire.requestFrom(Addr, 4);
// Baca 4 byte data
// status, tekan msb1, tekan msb, tekan lsb
jika (Wire.available() == 4)
{
data[0] = Wire.read();
data[1] = Kawat.baca();
data[2] = Wire.read();
data[3] = Wire.read();
}
// Ubah data menjadi 20-bit
lama pres = (((panjang)data[1] * (panjang)65536) + (data[2] * 256) + (data[3] & 0xF0)) / 16;
tekanan float = (pres / 4.0) / 10000.0;
// Keluarkan data ke monitor serial
Serial.print("Ketinggian: ");
Serial.print(ketinggian);
Serial.println("m");
Serial.print("Tekanan: ");
Serial.print(tekanan);
Serial.println("kPa");
Serial.print("Suhu dalam Celcius: ");
Serial.print(cTemp);
Serial.println("C");
Serial.print("Suhu dalam Fahrenheit: ");
Serial.print(fTemp);
Serial.println("F");
penundaan (500);
}
Langkah 4: Aplikasi:
Berbagai aplikasi MPL3115A2 termasuk Altimetri Akurasi Tinggi, Smartphone/Tablet, Altimetri Elektronik Pribadi, dll. Ini juga dapat digabungkan dalam GPS Dead Reckoning, Peningkatan GPS untuk Layanan Darurat, Bantuan Peta, Navigasi, serta Peralatan Stasiun Cuaca.