Spisu treści:

Particle Photon - samouczek dotyczący precyzyjnego czujnika wysokościomierza MPL3115A2: 4 kroki
Particle Photon - samouczek dotyczący precyzyjnego czujnika wysokościomierza MPL3115A2: 4 kroki

Wideo: Particle Photon - samouczek dotyczący precyzyjnego czujnika wysokościomierza MPL3115A2: 4 kroki

Wideo: Particle Photon - samouczek dotyczący precyzyjnego czujnika wysokościomierza MPL3115A2: 4 kroki
Wideo: Jak oswoić robota PHOTON - nowoczesna technologia w służbie edukacji | Moje Bambino 2024, Listopad
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 fotonem cząstek.

Krok 1: Czego potrzebujesz.

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

1. Cząsteczkowy foton

2. MPL3115A2

3. Kabel I²C

4. Tarcza I²C dla fotonu cząstek

Krok 2: Połączenia:

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

Weź osłonę I2C dla fotonu cząsteczkowego i delikatnie przesuń ją na szpilki fotonu cząsteczkowego.

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 cząstek dla MPL3115A2 można pobrać z naszego repozytorium Github-DCUBE Store.

Tutaj jest link.

Wykorzystaliśmy dwie biblioteki do kodu cząstek, a mianowicie application.h oraz spark_wiring_i2c.h. Biblioteka Spark_wiring_i2c jest wymagana do ułatwienia komunikacji I2C z czujnikiem.

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ć

#włączać

// Adres MPL3115A2 I2C to 0x60(96)

#define Addr 0x60

float cTemp = 0.0, fTemp = 0.0, ciśnienie = 0.0, wysokość = 0.0;

int temp = 0, tHeight = 0; długie naciśnięcie = 0;

pusta konfiguracja()

{

// Ustaw zmienną

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

Particle.variable("cTemp", cTemp);

Particle.variable("ciśnienie", ciśnienie);

Particle.variable("wysokość", wysokość);

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

if(Przewód.dostępny() == 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

tHeight = ((((długie)dane[1] * (długie)65536) + (dane[2] * 256) + (dane[3] & 0xF0)) / 16);

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

wysokość = wysokość / 16,0;

cTemp = (temp / 16,0);

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

// Rozpocznij transmisję I2C

Wire.beginTransmisja(Addr);

// Wybierz rejestr danych

Wire.write(0x00);

// Zatrzymaj transmisję I2C

Wire.endTransmission();

opóźnienie (1000);

// Żądaj 4 bajtów danych

Wire.requestFrom(Addr, 4);

// Odczytaj 4 bajty danych

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

if(Przewód.dostępny() == 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

pres = (((długie)dane[1] * (długie)65536) + (dane[2] * 256) + (dane[3] i 0xF0)) / 16;

ciśnienie = (pres / 4.0) / 1000,0;

// Dane wyjściowe do pulpitu nawigacyjnego

Particle.publish("Wysokość:", String(wysokość));

Particle.publish("Ciśnienie:", Ciąg(ciśnienie));

Particle.publish("Temperatura w stopniach Celsjusza:", String(cTemp));

Particle.publish("Temperatura w stopniach Fahrenheita:", String(fTemp));

opóźnienie (1000);

}

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: