#include <Adafruit_Sensor.h>
#include <DHT.h> // Libreria para sensor DHT11 o DHT22 Tempertura & Humedad
#include <DHT_U.h>
#include "RTClib.h" // Funciones de fecha y hora utilizando un RTC DS1307 conectado a través de I2C
// y Wire lib
#include <SPI.h> // incluye libreria interfaz SPI
#include <SD.h> // incluye libreria para tarjetas SD
/* | Arduino UNO | Arduino Mega
---------------------------------
CS | 10 | 53
SCK | 13 | 52
MISO (DI) | 12 | 50
MOSI (DO) | 11 | 51
*/
#define YL_PIN_DIGITAL 3 // Numero PIN conectado a YL-83 (sensor lluvia)
#define DHT_PIN 2 // Numero PIN conectado a la placa
#define SSpin 53 // Slave Select en pin digital 53 para ARDUINO MEGA
#define NOMBRE_ARCHIVO "wokwi.txt"
DHT dht(DHT_PIN, DHT22); // Crea el objeto dht para lectura del sensor, cambiar segundo parametro
// por DHT11 si se utiliza en lugar del DHT22
RTC_DS1307 rtc; // Crea rtc para el modulo Reloj RTC 1307
File archivo;
int SENSOR; // variable para almacenar valor leido de entrada A0
float TEMPERATURA;
float HUMEDAD;
void setup() {
Serial.begin(9600); // inicializacion de monitor serial
pinMode(YL_PIN_DIGITAL, INPUT);
dht.begin(); // inicializacion de sensor
if (! rtc.begin()) { // inicializacion de reloj
Serial.println("No se encuentra modulo RTC");
Serial.flush();
abort();
}else {
Serial.println("inicializacion correcta Reloj"); // texto de inicializacion correcta
}
if (! rtc.isrunning()) {
Serial.println("RTC no se esta ejecutando, procede a fijar tiempo!");
// Cuando es necesario configurar la hora en un nuevo dispositivo, o después de una
// perdida de energia, la siguiente linea establece el RTC en la fecha y hora en que
// se compilo este boceto
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
}
Serial.println("Inicializando tarjeta ..."); // texto en ventana de monitor
if (!SD.begin(SSpin)) { // inicializacion de tarjeta SD
Serial.println("fallo en inicializacion !");// si falla se muestra texto correspondiente y
return; // se sale del setup() para finalizar el programa
} else {
Serial.println("inicializacion correcta Micro SD"); // texto de inicializacion correcta
}
}
void sensorHumedadTemperatura(File archivo) {
TEMPERATURA = dht.readTemperature();
HUMEDAD = dht.readHumidity();
if(isnan(TEMPERATURA)) {
archivo.print(",");
Serial.println("NA");
} else {
archivo.print(","); // escribe en tarjeta una coma
archivo.print(TEMPERATURA); // escribe en tarjeta el valor de temperatura
Serial.println(" TEMPERATURA: ");
Serial.println(TEMPERATURA);
}
if(isnan(HUMEDAD)) {
archivo.print(",");
Serial.println("NA");
} else {
archivo.print(",");
archivo.print(HUMEDAD); // escribe en tarjeta el valor de humedad
Serial.println(" HUMEDAD: ");
Serial.println(HUMEDAD);
}
}
void leerMicroSD() {
archivo = SD.open(NOMBRE_ARCHIVO);
if (archivo) {
Serial.println("Contenido de prueba.txt:"); // texto en monitor serie
while (archivo.available()) { // mientras exista contenido en el archivo
Serial.write(archivo.read()); // lectura de a un caracter por vez
}
archivo.close(); // cierre de archivo
} else {
Serial.println("error en la apertura de climatica.txt");// texto de falla en apertura de archivo
}
}
void sensorLluvia() {
/* Ante la presencia de mas gotas de agua acumuladas en la placa
sera menor la Resistencia y el Voltaje de salida
Ante menor presencia de agua el Voltaje de Salida sera mayor
(por el Pin Analogico)
*/
int lecturaDigital;
int lecturaAnaloga;
lecturaDigital = digitalRead(YL_PIN_DIGITAL);
lecturaAnaloga = analogRead(A0);
if(lecturaAnaloga > 0) { // si hay presencia de agua
Serial.print("NO LLUVIA");
}else{
Serial.print("LLUVIA");
}
/*
if(lecturaDigital == HIGH) {
Serial.print("NO LLUVIA");
}else{
Serial.print("LLUVIA");
}
*/
}
void loop() {
delay(60000);
DateTime fecha = rtc.now();
//int minuto = fecha.minute();
//int segundo = fecha.second();
archivo = SD.open(NOMBRE_ARCHIVO, FILE_WRITE);
archivo.print("EST_1");
sensorHumedadTemperatura(archivo);
archivo.print(",");
archivo.print(fecha.day()); // escribe la fecha y hora del registro climatico
archivo.print(",");
archivo.print(fecha.month());
archivo.print(",");
archivo.print(fecha.year());
archivo.print(",");
archivo.print(fecha.hour());
archivo.print(",");
archivo.println(fecha.minute()); // escribe en tarjeta salto de linea para nuevo registro
archivo.close();
leerMicroSD();
//borrarArchivoDS();
}