Índice:

Arduino Nano - Tutorial do sensor de altímetro de precisão MPL3115A2: 4 etapas
Arduino Nano - Tutorial do sensor de altímetro de precisão MPL3115A2: 4 etapas
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 Arduino Nano.

Etapa 1: O que você precisa..

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

1. Arduino Nano

2. MPL3115A2

3. Cabo I²C

4. Escudo I²C para Arduino Nano

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 Arduino Nano e empurre-o suavemente sobre os pinos do Nano.

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 do arduino para MPL3115A2 pode ser baixado de nosso repositório github-DCUBE Store.

Aqui está o link para o mesmo:

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

Incluímos a biblioteca Wire.h para facilitar a comunicação I2c do sensor com a placa Arduino.

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

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

#define Addr 0x60

void setup ()

{

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

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

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

altitude de flutuação = tHeight / 16,0;

float cTemp = (temp / 16,0);

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

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

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

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

// Dados de saída para monitor serial

Serial.print ("Altitude:");

Serial.print (altitude);

Serial.println ("m");

Serial.print ("Pressão:");

Serial.print (pressão);

Serial.println ("kPa");

Serial.print ("Temperatura em Celsius:");

Serial.print (cTemp);

Serial.println ("C");

Serial.print ("Temperatura em Fahrenheit:");

Serial.print (fTemp);

Serial.println ("F");

atraso (500);

}

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: