En este apartado se incluirán el último programa de Arduino que hemos utilizado en el proyecto, las librerías que hacen que funcione y el esquema electrónico.
#include <SFE_BMP180.h>
#include <Wire.h>
#include <SPI.h>
#include <SD.h>
SFE_BMP180 bmp180;
File myFile;
const int pinrele = 8;
const int pinboton = 2;
const int sensorPin1 = A0;
const int sensorPin2 = A1;
boolean estaon = HIGH;
boolean estaon2 = HIGH;
int sensorValue1;
int sensorValue2;
float voltaje1 = sensorValue1 * (5.0 / 1023.0);
float voltaje2 = sensorValue2 * (5.0 / 1023.0);
int intervalo=1050;
int ventana=10;
void setup()
{
Serial.begin(9600);
pinMode(pinrele, OUTPUT);
pinMode(pinboton, INPUT);
while (!Serial) {
; // wait for serial port to connect. Needed for native USB port only
}
Serial.print("Initializing SD card...");
if (!SD.begin(4)) {
Serial.println("initialization failed!");
while (1);
}
Serial.println("initialization done.");
// open the file. note that only one file can be open at a time,
// so you have to close this one before opening another.
myFile = SD.open("test1", FILE_WRITE);
// if the file opened okay, write to it:
if (myFile) {
Serial.print("Writing to test.txt...");
myFile.println("testing 1, 2, 3.");
// close the file:
myFile.close();
Serial.println("done.");
} else {
// if the file didn't open, print an error:
Serial.println("error opening test.txt");
}
if (bmp180.begin())
Serial.println("BMP180 iniciado");
else
{
Serial.println("Error al iniciar BMP180");
while(1); // bucle infinito
}
}
void loop()
{
int sensorValue1 = analogRead(sensorPin1);
int sensorValue2 = analogRead(sensorPin2);
int estaon = digitalRead(pinrele);
//int estaon2 = digitalRead(pinboton);
myFile = SD.open("test1.txt", FILE_WRITE);
char status;
double T,P;
for (int i=1; i<= intervalo ;i++) {
int estaon2 = digitalRead(pinboton);
int estaon = digitalRead(pinrele);
int sensorValue1 = analogRead(sensorPin1);
int sensorValue2 = analogRead(sensorPin2);
if(estaon2==0){
Serial.println("Pulsado");
digitalWrite(pinrele, HIGH);
Serial.println(estaon);
status = bmp180.startTemperature(); //Inicio de lectura de temperatura
if (status != 0)
{
delay(status); //Pausa para que finalice la lectura
status = bmp180.getTemperature(T); //Obtener la temperatura
if (status != 0)
{
status = bmp180.startPressure(3); //Inicio lectura de presión
if (status != 0)
{
delay(status); //Pausa para que finalice la lectura
status = bmp180.getPressure(P,T); //Obtenemos la presión
if (status != 0)
{
Serial.print("Temperatura: ");
Serial.print(T,2);
Serial.print(" *C , ");
Serial.print("Presion: ");
Serial.print(P,2);
Serial.println(" mb");
myFile.print("Temperatura: ");
myFile.print(T,2);
myFile.print(" *C , ");
myFile.print("Presion: ");
myFile.print(P,2);
myFile.println(" mb");
}
}
}
}
Serial.print("sensor1 = " );
Serial.print(sensorValue1 * (5.0 / 1023.0));
Serial.print("\t sensor2 = ");
Serial.println(sensorValue2 * (5.0 / 1023.0));
myFile.print("sensor1 = " );
myFile.print(sensorValue1 * (5.0 / 1023.0));
myFile.print("\t sensor2 = ");
myFile.println(sensorValue2 * (5.0 / 1023.0));
delay (1000);
}else{
Serial.println("No Pulsado");
digitalWrite(pinrele, LOW);
Serial.println(estaon);
}
Serial.println(i);
Serial.println(millis());
delay(100);
}
for (int i=1; i<= ventana ;i++) {
int estaon = digitalRead(pinrele);
int sensorValue1 = analogRead(sensorPin1);
int sensorValue2 = analogRead(sensorPin2);
Serial.println("tiempo de ventana");
Serial.println(i);
Serial.println(millis());
myFile.println(millis());
digitalWrite(pinrele, HIGH);
Serial.println(estaon);
myFile.println(estaon);
status = bmp180.startTemperature(); //Inicio de lectura de temperatura
if (status != 0)
{
delay(status); //Pausa para que finalice la lectura
status = bmp180.getTemperature(T); //Obtener la temperatura
if (status != 0)
{
status = bmp180.startPressure(3); //Inicio lectura de presión
if (status != 0)
{
delay(status); //Pausa para que finalice la lectura
status = bmp180.getPressure(P,T); //Obtenemos la presión
if (status != 0)
{
Serial.print("Temperatura: ");
Serial.print(T,2);
Serial.print(" *C , ");
Serial.print("Presion: ");
Serial.print(P,2);
Serial.println(" mb");
myFile.print("Temperatura: ");
myFile.print(T,2);
myFile.print(" *C , ");
myFile.print("Presion: ");
myFile.print(P,2);
myFile.println(" mb");
}
}
}
}
Serial.print("sensor1 = " );
Serial.print(sensorValue1 * (5.0 / 1023.0));
Serial.print("\t sensor2 = ");
Serial.println(sensorValue2 * (5.0 / 1023.0));
myFile.print("sensor1 = " );
myFile.print(sensorValue1 * (5.0 / 1023.0));
myFile.print("\t sensor2 = ");
myFile.println(sensorValue2 * (5.0 / 1023.0));
Serial.println(sensorValue1);
Serial.println(sensorValue2);
myFile.println(sensorValue1);
myFile.println(sensorValue2);
delay(1000);
}
digitalWrite(pinrele, LOW);
myFile.close();
}
Librerías:
Las librerías que utilizamos en el último programa son las siguientes: Wire.h, SFE_BMP180.h, SPI.h y SD.h. (Más abajo se encuentran sus descargas)
Esquema electrónico:
Las patas del BMP-280 (La LED en el dibujo) representan de izquierda a derecha las entradas SCL, SDA, 3.3 y GND