Acerca del proyecto
En este proyecto aprenderás a obtener la presión atmosférica sensor bmp180 con la placa arduino, este sensor cuenta con la funcionalidad de medir esta condición física ademas de la temperatura.
Vamos a explicar el paso a paso, desde lo que necesitamos saber del sensor bmp180 ademas de como conectarlo al arduino y crear el código que obtendrá los datos.
Conocimiento previo
Para realizar este proyecto se requiere conocimiento previo de los siguientes temas, si aun no has trabajado con lo que se menciona en la siguiente tabla, allí están los links a los post para que puedas dar un repaso adicional o puedas recordar el conocimiento necesario para poder realizar este proyecto.
Proyecto | Descripción |
---|---|
Presión atmosférica | En este post definimos y explicamos a detalle la presión atmosférica, es muy importante saber que es lo que vamos a medir y cuales son sus aplicaciones. |
i2c | En este post explicamos el concepto de i2c, ya que la librería para el bmp180 y el mismo sensor usa este tipo de comunicación y es esencial saber como funciona este tipo de comunicación. |
BMP180 | En este post explicamos los conceptos básicos sobre el sensor bmp180 |
Librería BMP180 para arduino | Esta es la librería con la que vamos a trabajar, en este post explico a detalle cada una de sus funciones. |
BMP180 sensor de temperatura con arduino | En este post explicamos como usar el mismo sensor para obtener la temperatura. |
Sensor BMP180
El BMP180 es el sucesor compatible con funciones del BMP085, una nueva generación de sensores de presión digitales de alta precisión para aplicaciones de consumo.
La electrónica de bajo voltaje y potencia ultrabaja del BMP180 está optimizada para su uso en teléfonos móviles, PDA, dispositivos de navegación GPS y equipos para exteriores. Con un ruido de baja altitud de solo 0,25 m en un tiempo de conversión rápido, el BMP180 ofrece un rendimiento superior. La interfaz I2C permite una fácil integración del sistema con un microcontrolador.
Sus características principales son:
- Sensor: BMP180
- Voltaje de alimentación : 1,8 V a 3,6 V
- Corriente: 0.5uA
- Interfaz I2C
- Resolución: hasta 0.02hPa ( 17cm )
- Amplia gama de presión barométrica
- Incluye sensor de temperatura
- Peso: 1,18 g
- Tamaño : 21mm x 18mm
Materiales
Estas son los principales materiales que vamos a utilizar para este proyecto
Material | Cantidad | Descripción |
---|---|---|
Arduino | 1 | Usamos la placa uno, pero puede ser cualquiera |
BMP180 | 1 | Aunque es un sensor de presión barométrica, también la temperatura |
Cables de conexión | 4 | Cables macho a macho |
Circuito
El sensor bmp180 tiene la facilidad de conectarse a cualquier microcontrolador ya que cuenta con un puerto de comunicación i2c, esto permite solamente utilizar dos cables de conexión desde el módulo. Para la alimentación de este circuito lo recomendable es utilizar 3.3 aunque en la hoja de datos nos indica que también soporta 5 voltios. A continuación tenemos el plano de la conexión para que se puedan guiar cómo se realiza:
Recomendaciones del fabricante
- Como la mayoría de los sensores de presión, el BMP180 mide la presión absoluta, esta es la presión ambiental real que ve el dispositivo, que variará con la altitud y el clima.
- Antes de tomar una lectura de presión, debe tomar una lectura de temperatura, esto se hace con startTemperature() y getTemperature(), el resultado está en grados C.
- Una vez que tenga una lectura de temperatura, puede tomar una lectura de presión. Esto se hace con startPressure () y getPressure (). El resultado está en milibares (mb) también conocido como hectopascales (hPa).
- Si va a monitorear los patrones climáticos, probablemente querrá eliminar los efectos de la altitud. Esto producirá lecturas que se pueden comparar con las lecturas de presión publicadas en otros lugares. Para hacer esto, use la función sealevel (). Deberá proporcionar la altitud conocida a la que se midió la presión.
- Si desea medir la altitud, deberá conocer la presión a una altitud de referencia. Esta puede ser la presión promedio del nivel del mar o una lectura de presión previa a su altitud, en cuyo caso las lecturas de altitud posteriores serán + o - la línea de base inicial. Esto se hace con la función de altitud().
Código
El código es el ejemplo que se toma de la misma librería, lo he modificado un poco para que solo muestre los valores de presión atmosférica. Ademas lo explico paso a paso para que lo podamos entender:
// Paso 1
#include <SFE_BMP180.h>
#include <Wire.h>
// Paso 2
SFE_BMP180 pressure;
// Paso 3
void setup() {
Serial.begin(9600);
// Paso 4
Serial.println("Sensor de presión y temperatura");
if (pressure.begin()) {
Serial.println("BMP180 inicio correctamente");
} else {
Serial.println("BMP180 presento un error al iniciar\n\n");
while(1);
}
}
void loop() {
// Paso 5
char status;
double temperatura,presion;
// Paso 6
status = pressure.startTemperature();
if (status != 0) {
delay(status);
// Paso 7
status = pressure.getTemperature(temperatura);
if (status != 0) {
// Paso 8
Serial.print("temperatura: ");
Serial.print(temperatura,2);
Serial.print(" *C, ");
Serial.print((9.0/5.0)*temperatura+32.0,2);
Serial.println(" *F");
// Paso 9
status = pressure.startPressure(3);
if (status != 0) {
delay(status);
// Paso 10
status = pressure.getPressure(presion,temperatura);
if (status != 0) {
// Paso 11
Serial.print("presión absoluta: ");
Serial.print(presion,2);
Serial.print(" mb, ");
Serial.print(presion*0.0295333727,2);
Serial.println(" inHg");
} else {
Serial.println("error al recuperar la medición de presión\n");
}
} else {
Serial.println("error al iniciar la medición de la presión\n");
}
} else {
Serial.println("error al recuperar la medición de temperatura\n");
}
}
else Serial.println("error al iniciar la medición de temperatura\n");
delay(5000);
}
- Cargamos la librería del bmp180, ademas de la librería i2c wire para que la comunicación de dos hilos pueda funcionar.
- Cargamos la librería como objeto en el entorno para poder acceder a su configuración y funciones.
- Creamos el setup donde inicializamos el puerto serial con el fin de poder crear los logs para ver el valor de la temperatura.
- Inicializamos la librería y verificamos si esta se cargo correctamente, de haberse presentado un error mostramos un mensaje en la consola.
- Creamos las variables que nos servirán para guardar los datos que vamos a obtener.
- Con
startTemperature
iniciamos el proceso de obtener la temperatura, este valor lo guardamos en la variable de estado. - La variable estado permite saber si ya se ha logrado obtener los datos, ya que el sensor demora entre 2 segundos en devolver este valor.
- Ahora con la función
getTemperature
podemos asignarle la temperatura a la variable correspondiente y obtenemos de nuevo el estado para saber si el sensor ha dado un respuesta. - Una vez que tengamos los datos los mostramos por la terminal serial.
- Ahora vamos a obtener la presion atmosférica de la misma forma que obtuvimos la temperatura, usaremos la función startPressure para iniciar el proceso de calculo de la presión.
- Con getPressure guardamos la temperatura en la variable presión.
- Volvemos a pintar los logs con la presion en milibares y calculamos la conversion a pulgadas mercurio.
Prueba funcionamiento
Por ultimo realizamos la compilación de código y lo cargamos al arduino, abrimos la terminal serial y podremos observar que se muestra el log con la temperatura que esta obteniendo el sensor.