Go Down

Topic: proyecto para acuario por favor ayudarme (Read 117 times) previous topic - next topic

breogan08

hola amigos estoy intentando hacer un controlador de acuario el problema es que me meti en camisas de once varas y ahora loqueo con esto.
he encontrado el controlador que mas se me adapta pero el problema es que intento cargarlo pero me da muchos eerroes como casi todos os rogaria que me echarais una mano
os digo lo que tengo y el codigo:

     lcd YwRobot Arduino LCM1602 IIC V1
     Relog de tiempo real ds1307 tini rtc
     arduino uno
     4 reles modulo
     y una sonda ds1820
 
el codigo esta copiado tal cual:

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 

//INCLUDES

//Librerias necesarias para la ejecucion de funciones propias (LCD, Sensor de Temperatura DS18B20, OneWire...)

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <DallasTemperature.h>
#include <OneWire.h>
#include <avr/wdt.h> //////watchdog////////  

//DEFINES

//Definiciones de las direcciones de datos para el uso de OneWire

#define DS1307_I2C_ADDRESS 0x68
#define ONE_WIRE_BUS 10

//DECLARATIONS

//Declaraciones de funciones (propias de las librerias anteriores)

LiquidCrystal_I2C lcd(0x27,20,4);
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature Sensors(&oneWire);

//CONSTANTS

//Constantes del programa

int PinCO2 = 7; //Pin del rele de CO2
int PinLight = 8; //Pin del rele de Luz
int PinThermo = 2; //Pin del rele del Calentador
int PinVent = 3; //Pin del rele de Ventilador
int VentState = 0; //Estado del Ventilador
int ThermoState = 0; //Estado del Calentador
int pDelay = 2500; //Retraso personalizado (Personal Delay)

byte second, minute, hour, dayOfWeek, dayOfMonth, month, year; //Constantes del RTC

//FUNCTIONS

//Funciones para uso del programa

byte decToBCD(byte val) //Convierte decimal a BCD
{
 return ( (val / 10 * 16) + (val % 10) );
}

byte BCDToDec(byte val) //Convierte BCD a decimal
{
 return ( (val / 16 * 10) + (val % 16) );
}


//Funcion para introducir la fecha al RTC por primera vez
void setDateDs1307(byte second,        // 0-59  
byte minute,        // 0-59
byte hour,          // 1-23
byte dayOfWeek,     // 1-7
byte dayOfMonth,    // 1-28/29/30/31
byte month,         // 1-12
byte year)          // 0-99
{
 Wire.beginTransmission(DS1307_I2C_ADDRESS);
 Wire.write(0);
 Wire.write(decToBCD(second));
 Wire.write(decToBCD(minute));
 Wire.write(decToBCD(hour));
 Wire.write(decToBCD(dayOfWeek));
 Wire.write(decToBCD(dayOfMonth));
 Wire.write(decToBCD(month));
 Wire.write(decToBCD(year));
 Wire.endTransmission();
}

//Funcion de llamada al RTC para conocer la fecha actual
void getDateDs1307(byte *second,
byte *minute,
byte *hour,
byte *dayOfWeek,
byte *dayOfMonth,
byte *month,
byte *year)
{
 Wire.beginTransmission(DS1307_I2C_ADDRESS);
 Wire.write(0);
 Wire.endTransmission();
 Wire.requestFrom(DS1307_I2C_ADDRESS, 7);  
 *second     = BCDToDec(Wire.read() & 0x7f);
 *minute     = BCDToDec(Wire.read());
 *hour       = BCDToDec(Wire.read() & 0x3f);
 *dayOfWeek  = BCDToDec(Wire.read());
 *dayOfMonth = BCDToDec(Wire.read());
 *month      = BCDToDec(Wire.read());
 *year       = BCDToDec(Wire.read());
}

//Funcion de tratamiento del CO2
void CO2(int minutes, int hours) {
 wdt_reset();///////watcdog///////////////
 int CO2;
 int InitCO2 = 780; //13h Inicio del CO2
 int EndCO2 = 1200; //20h Fin del CO2
 int time;  
 time = hours * 60 + minutes;
 
   
if (time < InitCO2 ) CO2 = 0;
if (time >= InitCO2 && time <= EndCO2) CO2 = (time, InitCO2, EndCO2);


  if (time >= InitCO2 && time <= EndCO2)
 {
   lcd.clear();
   digitalWrite(PinCO2, LOW);  
    lcd.setCursor(6,1);
   lcd.print("CO2 ON");
 }
 else
 {lcd.clear();
  digitalWrite(PinCO2, HIGH);  
   lcd.setCursor(6,1);
   lcd.print("CO2 OFF");
 }



 
 lcd.setCursor(3,0);
lcd.print("ATOMIZADOR C02");
 lcd.setCursor(15,3);
  if (hour < 10) lcd.print("0");
 lcd.print(hour, DEC);
 lcd.print(":");  
  if (minute < 10) lcd.print("0");
 lcd.print(minute, DEC);
 lcd.setCursor(0,3);
 if (dayOfMonth < 10) lcd.print("0");
 lcd.print(dayOfMonth, DEC);
 lcd.print("/");
 if (month < 10) lcd.print("0");
 lcd.print(month, DEC);  
 lcd.print("/");
 lcd.print("20");  
 if (year < 10) lcd.print("0");
 lcd.print(year, DEC);
 lcd.print("  ");
 
 delay(pDelay);
 wdt_reset();///////watcdog///////////////

}


 void Lights(int minutes, int hours) {
 int Lights;
 wdt_reset();///////watcdog///////////////
 int InitLight = 840; //14h
 int EndLight = 1320; //10h

 int time;  
 time = hours * 60 + minutes;
 
   
 if (time < InitLight ) Lights = 0;
 if (time >= InitLight && time <= EndLight) Lights = (time, InitLight, EndLight);
 
 lcd.clear();
 lcd.setCursor(4,0);
 lcd.print("ILUMINACION");
 lcd.print("  ");
 lcd.setCursor(15,3);
 if (hour < 10) lcd.print("0");
 lcd.print(hour, DEC);
 lcd.print(":");  
 if (minute < 10) lcd.print("0");
 lcd.print(minute, DEC);
 lcd.setCursor(0,3);
 if (dayOfMonth < 10) lcd.print("0");
 lcd.print(dayOfMonth, DEC);
 lcd.print("/");
 if (month < 10) lcd.print("0");
 lcd.print(month, DEC);  
 lcd.print("/");
 lcd.print("20");  
 if (year < 10) lcd.print("0");
 lcd.print(year, DEC);
 lcd.print("  ");

 if (time >= InitLight && time <= EndLight)
 {
   digitalWrite(PinLight, LOW);  
   lcd.setCursor(6,1);
   lcd.print("LUZ ON");
 }
 else
 {
   digitalWrite(PinLight, HIGH);  
   lcd.setCursor(6,1);
   lcd.print("LUZ OFF");
 }
 delay(pDelay);
 wdt_reset();///////watcdog///////////////
}


void Temperature(int minutes, int hours)
{
 float T1;
 
 Sensors.requestTemperatures();
 T1 = Sensors.getTempCByIndex(0);
 
 
 lcd.setCursor(0, 0);
 lcd.print("ACUARIO:  ");
 lcd.print(T1);
 lcd.print((char)223);
 lcd.print ("C");

 
   
 if (T1 < 23) ThermoState = 1;
 if (T1 > 25) ThermoState = 0;
 if (T1 < 25) VentState = 0;
 if (T1 > 27) VentState = 1;
 
 

lcd.setCursor(0, 1);
 if(ThermoState == 1){
  digitalWrite(PinThermo, LOW);
  lcd.print("CALENTADOR ON");
 }
 else
 {
   digitalWrite(PinThermo, HIGH);
   lcd.print("CALENTADOR OFF");
 }
 lcd.setCursor(0, 2);
 if(VentState == 1 )
 {
   digitalWrite(PinVent, LOW);
   lcd.print("VENTILADOR ON");
 }
 else
 {
   digitalWrite(PinVent, HIGH);
   lcd.print("VENTILADOR OFF");
 }
 
 lcd.setCursor(15,3);
 if (hour < 10) lcd.print("0");
 lcd.print(hour, DEC);
 lcd.print(":");  
 if (minute < 10) lcd.print("0");
 lcd.print(minute, DEC);
 lcd.setCursor(0,3);
 if (dayOfMonth < 10) lcd.print("0");
 lcd.print(dayOfMonth, DEC);
 lcd.print("/");
 if (month < 10) lcd.print("0");
 lcd.print(month, DEC);  
 lcd.print("/");
 lcd.print("20");  
 if (year < 10) lcd.print("0");
 lcd.print(year, DEC);
 lcd.print("  ");
 delay(pDelay);
 wdt_reset();///////watcdog///////////////
}



void setup()
{
 wdt_disable();//////////////watchdog//////////  
 Wire.begin();
 pinMode (PinCO2, OUTPUT);
 pinMode (PinLight, OUTPUT);
 pinMode (PinThermo, OUTPUT);
 pinMode (PinVent, OUTPUT);
 
 Sensors.begin();
 
 lcd.init();
 lcd.backlight();
 lcd.clear();
 wdt_enable(WDTO_4S); //////////////watchdog//////////  
 }



void loop ()
{
 getDateDs1307(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year);

 lcd.setCursor(15,3);
 if (hour < 10) lcd.print("0");
 lcd.print(hour, DEC);
 lcd.print(":");  
 if (minute < 10) lcd.print("0");
 lcd.print(minute, DEC);
 lcd.setCursor(0,3);
 if (dayOfMonth < 10) lcd.print("0");
 lcd.print(dayOfMonth, DEC);
 lcd.print("/");
 if (month < 10) lcd.print("0");
 lcd.print(month, DEC);  
 lcd.print("/");
 lcd.print("20");  
 if (year < 10) lcd.print("0");
 lcd.print(year, DEC);
 lcd.print("  ");
 Lights(minute, hour);
 CO2(minute, hour);
 Temperature(minute, hour);
 lcd.clear();
 wdt_reset();///////watcdog///////////////  
}

por favor os lo suplicoooo echarme una mano. :o  :o  :o  :o  :smiley-cry:  :smiley-cry:  :smiley-cry:

GO_zalo

Mi mejor ayuda es recomendarte que empieces con un proyecto muuuucho mas sencillo

breogan08


PeterKantTropus

Postea también los errores, de otra forma es muy difícil ayudarte.
Saludos
"Si no entra como tornillo, entra como clavo"

carmeloco

Y pon de dónde has sacado el código. Ahí deberían estar también las librerías necesarias.

Por cierto. Si quieres un consejo, yo tengo un acuario, y ni se me ocurriría poner un controlador "experimental". Yo uso uno de estos:


Go Up