Tabla de contenido:

Arduino Nano - Tutorial del sensor de altímetro de precisión MPL3115A2: 4 pasos
Arduino Nano - Tutorial del sensor de altímetro de precisión MPL3115A2: 4 pasos

Video: Arduino Nano - Tutorial del sensor de altímetro de precisión MPL3115A2: 4 pasos

Video: Arduino Nano - Tutorial del sensor de altímetro de precisión MPL3115A2: 4 pasos
Video: Arduino Nano - MPL3115A2 Precision Altimeter Sensor Tutorial 2024, Mes de julio
Anonim
Image
Image

El MPL3115A2 emplea un sensor de presión MEMS con una interfaz I2C para proporcionar datos precisos de presión / altitud y temperatura. Las salidas del sensor están digitalizadas por un ADC de alta resolución de 24 bits. El procesamiento interno elimina las tareas de compensación del sistema MCU anfitrión. Es capaz de detectar un cambio de solo 0,05 kPa, lo que equivale a un cambio de altitud de 0,3 m. Aquí está su demostración con Arduino Nano.

Paso 1: ¡¡Lo que necesitas …

Que necesitas..!!
Que necesitas..!!

1. Arduino Nano

2. MPL3115A2

3. Cable I²C

4. Escudo I²C para Arduino Nano

Paso 2: Conexiones:

Conexiones
Conexiones
Conexiones
Conexiones
Conexiones
Conexiones
Conexiones
Conexiones

Tome un protector I2C para Arduino Nano y empújelo suavemente sobre los pines de Nano.

Luego, conecte un extremo del cable I2C al sensor MPL3115A2 y el otro extremo al blindaje I2C.

Las conexiones se muestran en la imagen de arriba.

Paso 3: Código:

Código
Código

El código arduino para MPL3115A2 se puede descargar desde nuestro repositorio github-DCUBE Store.

Aquí está el enlace para el mismo:

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

Incluimos biblioteca Wire.h para facilitar la comunicación I2c del sensor con la placa Arduino.

También puede copiar el código desde aquí, se proporciona de la siguiente manera:

// Distribuido con licencia de libre albedrío.

// Úselo de la forma que desee, lucrativa o gratuita, siempre que encaje en las licencias de sus obras asociadas.

// MPL3115A2

// Este código está diseñado para funcionar con el mini módulo MPL3115A2_I2CS I2C

#incluir

// La dirección MPL3115A2 I2C es 0x60 (96)

#define Addr 0x60

configuración vacía ()

{

// Inicializar la comunicación I2C

Wire.begin ();

// Inicializar la comunicación en serie, configurar la velocidad en baudios = 9600

Serial.begin (9600);

// Iniciar transmisión I2C

Wire.beginTransmission (Addr);

// Seleccionar registro de control

Wire.write (0x26);

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

Wire.write (0xB9);

// Detener la transmisión I2C

Wire.endTransmission ();

// Iniciar transmisión I2C

Wire.beginTransmission (Addr);

// Seleccionar registro de configuración de datos

Wire.write (0x13);

// Evento de datos listos habilitado para altitud, presión, temperatura

Wire.write (0x07);

// Detener la transmisión I2C

Wire.endTransmission ();

retraso (300);

}

bucle vacío ()

{

datos int sin firmar [6];

// Iniciar transmisión I2C

Wire.beginTransmission (Addr);

// Seleccionar registro de control

Wire.write (0x26);

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

Wire.write (0xB9);

// Detener la transmisión I2C

Wire.endTransmission ();

retraso (1000);

// Iniciar transmisión I2C

Wire.beginTransmission (Addr);

// Seleccionar registro de datos

Wire.write (0x00);

// Detener la transmisión I2C

Wire.endTransmission ();

// Solicita 6 bytes de datos

Wire.requestFrom (Dirección, 6);

// Leer 6 bytes de datos de la dirección 0x00 (00)

// estado, tHeight msb1, tHeight msb, tHeight lsb, temp msb, temp lsb

if (Cable disponible () == 6)

{

datos [0] = Wire.read ();

datos [1] = Wire.read ();

datos [2] = Wire.read ();

datos [3] = Wire.read ();

datos [4] = Wire.read ();

datos [5] = Wire.read ();

}

// Convierte los datos a 20 bits

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

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

altitud de flotación = tHeight / 16.0;

float cTemp = (temp / 16.0);

float fTemp = cTemp * 1.8 + 32;

// Iniciar transmisión I2C

Wire.beginTransmission (Addr);

// Seleccionar registro de control

Wire.write (0x26);

// Modo activo, OSR = 128, modo barómetro

Wire.write (0x39);

// Detener la transmisión I2C

Wire.endTransmission ();

retraso (1000);

// Iniciar transmisión I2C

Wire.beginTransmission (Addr);

// Seleccionar registro de datos

Wire.write (0x00);

// Detener la transmisión I2C

Wire.endTransmission ();

// Solicitar 4 bytes de datos

Wire.requestFrom (Addr, 4);

// Leer 4 bytes de datos

// estado, pres msb1, pres msb, pres lsb

si (Cable disponible () == 4)

{

datos [0] = Wire.read ();

datos [1] = Wire.read ();

datos [2] = Wire.read ();

datos [3] = Wire.read ();

}

// Convierte los datos a 20 bits

presión larga = (((largo) datos [1] * (largo) 65536) + (datos [2] * 256) + (datos [3] & 0xF0)) / 16;

presión de flotación = (pres / 4.0) / 1000.0;

// Salida de datos al monitor en serie

Serial.print ("Altitud:");

Serial.print (altitud);

Serial.println ("m");

Serial.print ("Presión:");

Serial.print (presión);

Serial.println ("kPa");

Serial.print ("Temperatura en grados Celsius:");

Serial.print (cTemp);

Serial.println ("C");

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

Serial.print (fTemp);

Serial.println ("F");

retraso (500);

}

Paso 4: Aplicaciones:

Varias aplicaciones de MPL3115A2 incluyen altímetro de alta precisión, teléfonos inteligentes / tabletas, altímetro de electrónica personal, etc. También se puede incorporar en GPS Dead Reckoning, mejora de GPS para servicios de emergencia, asistencia de mapas, navegación y equipo de estación meteorológica.

Recomendado: