jueves, 12 de septiembre de 2013

Cómo usar el Barometro Digital MPL115A2 con Arduino

El MPL115A2 es un sensor de presión barométrica absoluta de Freescale. Pero lo increíble es que no se limita a medir la presión barométrica sino que también nos da la temperatura en unidades Celsius, además con él y con la librería que hemos creado en Microelectrónicos se puede determinar la altitud en metros.
El MPL115A2 es un sensor de presión absoluta con salida I2C y especialmente diseñado, por su tamaño y características de ahorro de energía para aplicaciones portátiles. Su bajo consumo en modo activo (aprox. 5uA) y en modo inactivo (Sleep) (aprox. 1uA) logran un ahorro y durabilidad en la batería del sistema. Su rango de medida abarca desde 50KPa hasta 115KPa (Kilo Pascales). Un módulo ADC integrado que posee este sensor le permite entregar la información sobre medidas de temperatura y presión a través de una interfaz I2C.
El dato de calibración de fábrica viene almacenado en una memoria tipo ROM y puede ser utilizado por el sistema controlador para ejecutar algoritmos de compensación para lograr una presión absoluta compensada con ±1 KPa de aproximación.
A continuación sus características técnicas más relevantes
Especificaciones técnicas:
- ROM interna donde se almacenan las características de calibración deseadas para la presión y temperatura. La presión viene con calibración de fábrica.
- Rango de presión desde 50KPa hasta 115KPa.
- Precisión de 1KPa.
- Alimentación DC: desde 2.4 V a 5.5 V.
- Módulo ADC embebido.
- Interfaz I2C (hasta 400KHz).
- Información de salida (una a la vez): Presión y temperatura.
- Encapsulado LGA-8. Microelectronicos lo entrega montado en su placa adaptadora a DIP para facilitar la manipulación e inserción en Protobards.
- Rango de temperatura de operación del sensor: -40°C to +105°C
- Cumple directiva RoHS.
Aplicaciones:
- Barometría.
- Altímetros.
- Estaciones meteorológicas.
- Monitoreo médico.
- Sistemas de control de aire.
El driver para arduino : Con este documento, adjuntamos un magnífico driver para Arduino que facilita el uso del MPL115A2.
El driver es una clase de C++ que principalmente hace lo siguiente:
• Abstraer la comunicación de I2C con el sensor
• Obtener coeficientes de calibración
• Calcular presiones calibradas
Este driver consiste en una carpeta denominada “MPL115A2” que contiene dos archivos:
• MPL115A2.h
• MPL115A”.cpp
estos son los archivos driver y una carpeta “examples” que contiene un sketch de un ejemplo como usar el driver.
Instalación: Para instalar este driver, abre tu carpeta de instalación de arduino y copia toda la carpeta “MPL115A2” en la carpeta “libraries”. Después debes reiniciar Arduino para tener acceso al driver.

Funciones públicas

Las funciones públicas de este driver son:
int begin(int sdpin,int samples)
Esta función configura la comunicación con el sensor y es necesario llamarla una sola vez entre setup(). Tiene dos parámetros:
  1. sdpin                El pin del Arduino que esta conectado al pin SHDN del MSP115A2
  2. samples    Para estabilizar las valores de presión y temperatura el driver puede tomar este número de muestras(samples) y calcular un promedio antes de enviar el resultado. Este valor puede ser cualquier número entero positivo. Obviamente entre más grande sea este número,  más grande será el tiempo para la medición y más tiempo demorará arduino en reflejar el valor.
La respuesta podría ser un código de error, mira mas abajo para la lista de códigos.
int ReadSensor()
Para iniciar una medición se debe llamar esta función.  La respuesta es un código de error, mira mas abajo para la lista de códigos.
float GetPressure(int pformat)
Si una medición fue ejecutada a través de ReadSensor() se puede obtener el valor de presión.
El parámetro pformat es un número entero entre 0 y 2 que indica la unidad de presión en la que deseamos obtener la medida:
0-    La presión está calculada en hPa (hectoPascal igual a mbar)
1-    La presión de da en atm Atmósferas
2-    La unidad será mmHg (milímetros de mercurio igual a torr)
La respuesta es un número real del tipo float que contiene el valor de presión de la unidad elegida.
float GetTemperature()
Si una medición fue ejecutada a través de ReadSensor() se puede obtener también el valor de temperatura.
La respuesta es un número real del tipo float que contiene el valor de temperatura en °C.
void shutdown()
En el tiempo, sino se requiere medición, el sensor se puede poner en un estado “standby” para ahorrar energía a través de esta función.
Errores
0 . success (medición o comunicación existosa)
1 . length to long for buffer (Longitud del dato excedió capacidad del buffer)
2 . address send, NACK received (No se recibió el dato de dirección)
3 . data send, NACK received (Un dato enviado no fue recibido)
4 . other twi error (lost bus arbitration, bus error, ..)

Uso del driver

El uso del driver es muy sencillo. Para usarlo en tu sketch solo tienes que incluir dos archivos header:
#include <Wire.h>
#include <MPL115A2.h>
Wire.h es usado por el driver MPL115A2.h y por limitaciones en el IDE de Arduino es necesario incluir Wire.h desde el sketch principal.
Ahora puedes configurar e inicializar el sensor con este comando:
ers=MPL115A2.begin(5,1);
En este caso el pin SHDN del sensor debe ser conectado al pin D5 del Arduino y el driver no va a tomar más de un valor para promediar la medida.
Ahora es posible  obtener valores de presión o temperatura en cualquier momento.
Este es un esquema simple de como obtener la presión en hPa (Hecto Pascales) y la temperatura cada segundo.

Ejemplo

Esquema

Para usar el sketch del ejemplo se debe conectar el sensor MPL115A2 como se ve en el esquema siguiente:
(Una versión mas grande de este esquema se encuentra como PDF en la carpeta “examples” del driver.)
Nota que no es necesario conectar el display LCD, porque el funcionamiento también se puede ver a través del puerto USB y con el IDE Arduino.

Sketch

Para abrir el sketch de ejemplo abre: Ejemplos/MPL115A2/MPL115A2_example
Conecta tu Arduino a través de USB y carga el sketch al Arduino.
Si abres el Monitor serial, vas a ver lo siguiente:
Si oprimes el botón puedes cambiar la unidad de presión o ver la altitud calculada (Bogotá en este caso)
Esto es! Simple, o no?
Referencias / links

No hay comentarios:

Publicar un comentario