Съдържание:

Частичен фотон - Прецизен сензор за висотомер MPL3115A2 Урок: 4 стъпки
Частичен фотон - Прецизен сензор за висотомер MPL3115A2 Урок: 4 стъпки

Видео: Частичен фотон - Прецизен сензор за висотомер MPL3115A2 Урок: 4 стъпки

Видео: Частичен фотон - Прецизен сензор за висотомер MPL3115A2 Урок: 4 стъпки
Видео: Установка датчиков ABS. Дополнение к предыдущему видео. мерседес ATEGO. 2024, Ноември
Anonim
Image
Image

MPL3115A2 използва MEMS сензор за налягане с I2C интерфейс за предоставяне на точни данни за налягане/надморска височина и температура. Изходите на сензора са цифровизирани от 24-битов ADC с висока разделителна способност. Вътрешната обработка премахва компенсационните задачи от хост MCU системата. Той е в състояние да открие промяна само в 0,05 kPa, което се равнява на 0,3 m промяна във височината. Ето демонстрацията му с фотон от частици.

Стъпка 1: Какво ви трябва..

От какво имаш нужда..!!
От какво имаш нужда..!!

1. Фотон от частици

2. MPL3115A2

3. Кабел I²C

4. I²C щит за частичен фотон

Стъпка 2: Връзки:

Връзки
Връзки
Връзки
Връзки
Връзки
Връзки
Връзки
Връзки

Вземете I2C щит за фотон на частиците и го натиснете леко върху щифтовете на фотона на частиците.

След това свържете единия край на I2C кабела към сензора MPL3115A2, а другия край към I2C щита.

Връзките са показани на снимката по -горе.

Стъпка 3: Код:

Код
Код

Кодът на частиците за MPL3115A2 може да бъде изтеглен от нашето хранилище на Github-DCUBE Store.

Ето линка.

Използвахме две библиотеки за код на частици, които са application.h и spark_wiring_i2c.h. Библиотеката Spark_wiring_i2c е необходима за улесняване на I2C комуникацията със сензора.

Можете също да копирате кода от тук, той е даден, както следва:

// Разпространява се с лиценз за свободна воля.

// Използвайте го по какъвто начин искате, печалба или безплатно, при условие че се вписва в лицензите на свързаните с него произведения.

// MPL3115A2

// Този код е предназначен за работа с мини модула MPL3115A2_I2CS I2C

#включва

#включва

// MPL3115A2 I2C адресът е 0x60 (96)

#define Addr 0x60

float cTemp = 0.0, fTemp = 0.0, налягане = 0.0, надморска височина = 0.0;

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

void setup ()

{

// Задаване на променлива

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

Particle.variable ("cTemp", cTemp);

Частица.променлива ("налягане", налягане);

Particle.variable ("надморска височина", надморска височина);

// Инициализиране на I2C комуникация

Wire.begin ();

// Инициализира серийна комуникация, зададена скорост на предаване = 9600

Serial.begin (9600);

// Стартиране на I2C предаване

Wire.beginTransmission (Addr);

// Изберете контролен регистър

Wire.write (0x26);

// Активен режим, OSR = 128, режим на висотомер

Wire.write (0xB9);

// Спиране на I2C предаването

Wire.endTransmission ();

// Стартиране на I2C предаване

Wire.beginTransmission (Addr);

// Изберете регистър за конфигуриране на данни

Wire.write (0x13);

// Активирано събитие за готовност за данни за надморска височина, налягане, температура

Wire.write (0x07);

// Спиране на I2C предаването

Wire.endTransmission ();

забавяне (300);

}

void loop ()

{

беззнакови int данни [6];

// Стартиране на I2C предаване

Wire.beginTransmission (Addr);

// Изберете контролен регистър

Wire.write (0x26);

// Активен режим, OSR = 128, режим на висотомер

Wire.write (0xB9);

// Спиране на I2C предаването

Wire.endTransmission ();

забавяне (1000);

// Стартиране на I2C предаване

Wire.beginTransmission (Addr);

// Изберете регистър на данни

Wire.write (0x00);

// Спиране на I2C предаването

Wire.endTransmission ();

// Изискване на 6 байта данни

Wire.requestFrom (Addr, 6);

// Прочетете 6 байта данни от адрес 0x00 (00)

// статус, tHeight msb1, tHeight msb, tHeight lsb, temp msb, temp lsb

ако (Wire.available () == 6)

{

данни [0] = Wire.read ();

данни [1] = Wire.read ();

данни [2] = Wire.read ();

данни [3] = Wire.read ();

данни [4] = Wire.read ();

данни [5] = Wire.read ();

}

// Конвертираме данните в 20-бита

tHeight = ((((дълги) данни [1] * (дълги) 65536) + (данни [2] * 256) + (данни [3] & 0xF0)) / 16);

temp = ((данни [4] * 256) + (данни [5] & 0xF0)) / 16;

надморска височина = tHeight / 16,0;

cTemp = (temp / 16.0);

fTemp = cTemp * 1.8 + 32;

// Стартиране на I2C предаване

Wire.beginTransmission (Addr);

// Изберете контролен регистър

Wire.write (0x26);

// Активен режим, OSR = 128, режим на барометър

Wire.write (0x39);

// Спиране на I2C предаването

Wire.endTransmission ();

// Стартиране на I2C предаване

Wire.beginTransmission (Addr);

// Изберете регистър на данни

Wire.write (0x00);

// Спиране на I2C предаването

Wire.endTransmission ();

забавяне (1000);

// Изискване на 4 байта данни

Wire.requestFrom (Addr, 4);

// Прочетете 4 байта данни

// състояние, pres msb1, pres msb, pres lsb

ако (Wire.available () == 4)

{

данни [0] = Wire.read ();

данни [1] = Wire.read ();

данни [2] = Wire.read ();

данни [3] = Wire.read ();

}

// Конвертираме данните в 20-бита

pres = (((дълги) данни [1] * (дълги) 65536) + (данни [2] * 256) + (данни [3] & 0xF0)) / 16;

налягане = (pres / 4.0) / 1000.0;

// Извеждане на данни към таблото за управление

Particle.publish ("Altitude:", String (altitude));

Particle.publish ("Налягане:", Низ (налягане));

Particle.publish ("Температура в Целзий:", Низ (cTemp));

Particle.publish ("Температура по Фаренхайт:", String (fTemp));

забавяне (1000);

}

Стъпка 4: Приложения:

Различните приложения на MPL3115A2 включват високоточна алтиметрия, смартфони/таблети, лична електроника и др. Може също да бъде включена в GPS Dead Reckoning, GPS Enhancement за аварийни услуги, Map Assist, навигация, както и оборудване на метеорологичните станции.

Препоръчано: