Buenos dias, hoy me pude sentar un rato tranquilo en la pc y comence a ensamblar los codigos que tenia como prueba para los distintos modulos y sensores.
Hasta ahora tengo funcionando el RTC mostrando fecha y hora, y el sensor DHT22.
Por ahora solo estoy tomando datos de temperatura y en funcion a esos valores, segun en que rango se encuentre la temperatura, se hace funcionar (idealmente) a un caloventor o ventilador, segun la necesidad de subir o bajar la temperatura. Estos aparatos los conectaria en un futuro al modulo de rele.
Bueno, de a poco voy probando, estoy esperando evacuar una duda respecto a la conexion del modulo rele y la fuente atx para alimentar los "perifericos".
Muchas gracias a Surbyte y juand91 que me estan ayudando mucho!
Saludos y seguimos en contacto, les dejo el codigo para recibir criticas.
//--------------- CARGAMOS LIBRERIAS -----------------------------------
#include <Adafruit_Sensor.h> //Cargamos la librería DHT "Adafruit_Sensor-master"
#include "DHT.h" //Cargamos la librería DHT
#include <Wire.h> //Libreria comunicacion I2C
#include "RTClib.h" //Libreria RTC "RTClib-master"
//--------------- ASIGNACION DE PINS -----------------------------------
#define DHTPIN 7 //Seleccionamos el pin en el que se conectará el sensor DHT22
#define DHTTYPE DHT22 //Se selecciona el DHT22(hay otros DHT)
#define RelayVentilador 8 //Se define el pin donde se conecta el Relay que acciona el Ventilador
#define RelayCaloventor 9 //Se define el pin donde se conecta el Relay que acciona el Caloventor
//int LedTempBaja = 3; //Se define el pin donde se conecta el led que indica temperatura baja
//int LedTempAlta = 2; //Se define el pin donde se conecta el led que indica temperatura alta
//int LedTempOK = 4; //Se define el pin donde se conecta el led que indica temperatura OK
DHT dht(DHTPIN, DHT22); //Se inicia una variable que será usada por Arduino para comunicarse con el sensor
RTC_DS3231 RTC; //Creamos objeto reloj RTC
int histeresis1 = 3; //Histeresis para control de Temperatura
//----------------------- FUNCION SETUP ----------------------------------------------------------------
void setup()
{
Serial.begin(9600); //Se inicia la comunicación serial
Wire.begin(); //Inicia el puerto I2C
RTC.begin(); //Inicia la comunicacionn con el RTC
//lcd.begin(16, 2); //Inicia LCD 16X2 (sacar comentario cuando quiera usar el LCD)
//lcd.clear(); //Limpiamos la pantalla (sacar comentario cuando quiera usar el LCD)
//Establece la fecha y hora (Comentar una vez establecida la hora)
//RTC.adjust(DateTime(2017,03,11,11,31,00));
//pinMode(RelayVentilador, OUTPUT); // Define el pin del Ventilador como Salida
//pinMode(RelayCaloventor, OUTPUT); // Define el pin del Caloventor como Salida
//pinMode(LedTempBaja, OUTPUT); //
//pinMode(LedTempAlta, OUTPUT); // Definen los Pines de Leds como Salida
//pinMode(LedTempOK, OUTPUT); //
//digitalWrite(RelayVentilador,HIGH); // Inicia el programa con el rele apagado
//digitalWrite(RelayCaloventor,HIGH); // Inicia el programa con el rele apagado
//digitalWrite(LedTempBaja,LOW); //
//digitalWrite(LedTempAlta,LOW); // Inicia el programa con los Leds apagado
//digitalWrite(LedTempOK,LOW); //
}
//----------------------- FUNCION LOOP --------------------------------------------------------------
void loop()
{
//----------- FECHA Y HORA ------------------------
DateTime now = RTC.now(); //Obtiene la fecha y hora del RTC
char myBuffer1[16]; //Creamos myBuffer1 para mostrar bien los dijitos de la Fecha
char myBuffer2[16]; //Creamos myBuffer2 para mostrar bien los dijitos de la Hora
//lcd.setCursor(0, 0); //Cursor en fila 1 sacar comentario cuando quiera usar el LCD
//lcd.print("Fecha: "); //Muestra palabra (hora: ) por LCD sacar comentario cuando quiera usar el LCD
Serial.print("Fecha: "); //Muestra palabra Fecha: por el puerto Serial
sprintf(myBuffer1, "%02d/%02d/%02d", now.day(), now.month(), now.year());
//lcd.print(myBuffer1); sacar comentario cuando quiera usar el LCD
Serial.print(myBuffer1);
//lcd.print("Hora: "); //Muestra palabra (hora: ) por LCD sacar comentario cuando quiera usar el LCD
Serial.print(" Hora: "); //Muestra palabra (hora: ) por el puerto Serial
sprintf(myBuffer2, "%02d:%02d:%02d", now.hour(), now.minute(), now.second());
//lcd.print(myBuffer2); sacar comentario cuando quiera usar el LCD
Serial.print(myBuffer2);
Serial.println();
delay(500); //Retardo un segundo entre lecturas para dar estabilidad
//--------- SENSOR DHT22 -------------------------
float h = dht.readHumidity(); //Se lee la humedad y se asigna ese valor a la variable h
float t = dht.readTemperature(); //Se lee la temperatura y se asigna ese valor a la variable t
Serial.print("Humedad: "); //Se imprimen las variables
Serial.print(h);
Serial.print(" % ");
Serial.print("Temperatura: ");
Serial.print(t);
Serial.print(" C ---> ");
delay(500);
if (t < 15 + histeresis1)
{
Serial.println("TEMPERATURA BAJA, encender calentador");
//digitalWrite(LedTempBaja,HIGH); //Cuando la temperatura es baja se enciende el Led de Temperatura Baja
//digitalWrite(LedTempAlta,LOW); //Cuando la temperatura es baja se apaga el Led de Temperatura Alta
//digitalWrite(LedTempOK,LOW); //Cuando la temperatura es baja se apaga el Led de Temperatura OK
digitalWrite(RelayCaloventor,LOW); //Cuando la temperatura es baja se enciende el Caloventor
delay(1000);
}
else if (t > 22 + histeresis1)
{
Serial.println("TEMPERATURA ALTA, encender ventilador");
//digitalWrite(LedTempAlta,HIGH); //Cuando la temperatura es alta se enciende el Led de temperatura Alta
//digitalWrite(LedTempOK,LOW);
//digitalWrite(LedTempBaja,LOW);
digitalWrite(RelayVentilador,LOW); //Cuando la temperatura es alta se enciende el Ventilador
delay(1000);
}
else
{
Serial.println("TEMPERATURA OK");
//digitalWrite(LedTempOK,HIGH); //Cuando la temperatura esta ok se enciende el Led de Temperatura OK
//digitalWrite(LedTempAlta,LOW); //Cuando la temperatura esta ok se apaga el Led de Temperatura Alta
//digitalWrite(LedTempBaja,LOW);
digitalWrite(RelayVentilador, HIGH); //Cuando la temperatura esta ok se apaga el Ventilador
delay(1000);
}
}
Las sentencias de apagar y prender los leds estan comentados porque no tengo los materiales para realizar la conexion fisica en la protoboard, pero ya estan puestos en el codigo, cuando tenga todo comprado solo tengo que sacar las barras de comentarios, al igual que con la pantalla tft.