Isi kandungan:

Partikel Photon - MPL3115A2 Precision Altimeter Sensor Tutorial: 4 Langkah
Partikel Photon - MPL3115A2 Precision Altimeter Sensor Tutorial: 4 Langkah

Video: Partikel Photon - MPL3115A2 Precision Altimeter Sensor Tutorial: 4 Langkah

Video: Partikel Photon - MPL3115A2 Precision Altimeter Sensor Tutorial: 4 Langkah
Video: What Are Quarks? Explained In 1 Minute 2024, November
Anonim
Image
Image

MPL3115A2 menggunakan sensor tekanan MEMS dengan antara muka I2C untuk memberikan data Tekanan / Ketinggian dan Suhu yang tepat. Keluaran sensor didigitalkan oleh ADC 24-bit resolusi tinggi. Pemprosesan dalaman membuang tugas pampasan dari sistem MCU tuan rumah. Ia mampu mengesan perubahan hanya 0.05 kPa yang setara dengan perubahan ketinggian 0.3m. Inilah demonstrasinya dengan foton Partikel.

Langkah 1: Apa yang Anda Perlu..

Apa yang kamu perlu..!!
Apa yang kamu perlu..!!

1. Foton Zarah

2. MPL3115A2

3. Kabel I²C

4. Perisai I²C untuk Foton Zarah

Langkah 2: Sambungan:

Sambungan
Sambungan
Sambungan
Sambungan
Sambungan
Sambungan
Sambungan
Sambungan

Ambil pelindung I2C untuk foton zarah dan tolak perlahan-lahan di atas pin foton zarah.

Kemudian sambungkan satu hujung kabel I2C ke sensor MPL3115A2 dan hujung yang lain ke pelindung I2C.

Sambungan ditunjukkan dalam gambar di atas.

Langkah 3: Kod:

Kod
Kod

Kod zarah untuk MPL3115A2 boleh dimuat turun dari Github repositori-DCUBE Store kami.

Inilah pautannya.

Kami telah menggunakan dua perpustakaan untuk kod partikel, iaitu application.h dan spark_wiring_i2c.h. Perpustakaan Spark_wiring_i2c diperlukan untuk memudahkan komunikasi I2C dengan sensor.

Anda juga boleh menyalin kod dari sini, ia diberikan seperti berikut:

// Diagihkan dengan lesen kehendak bebas.

// Gunakan dengan cara yang anda mahukan, untung atau percuma, dengan syarat ia sesuai dengan lesen karya yang berkaitan.

// MPL3115A2

// Kod ini direka untuk berfungsi dengan Modul Mini MPL3115A2_I2CS I2C

#sertakan

#sertakan

// Alamat MPL3115A2 I2C ialah 0x60 (96)

#tentukan Addr 0x60

apungan cTemp = 0.0, fTemp = 0.0, tekanan = 0.0, ketinggian = 0.0;

int temp = 0, tHeight = 0; pres panjang = 0;

persediaan tidak sah ()

{

// Tetapkan pemboleh ubah

Particle.variable ("i2cdevice", "MPL3115A2");

Particle.variable ("cTemp", cTemp);

Particle.variable ("tekanan", tekanan);

Particle.variable ("ketinggian", ketinggian);

// Memulakan komunikasi I2C

Wire.begin ();

// Inisialisasi Serial Communication, tetapkan baud rate = 9600

Serial.begin (9600);

// Mulakan penghantaran I2C

Wire.beginTransmission (Addr);

// Pilih daftar kawalan

Wire.write (0x26);

// Mod aktif, OSR = 128, mod altimeter

Wire.write (0xB9);

// Hentikan penghantaran I2C

Wire.endTransmission ();

// Mulakan penghantaran I2C

Wire.beginTransmission (Addr);

// Pilih daftar konfigurasi data

Wire.write (0x13);

// Acara siap data diaktifkan untuk ketinggian, tekanan, suhu

Wire.write (0x07);

// Hentikan penghantaran I2C

Wire.endTransmission ();

kelewatan (300);

}

gelung kosong ()

{

data int yang tidak ditandatangani [6];

// Mulakan penghantaran I2C

Wire.beginTransmission (Addr);

// Pilih daftar kawalan

Wire.write (0x26);

// Mod aktif, OSR = 128, mod altimeter

Wire.write (0xB9);

// Hentikan penghantaran I2C

Wire.endTransmission ();

kelewatan (1000);

// Mulakan penghantaran I2C

Wire.beginTransmission (Addr);

// Pilih daftar data

Wire.write (0x00);

// Hentikan penghantaran I2C

Wire.endTransmission ();

// Minta 6 bait data

Wire.requestFrom (Addr, 6);

// Baca 6 bait 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] = Wire.read ();

data [2] = Wire.read ();

data [3] = Wire.read ();

data [4] = Wire.read ();

data [5] = Wire.read ();

}

// Tukarkan data menjadi 20-bit

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

temp = ((data [4] * 256) + (data [5] & 0xF0)) / 16;

ketinggian = tHeight / 16.0;

cTemp = (temp / 16.0);

fTemp = cTemp * 1.8 + 32;

// Mulakan penghantaran I2C

Wire.beginTransmission (Addr);

// Pilih daftar kawalan

Wire.write (0x26);

// Mod aktif, OSR = 128, mod barometer

Wire.write (0x39);

// Hentikan penghantaran I2C

Wire.endTransmission ();

// Mulakan penghantaran I2C

Wire.beginTransmission (Addr);

// Pilih daftar data

Wire.write (0x00);

// Hentikan penghantaran I2C

Wire.endTransmission ();

kelewatan (1000);

// Minta 4 bait data

Wire.requestFrom (Addr, 4);

// Baca 4 bait data

// status, pres msb1, pres msb, pres lsb

jika (Wire.available () == 4)

{

data [0] = Wire.read ();

data [1] = Wire.read ();

data [2] = Wire.read ();

data [3] = Wire.read ();

}

// Tukarkan data menjadi 20-bit

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

tekanan = (pres / 4.0) / 1000.0;

// Keluarkan data ke papan pemuka

Particle.publish ("Ketinggian:", Rentetan (ketinggian));

Particle.publish ("Tekanan:", Rentetan (tekanan));

Particle.publish ("Suhu dalam Celsius:", Rentetan (cTemp));

Particle.publish ("Suhu di Fahrenheit:", Rentetan (fTemp));

kelewatan (1000);

}

Langkah 4: Aplikasi:

Pelbagai aplikasi MPL3115A2 termasuk Altimetri Ketepatan Tinggi, Telefon Pintar / Tablet, Altimetri Elektronik Peribadi dan lain-lain. Ia juga dapat digabungkan dalam Perangkaan Mati GPS, Peningkatan GPS untuk Perkhidmatan Kecemasan, Bantuan Peta, Navigasi dan juga Peralatan Stesen Cuaca.

Disyorkan: