Мазмуну:

Particle Photon - MPL3115A2 Precision Altimeter Sensor үйрөткүчү: 4 кадам
Particle Photon - MPL3115A2 Precision Altimeter Sensor үйрөткүчү: 4 кадам

Video: Particle Photon - MPL3115A2 Precision Altimeter Sensor үйрөткүчү: 4 кадам

Video: Particle Photon - MPL3115A2 Precision Altimeter Sensor үйрөткүчү: 4 кадам
Video: BeagleBone Black HP203B Precision Barometer & Altimeter Sensor 'C' Code Tutorial 2024, Ноябрь
Anonim
Image
Image

MPL3115A2 так басым/бийиктик жана температура маалыматын берүү үчүн I2C интерфейси бар MEMS басым сенсорун колдонот. Сенсордун жыйынтыктары жогорку разряддуу 24-бит ADC менен санариптештирилет. Ички иштетүү MCU тутумунун компенсация милдеттерин жок кылат. Бул 0,05 кПадагы өзгөрүүнү аныктоого жөндөмдүү, бул бийиктиктин 0,3 м өзгөрүшүнө барабар. Бул жерде Particle Photon менен анын көрсөтмөсү.

1 -кадам: Сизге эмне керек..

Сизге эмне керек.. !!
Сизге эмне керек.. !!

1. Фотоникалык бөлүкчөлөр

2. MPL3115A2

3. I²C кабели

4. I²C калканч фотон үчүн

2 -кадам: Байланыштар:

Байланыштар
Байланыштар
Байланыштар
Байланыштар
Байланыштар
Байланыштар
Байланыштар
Байланыштар

Бөлүкчө фотону үчүн I2C калканчын алыңыз жана аны акырын бөлүкчө фотонунун казыктарынын үстүнө түртүңүз.

Андан кийин I2C кабелинин бир учун MPL3115A2 сенсоруна, экинчи учун I2C калканчына туташтырыңыз.

Байланыштар жогорудагы сүрөттө көрсөтүлгөн.

3 -кадам: Код:

Код
Код

MPL3115A2 үчүн бөлүкчө кодун биздин Github репозиторийинен-DCUBE дүкөнүнөн көчүрүп алсаңыз болот.

Мына шилтеме.

Биз бөлүкчө коду үчүн эки китепкананы колдондук, алар application.h жана spark_wiring_i2c.h. Сенсор менен I2C байланышын жеңилдетүү үчүн Spark_wiring_i2c китепканасы талап кылынат.

Сиз бул жерден кодду көчүрүп алсаңыз болот, ал төмөнкүчө берилген:

// Эркин лицензия менен таратылган.

// Аны каалагандай колдон, пайда же бекер, эгер ал ага байланыштуу чыгармаларынын лицензиясына туура келсе.

// MPL3115A2

// Бул код MPL3115A2_I2CS I2C Mini Module менен иштөө үчүн иштелип чыккан

#кошуу

#кошуу

// 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;

жараксыз орнотуу ()

{

// Өзгөрмөнү коюу

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

Particle.variable ("cTemp", cTemp);

Бөлүкчө.өзгөрмөлүү ("басым", басым);

Бөлүкчө.өзгөрмөлүү ("бийиктик", бийиктик);

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

}

боштук цикл ()

{

кол коюлбаган 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);

// 0x00 (00) дарегинен 6 байт маалыматтарды окуу

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

эгер (Wire.available () == 6)

{

data [0] = Wire.read ();

data [1] = Wire.read ();

data [2] = Wire.read ();

маалымат [3] = Wire.read ();

data [4] = Wire.read ();

маалымат [5] = Wire.read ();

}

// Маалыматтарды 20 битке айландырыңыз

tHeight = ((((узун) маалымат [1] * (узун) 65536) + (маалымат [2] * 256) + (маалымат [3] & 0xF0)) / 16);

темп = ((маалыматтар [4] * 256) + (маалыматтар [5] & 0xF0)) / 16;

бийиктик = tHeight / 16.0;

cTemp = (темп / 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 байт маалыматтарды окуңуз

// статус, пресс msb1, пресс msb, pres lsb

эгер (Wire.available () == 4)

{

data [0] = Wire.read ();

data [1] = Wire.read ();

data [2] = Wire.read ();

маалымат [3] = Wire.read ();

}

// Маалыматтарды 20 битке айландырыңыз

pres = (((узун) маалымат [1] * (узун) 65536) + (маалымат [2] * 256) + (маалымат [3] & 0xF0)) / 16;

басым = (прес / 4.0) / 1000.0;

// Маалыматтарды тактасына чыгаруу

Particle.publish ("Бийиктик:", Сап (бийиктик));

Particle.publish ("Басым:", Стринг (басым));

Particle.publish ("Цельсий боюнча температура:", String (cTemp));

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

кечигүү (1000);

}

4 -кадам: Тиркемелер:

MPL3115A2дин ар кандай тиркемелери жогорку тактык алтиметриясын, смартфондорду/планшеттерди, персоналдык электроника алтиметриясын ж.б. камтыйт.

Сунушталууда: