Hola a todos el mundo, he empezado recientemente en esto de arduino y tengo que decier que no tengo ni pajolera idea, me he visto muchos videos y tal pero me cuesta bastante
Bien, lo que pretendo hacer es que el Nano controle 3 sensores de humedad y 5 reles los cuales uno sera para una bomba de riego, otro para la iluminacion led para las plantas y los otros 3 son para electrovalvulas.
Tengo que decir que estube viendo muchos videos relacionado con estas cosas y al final me decidi ha hacer un popurri de todo y parece ser que al verificar no da fallos incluso a la hora de cargar el sketch tampo me dio problemas, lo unico es que se me quedan encendido todos los leds de los reles y en monitor series no me da los datos ni de la hora y fecha ni de los sensores.
Me estube peleando y no conseguia nada y al cabo de unos minutos milagrosamente ya me daba los datos por el monitor seies. No se si es que le cuesta cargar o que le pasa pero volvi a cargar cambiando un dato y ahora esta igual sin darme datos. Os paso el codigo haber que desastre lie y haber si me lo pueden revisar y decirme en que fallo.
#include <Wire.h> // incluye libreria para interfaz I2C
#include <RTClib.h> // incluye libreria para el manejo del modulo RTC
RTC_DS3231 rtc; // crea objeto del tipo RTC_DS3231
bool led_inicio = true; // variable de control para inicio de evento con valor true
bool led_fin = true; // variable de control para finalizacion de evento con valor true
const int HUMEDADBAJA = 550; //you need to replace this value with Value_1
const int HUMEDADALTA = 208; //you need to replace this value with Value_2
int humedad1 = 0;
int humedad2 = 0;
int humedad3 = 0;
int porcentagehumedad1=0;
int porcentagehumedad2=0;
int porcentagehumedad3=0;
// establece los reles
int rele = 3;
int rele1 = 4;
int rele2 = 5;
int rele3 = 6;
// establece rele bomba
int bomba = 7;
//estado bomba 1:open 0:close
int bomba_state = 0;
//estado rele 1:open 0:close
int rele_state = 0;
//estado rele1 1:open 0:close
int rele1_state = 0;
//estado rele2 1:open 0:close
int rele2_state = 0;
//estado rele3 1:open 0:close
int rele3_state = 0;
void setup() {
pinMode(rele, OUTPUT); // pin 3 como salida
pinMode(rele1, OUTPUT); // pin 4 como salida
pinMode(rele2, OUTPUT); // pin 5 como salida
pinMode(rele3, OUTPUT); // pin 6 como salida
pinMode(bomba, OUTPUT); // pin 7 como entrada (bomba)
Serial.begin(9600); // open serial port, set the baud rate to 9600 bps
if (! rtc.begin()) // si falla la inicializacion del modulo
Serial.println("Modulo RTC no encontrado !"); // muestra mensaje de error
while (1);
}
void loop() {
DateTime fecha = rtc.now(); // funcion que devuelve fecha y horario en formato
// DateTime y asigna a variable fecha
if ( fecha.hour() == 17 && fecha.minute() == 00 ){ // si hora = 14 y minutos = 30
if ( led_inicio == true ){ // si led_inicio es verdadero
digitalWrite(rele, HIGH); // activa modulo de rele con nivel alto
Serial.println( "LED encendido" ); // muestra texto en monitor serie
led_inicio = false; // carga valor falso en variable de control
} // para evitar ingresar mas de una vez
}
if ( fecha.hour() == 21 && fecha.minute() == 00){ // si hora = 15 y minutos = 30
if ( led_fin == true ){ // si led_fin es verdadero
digitalWrite(rele, LOW); // desactiva modulo de rele con nivel bajo
Serial.println( "LED apagado" ); // muestra texto en monitor serie
led_fin = false; // carga valor falso en variable de control
} // para evitar ingresar mas de una vez
}
Serial.print(fecha.day()); // funcion que obtiene el dia de la fecha completa
Serial.print("/"); // caracter barra como separador
Serial.print(fecha.month()); // funcion que obtiene el mes de la fecha completa
Serial.print("/"); // caracter barra como separador
Serial.print(fecha.year()); // funcion que obtiene el año de la fecha completa
Serial.print(" "); // caracter espacio en blanco como separador
Serial.print(fecha.hour()); // funcion que obtiene la hora de la fecha completa
Serial.print(":"); // caracter dos puntos como separador
Serial.print(fecha.minute()); // funcion que obtiene los minutos de la fecha completa
Serial.print(":"); // caracter dos puntos como separador
Serial.println(fecha.second()); // funcion que obtiene los segundos de la fecha completa
delay(1000); // demora de 1 segundo
if ( fecha.hour() == 2 && fecha.minute() == 0 ){ // si hora = 2 y minutos = 0 restablece valores de
led_inicio = true; // variables de control en verdadero
led_fin = true;
}
humedad1 = analogRead(A0); //put Sensor insert into soil
Serial.println(humedad1);
porcentagehumedad1 = map(humedad1, HUMEDADBAJA, HUMEDADALTA, 0, 100);
if (porcentagehumedad1 < 40) // change this at what level the pump turns on
{
Serial.println("BANCAL BAJO SECO, Bomba on");
digitalWrite(bomba, HIGH); // Low percent high signal to relay to turn on pump
digitalWrite(rele1, HIGH); // Low percent high signal to relay to turn on pump
}
else if (porcentagehumedad1 > 50) // max water level should be
{
Serial.println("BANCAL BAJO MOJADO, Bomba off");
digitalWrite(bomba, LOW); // high percent water high signal to relay to turn on pump
digitalWrite(rele1, LOW);
}
if(porcentagehumedad1 >= 100)
{
Serial.println("100 %");
}
else if(porcentagehumedad1 <=0)
{
Serial.println("0 %");
}
else if(porcentagehumedad1 >0 && porcentagehumedad1 < 100)
{
Serial.print(porcentagehumedad1);
Serial.println("%");
}
humedad2 = analogRead(A1); //put Sensor insert into soil
Serial.println(humedad2);
porcentagehumedad2 = map(humedad2, HUMEDADBAJA, HUMEDADALTA, 0, 100);
if (porcentagehumedad2 < 40) // change this at what level the pump turns on
{
Serial.println("BANCAL CENTRO SECO, Bomba on");
digitalWrite(bomba, HIGH); // Low percent high signal to relay to turn on pump
digitalWrite(rele2, HIGH); // Low percent high signal to relay to turn on pump
}
else if (porcentagehumedad2 > 50) // max water level should be
{
Serial.println("BANCAL CENTRO MOJADO, Bomba off");
digitalWrite(bomba, LOW); // high percent water high signal to relay to turn on pump
digitalWrite(rele2, LOW); // Low percent high signal to relay to turn on pump
}
if(porcentagehumedad2 >= 100)
{
Serial.println("100 %");
}
else if(porcentagehumedad2 <=0)
{
Serial.println("0 %");
}
else if(porcentagehumedad2 >0 && porcentagehumedad2 < 100)
{
Serial.print(porcentagehumedad2);
Serial.println("%");
}
humedad3 = analogRead(A2); //put Sensor insert into soil
Serial.println(humedad3);
porcentagehumedad3 = map(humedad3, HUMEDADBAJA, HUMEDADALTA, 0, 100);
if (porcentagehumedad3 < 40) // change this at what level the pump turns on
{
Serial.println("BANCAL ALTO SECO, Bomba on");
digitalWrite(bomba, HIGH); // Low percent high signal to relay to turn on pump
digitalWrite(rele3, HIGH);
}
else if (porcentagehumedad3 > 50) // max water level should be
{
Serial.println("BANCAL ALTO MOJADO, Bomba off");
digitalWrite(bomba, LOW); // high percent water high signal to relay to turn on pump
digitalWrite(rele3, LOW);
}
if(porcentagehumedad3 >= 100)
{
Serial.println("100 %");
}
else if(porcentagehumedad3 <=0)
{
Serial.println("0 %");
}
else if(porcentagehumedad3 >0 && porcentagehumedad3 < 100)
{
Serial.print(porcentagehumedad3);
Serial.println("%");
}
delay(1000);
}

