Índice:

Particle Photon - MPL3115A2 Precision Altimeter Sensor Tutorial: 4 Passos
Particle Photon - MPL3115A2 Precision Altimeter Sensor Tutorial: 4 Passos

Vídeo: Particle Photon - MPL3115A2 Precision Altimeter Sensor Tutorial: 4 Passos

Vídeo: Particle Photon - MPL3115A2 Precision Altimeter Sensor Tutorial: 4 Passos
Vídeo: Particle Photon - MPL3115A2 Precision Altimeter Sensor Tutorial 2024, Junho
Anonim
Image
Image

O MPL3115A2 emprega um sensor de pressão MEMS com uma interface I2C para fornecer dados precisos de pressão / altitude e temperatura. As saídas do sensor são digitalizadas por um ADC de alta resolução de 24 bits. O processamento interno remove as tarefas de compensação do sistema MCU host. Ele é capaz de detectar uma mudança em apenas 0,05 kPa, o que equivale a uma mudança de 0,3 m na altitude. Aqui está sua demonstração com o fóton de partículas.

Etapa 1: O que você precisa..

O que você precisa..!!
O que você precisa..!!

1. Partícula de fóton

2. MPL3115A2

3. Cabo I²C

4. Escudo I²C para Fóton de Partículas

Etapa 2: Conexões:

Conexões
Conexões
Conexões
Conexões
Conexões
Conexões
Conexões
Conexões

Pegue um escudo I2C para o fóton da partícula e empurre-o suavemente sobre os pinos do fóton da partícula.

Em seguida, conecte uma extremidade do cabo I2C ao sensor MPL3115A2 e a outra extremidade à blindagem I2C.

As conexões são mostradas na imagem acima.

Etapa 3: Código:

Código
Código

O código de partícula para MPL3115A2 pode ser baixado de nosso repositório Github-DCUBE Store.

Aqui está o link.

Usamos duas bibliotecas para código de partículas, que são application.h e spark_wiring_i2c.h. A biblioteca Spark_wiring_i2c é necessária para facilitar a comunicação I2C com o sensor.

Você também pode copiar o código daqui, ele é fornecido da seguinte forma:

// Distribuído com uma licença de livre arbítrio.

// Use-o como quiser, com ou sem lucro, desde que se enquadre nas licenças das suas obras associadas.

// MPL3115A2

// Este código é projetado para funcionar com o Minimódulo MPL3115A2_I2CS I2C

#incluir

#incluir

// O endereço MPL3115A2 I2C é 0x60 (96)

#define Addr 0x60

float cTemp = 0,0, fTemp = 0,0, pressão = 0,0, altitude = 0,0;

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

void setup ()

{

// Definir variável

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

Particle.variable ("cTemp", cTemp);

Variável de partícula ("pressão", pressão);

Partícula.variable ("altitude", altitude);

// Inicializar a comunicação I2C

Wire.begin ();

// Inicialize a comunicação serial, defina a taxa de transmissão = 9600

Serial.begin (9600);

// Iniciar a transmissão I2C

Wire.beginTransmission (Addr);

// Selecione o registro de controle

Wire.write (0x26);

// Modo ativo, OSR = 128, modo altímetro

Wire.write (0xB9);

// Pare a transmissão I2C

Wire.endTransmission ();

// Iniciar a transmissão I2C

Wire.beginTransmission (Addr);

// Selecione o registro de configuração de dados

Wire.write (0x13);

// Evento Data Ready habilitado para altitude, pressão, temperatura

Wire.write (0x07);

// Pare a transmissão I2C

Wire.endTransmission ();

atraso (300);

}

void loop ()

{

dados internos não assinados [6];

// Iniciar a transmissão I2C

Wire.beginTransmission (Addr);

// Selecione o registro de controle

Wire.write (0x26);

// Modo ativo, OSR = 128, modo altímetro

Wire.write (0xB9);

// Pare a transmissão I2C

Wire.endTransmission ();

atraso (1000);

// Iniciar a transmissão I2C

Wire.beginTransmission (Addr);

// Selecione o registro de dados

Wire.write (0x00);

// Pare a transmissão I2C

Wire.endTransmission ();

// Solicita 6 bytes de dados

Wire.requestFrom (Addr, 6);

// Lê 6 bytes de dados do endereço 0x00 (00)

// status, tHeight msb1, tHeight msb, tHeight lsb, temp msb, temp lsb

if (Wire.available () == 6)

{

dados [0] = Wire.read ();

dados [1] = Wire.read ();

dados [2] = Wire.read ();

dados [3] = Wire.read ();

dados [4] = Wire.read ();

dados [5] = Wire.read ();

}

// Converta os dados para 20 bits

tHeight = ((((longo) dados [1] * (longo) 65536) + (dados [2] * 256) + (dados [3] & 0xF0)) / 16);

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

altitude = tHeight / 16,0;

cTemp = (temp / 16,0);

fTemp = cTemp * 1,8 + 32;

// Iniciar a transmissão I2C

Wire.beginTransmission (Addr);

// Selecione o registro de controle

Wire.write (0x26);

// Modo ativo, OSR = 128, modo barômetro

Wire.write (0x39);

// Pare a transmissão I2C

Wire.endTransmission ();

// Iniciar a transmissão I2C

Wire.beginTransmission (Addr);

// Selecione o registro de dados

Wire.write (0x00);

// Pare a transmissão I2C

Wire.endTransmission ();

atraso (1000);

// Solicita 4 bytes de dados

Wire.requestFrom (Addr, 4);

// Lê 4 bytes de dados

// status, pres msb1, pres msb, pres lsb

if (Wire.available () == 4)

{

dados [0] = Wire.read ();

dados [1] = Wire.read ();

dados [2] = Wire.read ();

dados [3] = Wire.read ();

}

// Converta os dados para 20 bits

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

pressão = (pres / 4,0) / 1000,0;

// Saída de dados para o painel

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

Particle.publish ("Pressão:", Corda (pressão));

Particle.publish ("Temperatura em Celsius:", String (cTemp));

Particle.publish ("Temperatura em Fahrenheit:", String (fTemp));

atraso (1000);

}

Etapa 4: Aplicativos:

Várias aplicações de MPL3115A2 incluem Altimetria de Alta Precisão, Smartphones / Tablets, Altimetria Eletrônica Pessoal, etc. Ele também pode ser incorporado em GPS Dead Reckoning, Melhoria de GPS para Serviços de Emergência, Map Assist, Navegação, bem como Equipamentos de Estação Meteorológica.

Recomendado: