Мазмуну:

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

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

Video: Arduino Nano - MPL3115A2 Precision Altimeter Sensor үйрөткүчү: 4 кадам
Video: Arduino Nano - MPL3115A2 Precision Altimeter Sensor Tutorial 2024, Июль
Anonim
Image
Image

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

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

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

1. Ардуино Нано

2. MPL3115A2

3. I²C кабели

4. Arduino Nano үчүн I²C Shield

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

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

Arduino Nano үчүн I2C калканчын алыңыз жана аны акырындык менен Нанонун казыктарына түртүңүз.

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

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

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

Код
Код

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

Мына ушуга шилтеме:

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

Биз сенсордун Arduino тактасы менен I2c байланышын жеңилдетүү үчүн Wire.h китепканасын камтыйбыз.

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

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

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

// MPL3115A2

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

#кошуу

// MPL3115A2 I2C дареги 0x60 (96)

#define Addr 0x60

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

{

// 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 битке айландырыңыз

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

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

калкып бийиктик = tHeight / 16.0;

float cTemp = (temp / 16.0);

float fTemp = cTemp * 1.8 + 32;

// I2C өткөрүүнү баштоо

Wire.beginTransmission (Addr);

// Башкаруу реестрин тандоо

Wire.write (0x26);

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

Wire.write (0x39);

// I2C өткөрүүнү токтотуу

Wire.endTransmission ();

кечигүү (1000);

// I2C өткөрүүнү баштоо

Wire.beginTransmission (Addr);

// Маалымат реестрин тандоо

Wire.write (0x00);

// I2C өткөрүүнү токтотуу

Wire.endTransmission ();

// 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 битке айландырыңыз

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

сүзүүчү басым = (pres / 4.0) / 1000.0;

// Маалыматтарды сериялык мониторго чыгаруу

Serial.print ("Бийиктик:");

Serial.print (бийиктик);

Serial.println ("m");

Serial.print ("Басым:");

Serial.print (басым);

Serial.println ("kPa");

Serial.print ("Цельсий боюнча температура:");

Serial.print (cTemp);

Serial.println ("C");

Serial.print ("Фаренгейт температурасы:");

Serial.print (fTemp);

Serial.println ("F");

кечигүү (500);

}

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

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

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