Vestiaire Collective es el principal mercado global de moda de lujo y premium de segunda mano. Fomentando que los consumidores se unan a la economía circular como alternativa sostenible a la moda rápida, la plataforma es única debido a su catálogo cuidadosamente seleccionado de más de 1,5 millones de artículos deseables.



 

Oficios Técnicos

www.sapiensman.com/tecnoficio


 


 

21- Aplicaciones Electrónicas. Desarrollo con Arduino para medición de temperatura, humedad, sensación térmica. Detección de incendio. Con almacenamiento de datos en SD.

El siguiente desarrollo está destinado a realizar un seguimiento de la temperatura, humedad relativa y sensación térmica del salón donde se encuentra el sensor. Se pensó el proyecto para ser usado en depósitos cerrados de material inflamable, como por ejemplo fardos de algodón, o tanques de líquidos inflamables, donde se podrían producir incendios por elevación excesiva de temperatura o por reacciones químicas.  
Se busca tomar las muestras de los valores citados en forma continua y almacenarlos en un archivo de tarjeta SD, con fines estadísticos, y para sacar conclusiones sobre las variaciones climáticas del entorno.

Consta además de un sensor de llama, y un relé que se activa como alarma con el sensor de llama. Se desarrollaron dos programas para operar el dispositivo, uno para habilitar la lectura continua de datos desde el sensor, la visualización de los mismos en un display de 20 caracteres  por cuatro filas,  la grabación de los datos en una tarjeta SD, la medición permanente de rayos ultravioleta en el recinto, que puede detectar posibles fuentes de llama, y en ese caso, conmuta un relé que se puede usar para una alarma externa.

El dispositivo que se podría activar con el relé no está incluido en el proyecto, pero podría ser una bocina, lámpara, etc., que se active con otra tensión de trabajo, como por ejemplo 220 V CA, 12V CC, etc.

El otro programa, en caso de requerirse, está destinado a leer los datos almacenados en la tarjeta SD, en formato CSV, y mostrarlos en el monitor serie, y  que podrían usarse para fines estadísticos. Y también debería cargarse en la misma plaqueta usada para almacenar los datos. Este sketch, se usaría en caso de que no se quiera quitar la tarjeta SD del desarrollo Arduino, la  que podría leerse en una PC. Entonces a fin de evitar esto, se usará el mismo.

La plataforma de hardware elegida para el desarrollo es Arduino, con una placa Arduino Uno, display LED 20x4 (LCD2004) y un sensor de temperatura y humedad DHT11 (en placa HW-507). Desarrollando el software en el entorno de desarrollo integrado IDE Arduino.

 

 

 

 

Vídeo : https://youtu.be/Ue7g8XNH5CE

#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

A continuación, Sketch para el caso en que se quiera leer el contenido almacenado en la tarjeta SD, directamente desde el mismo Arduino Uno, a través del monitor serie. La otra alternativa es extraer la tarjeta y leerla en alguna lectora de tarjetas en la PC.
Al hacer correr el programa siguiente, habrá que abrir el monitor serie, y los datos aparecerán en forma inmediata en formato CSV (o sea archivo de texto, separado por comas):

// Desarrollo para Diplomatura en robótica, año 2022
#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
// Inicializar el LCD 20x4 con el número de columnas y filas del LCD
File myFile;
void setup()
{
lcd.begin(20,4);
// Escribimos el Mensaje en el LCD

lcd.print("Leyendo datos SD   ");
lcd.setCursor(0, 1);
lcd.print("Ver Monitor Serie   ");
  Serial.begin(9600);
  Serial.print("Iniciando SD ...");
  if (!SD.begin(3)) { // usamos el pin 3 para conectar el bus del CS del Micro Card Adapter
    Serial.println("No se pudo inicializar");
    return;
  }
  Serial.println("inicializacion exitosa");
 
  myFile = SD.open("archivo.txt");//abrimos  el archivo
  if (myFile) {
    Serial.println("archivo.txt:");
    while (myFile.available()) {
      Serial.write(myFile.read());
    }
    myFile.close(); //cerramos el archivo
  } else {
    Serial.println("Error al abrir el archivo");
  }
}
void loop()
{

}

 

 

 


 

 

 
Volver arriba