#include <SD.h>
File myFile; // abro un archivo para almacenar los datos
////////////<<<<< librerías SD
#include <DHT.h> // incluimos la librería para el sensor de temperatura y humedad DHT11
#define DHTPIN 2 // Definimos el pin digital 2, donde se conecta el sensor DT11
// Dependiendo del tipo de sensor
#define DHTTYPE DHT11 // definimos el modelo de sensor, com DHT11
// Inicializamos el sensor DHT11
DHT dht(DHTPIN, DHTTYPE);
//////////// <<<<< librerías Sensor DHT11
#include <LiquidCrystal.h> // incluimos la librería del display
LiquidCrystal lcd(8, 9, 4, 5, 6, 7); // definimos los pines en el Arduino Uno para el envío de datos al display
byte N[8] = { // Definimos un caracter para "º" , de grados centígrados
// el carácter se forma a partir de una matriz de 5 caracteres por línea del dígito
B00111,
B00101,
B00101,
B00111,
B00000,
B00000,
B00000,
B00000,
};
int salidarelay = 10; // defino este pin de salida del Arduino Uno para control de relé
void setup()///////////////////inicio setup
{
Serial.begin(9600); // fijo en 9600 la velocidad de comunicación para el monitor serie
Serial.print("Inicializando tarjeta SD ...");
if (!SD.begin(3)) { // uso la para 3 del Arduino Uno para comunicación con el Módulo Micro Sd
Serial.println("No se pudo inicializar"); // si no detecta SD, da éste error
return;
}
Serial.println("inicializacion exitosa");
if (SD.exists("archivo.txt")) {
Serial.println("Borrando archivo.txt anterior.");
SD.remove("archivo.txt"); // cada vez que pongo en funcionamiento el conjunto
// borro el archivo.txt anterior, e inicio uno nuevo para evitar
// confusiones
} else {
Serial.println("archivo.txt Nuevo.");
myFile = SD.open("archivo.txt", FILE_WRITE); // abro el archivo creado
myFile.close(); //cerramos el archivo
}
/////////////////////// <<<< tarjeta SD
delay (500); // retardo para que inicie el sistema por recomendación del fabricante
// Comenzamos el sensor DHT
dht.begin();
delay (1000); //espera antes de acceder al sensor
///////////////////////////// <<<<<<<<< Sensor DHT11
lcd.createChar (0,N); // creo el carácter de "º" para el display
// Inicializar el LCD 20x4 con el número de columnas y filas del LCD
lcd.begin(20,4);
// Escribimos el Mensaje en el LCD
lcd.print("Temperatura-humedad"); // este mensaje, normalmente no se actualiza, por lo que
// lo coloco antes del void loop
pinMode (salidarelay, OUTPUT); // designo como salida la pata 10 del relé
}///////////////////// fin setup
void loop()////////////////////////// lazo loop, o lazo infinito
{
// Inicio del programa
// Esperamos 5 segundos entre medidas
delay(5000);
// Leemos la humedad relativa
float h = dht.readHumidity();
// Leemos la temperatura en grados centígrados (por defecto)
float t = dht.readTemperature();
// Leemos la temperatura en grados Fahrenheit
float f = dht.readTemperature(true);
// Comprobamos si ha habido algún error en la lectura
if (isnan(h) || isnan(t) || isnan(f)) {
Serial.println("Error obteniendo los datos del sensor DHT11");
return;
}
// Calcular el índice de calor o sensación térmica en grados centígrados
float hic = dht.computeHeatIndex(t, h, false);
/////////////////////////////////////////
// Ubicamos el cursor en la primera posición (columna:0) de la segunda línea(fila:1)
lcd.setCursor(0, 1);
lcd.print("Hum.rel.= ");
lcd.print(h); // este valor corresponde a la humedad relativa
lcd.print(" %");
lcd.setCursor(0, 2);
lcd.print("Temp.=");
lcd.print(t); // este valor corresponde a la temperatura
lcd.write (byte (0)); //símbolo de "º", grado centígrado
lcd.print("C");
lcd.setCursor(0, 3);
lcd.print("Sens.Term.=");
lcd.print(hic); // este valor corresponde a la sensación térmica
lcd.write (byte (0)); //símbolo de "º", grado centígrado
lcd.print("C");
///////////////////////////// <<<<<<<<<< display
int llama = analogRead(0); // lectura de sensor infrarrojo
if (llama< 100){ // fijo un valor de infrarrojo detectado
// que si es muy bajo indica posibilidad de llama
// hay que tener cuidado, porque también detecta
// la luz solar, y en un recinto cerrado
// podría dar lecturas erróneas al
// abrir una ventana
digitalWrite (salidarelay, LOW); // conmuto el relé
lcd.setCursor(0, 0); // doy mensaje al inicio del display
lcd.print("ALARMA! INCENDIO! ");
}else{
digitalWrite (salidarelay, HIGH); // vuelvo a situación de normalidad
lcd.setCursor(0, 0);
lcd.print("Temperatura-humedad");
};
myFile = SD.open("archivo.txt", FILE_WRITE);//abrimos el archivo
// para grabación de datos en la tarjeta SD
if (myFile) {
Serial.println("Escribiendo SD: ");
myFile.print("Tiempo(segundos)=");
myFile.print(millis()/1000);
myFile.print(", Humedad =");
myFile.print(h);
myFile.print(", Temperatura =");
myFile.print(t);
myFile.print(", Sensación Térmica =");
myFile.println(hic);
myFile.print(", Valor de infrarrojo =");
myFile.println(llama);
Serial.println("_______________"); // Abro el Monitor Serie, para ver los valores
Serial.print("Tiempo de muestreo(Segundos)=");
Serial.println(millis()/1000);
Serial.print("Humedad =");
Serial.print(h);
Serial.println("%");
Serial.print("Temperatura =");
Serial.print(t);
Serial.println("ºC");
Serial.print("Sensación térmica =");
Serial.print(hic);
Serial.println("ºC");
Serial.print("Valor de infrarrojo(si < 100 ALARMA !!) =");
Serial.println(llama);
myFile.close(); //cerramos el archivo cada vez que se grabó
} else {
Serial.println("Error al abrir el archivo");
}
delay(100);
} // fin de lazo cerrado |