Spisu treści:

Arduino Nano - samouczek dotyczący precyzyjnego czujnika wysokościomierza MPL3115A2: 4 kroki
Arduino Nano - samouczek dotyczący precyzyjnego czujnika wysokościomierza MPL3115A2: 4 kroki

Wideo: Arduino Nano - samouczek dotyczący precyzyjnego czujnika wysokościomierza MPL3115A2: 4 kroki

Wideo: Arduino Nano - samouczek dotyczący precyzyjnego czujnika wysokościomierza MPL3115A2: 4 kroki
Wideo: kurs Arduino programowanie - Wyświetlacz OLED - WSTĘP do programowania - #21 2024, Lipiec
Anonim
Image
Image

MPL3115A2 wykorzystuje czujnik ciśnienia MEMS z interfejsem I2C w celu zapewnienia dokładnych danych dotyczących ciśnienia/wysokości i temperatury. Wyjścia czujnika są digitalizowane przez 24-bitowy przetwornik ADC o wysokiej rozdzielczości. Przetwarzanie wewnętrzne usuwa zadania dotyczące wynagrodzeń z systemu hosta MCU. Jest w stanie wykryć zmianę tylko o 0,05 kPa, co odpowiada zmianie wysokości o 0,3 m. Oto jego demonstracja z Arduino Nano.

Krok 1: Czego potrzebujesz.

Czego potrzebujesz..!!
Czego potrzebujesz..!!

1. Arduino Nano

2. MPL3115A2

3. Kabel I²C

4. Tarcza I²C dla Arduino Nano

Krok 2: Połączenia:

Znajomości
Znajomości
Znajomości
Znajomości
Znajomości
Znajomości
Znajomości
Znajomości

Weź nakładkę I2C dla Arduino Nano i delikatnie wepchnij ją na piny Nano.

Następnie podłącz jeden koniec kabla I2C do czujnika MPL3115A2, a drugi koniec do ekranu I2C.

Połączenia prezentuje powyższy obrazek.

Krok 3: Kod:

Kod
Kod

Kod arduino dla MPL3115A2 można pobrać z naszego repozytorium github-DCUBE Store.

Oto link do tego samego:

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

Dołączamy bibliotekę Wire.h ułatwiającą komunikację I2c czujnika z płytką Arduino.

Możesz również skopiować kod stąd, jest on podany w następujący sposób:

// Rozprowadzane z wolną licencją.

// Używaj go w dowolny sposób, z zyskiem lub za darmo, pod warunkiem, że pasuje do licencji powiązanych z nim dzieł.

// MPL3115A2

// Ten kod jest przeznaczony do pracy z MPL3115A2_I2CS I2C Mini Module

#włączać

// Adres MPL3115A2 I2C to 0x60(96)

#define Addr 0x60

pusta konfiguracja()

{

// Zainicjuj komunikację I2C

Wire.początek();

// Zainicjuj komunikację szeregową, ustaw szybkość transmisji = 9600

Serial.początek(9600);

// Rozpocznij transmisję I2C

Wire.beginTransmisja(Addr);

// Wybierz rejestr kontrolny

Wire.write(0x26);

// Tryb aktywny, OSR = 128, tryb wysokościomierza

Wire.write(0xB9);

// Zatrzymaj transmisję I2C

Wire.endTransmission();

// Rozpocznij transmisję I2C

Wire.beginTransmisja(Addr);

// Wybierz rejestr konfiguracji danych

Wire.write(0x13);

// Zdarzenie gotowości danych włączone dla wysokości, ciśnienia, temperatury

Wire.write(0x07);

// Zatrzymaj transmisję I2C

Wire.endTransmission();

opóźnienie(300);

}

pusta pętla()

{

dane int bez znaku[6];

// Rozpocznij transmisję I2C

Wire.beginTransmisja(Addr);

// Wybierz rejestr kontrolny

Wire.write(0x26);

// Tryb aktywny, OSR = 128, tryb wysokościomierza

Wire.write(0xB9);

// Zatrzymaj transmisję I2C

Wire.endTransmission();

opóźnienie (1000);

// Rozpocznij transmisję I2C

Wire.beginTransmisja(Addr);

// Wybierz rejestr danych

Wire.write(0x00);

// Zatrzymaj transmisję I2C

Wire.endTransmission();

// Żądaj 6 bajtów danych

Wire.requestFrom(Addr, 6);

// Odczytaj 6 bajtów danych z adresu 0x00(00)

// stan, wysokość msb1, wysokość msb, wysokość msb, temp msb, temp lsb

jeśli (Wire.available() == 6)

{

dane[0] = Przewód.odczyt();

dane[1] = Drut.odczyt();

dane[2] = Przewód.odczyt();

dane[3] = Przewód.odczyt();

dane[4] = Przewód.odczyt();

dane[5] = Wire.read();

}

// Konwertuj dane na 20-bitowe

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

int temp = ((dane[4] * 256) + (dane[5] i 0xF0)) / 16;

wysokość pływania = wysokość / 16,0;

pływak cTemp = (temp / 16,0);

pływak fTemp = cTemp * 1,8 + 32;

// Rozpocznij transmisję I2C

Wire.beginTransmisja(Addr);

// Wybierz rejestr kontrolny

Wire.write(0x26);

// Tryb aktywny, OSR = 128, tryb barometru

Wire.write(0x39);

// Zatrzymaj transmisję I2C

Wire.endTransmission();

opóźnienie (1000);

// Rozpocznij transmisję I2C

Wire.beginTransmisja(Addr);

// Wybierz rejestr danych

Wire.write(0x00);

// Zatrzymaj transmisję I2C

Wire.endTransmission();

// Żądaj 4 bajtów danych

Wire.requestFrom(Addr, 4);

// Odczytaj 4 bajty danych

// status, naciśnij msb1, naciśnij msb, naciśnij lsb

jeśli (Wire.available() == 4)

{

dane[0] = Przewód.odczyt();

dane[1] = Drut.odczyt();

dane[2] = Przewód.odczyt();

dane[3] = Przewód.odczyt();

}

// Konwertuj dane na 20-bitowe

długie naciśnięcie = (((long)data[1] * (long)65536) + (data[2] * 256) + (data[3] & 0xF0)) / 16;

ciśnienie pływakowe = (pres / 4.0) / 1000.0;

// Dane wyjściowe do monitora szeregowego

Serial.print("Wysokość: ");

Serial.print(wysokość);

Serial.println(" m");

Serial.print("Ciśnienie: ");

druk.seryjny(ciśnienie);

Serial.println("kPa");

Serial.print("Temperatura w stopniach Celsjusza: ");

druk.seryjny(cTemp);

Serial.println("C");

Serial.print("Temperatura w stopniach Fahrenheita: ");

Serial.print(fTemp);

Serial.println(" F");

opóźnienie (500);

}

Krok 4: Aplikacje:

Różne zastosowania MPL3115A2 obejmują wysokościomierze o wysokiej dokładności, smartfony/tablety, wysokościomierze elektroniki osobistej itp. Można go również włączyć do systemu GPS Dead Reckoning, ulepszeń GPS dla służb ratunkowych, asystenta mapy, nawigacji, a także wyposażenia stacji pogodowej.

Zalecana: