Hemos ya descrito en un anterior post (http://blog.e-ao.org/#post2) como construir un Data Logger de los valores de la presión atmosférica medidos mediante un Arduino y el sensor BMP180.

En este post vamos a ver como como podemos conocer el valor de la presión atmosférica en tiempo real usando el mismo dispositivo. Para ello modificaremos nuestro instrumento de manera muy simple añadiendo un Bluetooth (BT) que en nuestro caso será el módulo BT Arduino HC-05 (figura 1). Este BT nos permitirá ver en nuestro teléfono móvil las últimas medidas de la presión hechas por el sensor BMP180.

Figura 1. Imagen del módulo Arduino BT HC-05

Lo primero que tendremos que hacer es conectar nuestro módulo BT a la placa Arduino. El HC-05 tiene 6 puntos de conexión de los cuales nosotros sólo usaremos los pines de alimentación (5V y GND) y los de transmisión y recepción (RX y TX). Los dos primeros irán conectados a las salidas de 5V y GND del Shield Data Logger de nuestro barómetro y los dos segundos a las tomas numeradas como 5 y 6 de este mismo shield (la toma 5 irá conectada al pin RX del BT y la toma 6 al pin TX) . El aspecto final de este añadido ha quedado en nuestro caso como se muestra en la figura 2.

Figura 2. Módulo BT instalado en el Shield Data Logger de nuestro Barómetro Aduino

El siguiente paso que haremos es instalar en la placa Arduino un nuevo código con el que manejaremos nuestro módulo BT. El nuevo código completo lo tienes al final de este post. Este nuevo código presenta unas variaciones mínimas respecto al anterior. Básicamente lo que tendremos que hacer es:

1. – Incluir la librería SoftwareSerial.h en nuestro código al principio del programa y activar y los pines 5 y 6 donde hemos conectado el BT

#include <Time.h>
#include <DS1307RTC.h> // a basic DS1307 library that returns time as a time_t
#include <SD.h>
#include <SFE_BMP180.h>
#include <Wire.h>

#include <SoftwareSerial.h>

SoftwareSerial bt( 5, 6);

2- Activar en el void setup() del código Arduino la velocidad de transmisión para el BT en 9600

void setup()
{
Serial.begin(9600);
bt.begin (9600);

3.- Finalmente y antes de escribir los datos en el fichero data_1.txt de la tarjeta de memoria enviaremos los datos por el bluetooth.

bt.println(data1);
Archivo=SD.open(“data_1.txt”,FILE_WRITE);
Archivo.println (data1);
Archivo.close();

Para poder leer los datos en tiempo real, deberemos primero instalar en nuestro teléfono móvil una aplicación que pueda manejar sus conexiones bluetooth. Yo utilizo BLUE TERM que funciona muy bien.

Después deberemos vincular el bluetooth de nuestro barómetro a nuestro teléfono lo cual exige que el BT esté activo y dar una contraseña que habitualmente es 1234 (el proceso es similar al que seguimos para vincular el BT de otro teléfono).Tras realizar esto ya tenemos todo lo necesario para ver en tiempo real los datos de la presión atmosférica. Abrimos nuestra aplicación Blue Term, nos conectamos al BT HC-05, e inmediatamente aparecerán en la pantalla los últimos datos medidos por el sensor BMP180 (figura 3).

Figura 3. Datos de las medidas del sensor BMP180 leídas en tiempo real con nuestro teléfono móvil

NUEVO CODIGO ARDUINO PARA MANEJAR EL BT HC-05
#include <Time.h>
#include <DS1307RTC.h> // a basic DS1307 library that returns time as a time_t
#include <SD.h>
#include <SFE_BMP180.h>
#include <Wire.h>

#include <SoftwareSerial.h>

SoftwareSerial bt( 5, 6);

// You will need to create an SFE_BMP180 object, here called “pressure”:
SFE_BMP180 pressure;
File Archivo;
void setup()
{
Serial.begin(9600);
bt.begin (9600);

setSyncProvider(RTC.get); // Vamos a usar el RT

// —————————————-
//parece que se puede hacer solo una vez
//setTime(17,52,0,11,11,2016);
//RTC.set(now());
// —————————————–
if (timeStatus() != timeSet)
Serial.println(“Unable to sync with the RTC”);
else
Serial.println(“RTC has set the system time”);
pinMode(10, OUTPUT);
if (!SD.begin(10))

{
//Serial.println(“Se ha producido un fallo al iniciar la comunicacion”);
return;
}

Serial.println(“Se ha iniciado la comunicacion correctamente”);

//Se borra inicialmente el documento sobre el que se va a leer y escribA
SD.remove(“data_1.txt”);
Serial.println(“REBOOT”);

// Initialize the sensor (it is important to get calibration values stored on the device).

if (pressure.begin())
Serial.println(“BMP180 init success”);
else
{
// Oops, something went wrong, this is usually a connection problem,
// see the comments at the top of this sketch for the proper connections.

Serial.println(“BMP180 init fail\n\n”);
while(1); // Pause forever.
}
}

void loop()
{
char status;
double T,P,p0,a;
String data1;

status = pressure.startTemperature();
if (status != 0)
{
// Wait for the measurement to complete:
delay(status);

status = pressure.getTemperature(T);
if (status != 0)
{

status = pressure.startPressure(3);
if (status != 0)
{
// Wait for the measurement to complete:
delay(status);

status = pressure.getPressure(P,T);
if (status != 0)
{
// Print out the measurement:

data1=String(hour())+” “+String(minute())+ ” “+String(second())+” “+String(day())+ ” “+String (month())+” “+String(year());
data1=data1+” “+String(int (T*10))+” “+String(int (P*10));
Serial.println(data1);
bt.println(data1);
Archivo=SD.open(“data_1.txt”,FILE_WRITE);
Archivo.println (data1);
Archivo.close();
}
else Serial.println(“error retrieving pressure measurement\n”);
}
else Serial.println(“error starting pressure measurement\n”);
}
else Serial.println(“error retrieving temperature measurement\n”);
}
else Serial.println(“error starting temperature measurement\n”);

delay(60000); // Pause
}