Ayuda codigo rele y dimeo luces

Tema en 'Programación' iniciado por fredy666, 14 Jun 2013.

  1. fredy666

    fredy666

    Mensajes:
    88
    Registrado:
    21 Oct 2011
    Ubicación:
    Benifaio
    Buenas tardes, tengo montado el funduino, el lcd y la temperatura funciona muy bien, pero no se como conectar correctamente el rele y como hacer el dimeo (del cual tengo el codigo pero cuando conecto los cables no enciende nada). Hasta el domingo no podre revisar todo el cableado, pero creo que el problema estará en el código, ya que he estado copiando y pegando mucho y haciendo pruebas, pero ahora mismo no doy con la solución, y de paso me gustaria que alguien lo revisase por si hay algo que pudiese dar problemas.

    Tengo conectado el pin del dimeo al 8 ANALOG (ni PWN ni DIGITAL) y el rele tengo puestos los cables en los extremos, segun lo veo, continuando con el dibujo del esquema.
    Codigo "malo" con errores
    PHP:
    #include <OneWire.h>
    #include <DallasTemperature.h>
    #include <Wire.h> 
    #include <LiquidCrystal_I2C.h>
    #include "RTClib.h" // Incluye la librería RTClib
    RTC_DS1307 RTC// Crea el objeto RTC
    LiquidCrystal_I2C lcd(0x27,20,4);  // set the LCD address to 0x27 for a 16 chars and 2 line display
    int Retraso=5000
    int RelayPin 2;
    int bolRele1=0;//0=no 1=si
    int bolRele2=0;//0=no 1=si

    // Data wire is plugged into port 2 on the Arduino
    #define ONE_WIRE_BUS 7

    // Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs)
    OneWire oneWire(ONE_WIRE_BUS);

    // Pass our oneWire reference to Dallas Temperature. 
    DallasTemperature sensors(&oneWire);

    void setup()
    {
      
    // start serial port
     // Serial.begin(9600);
      
    lcd.init();
        
    Serial.begin(9600); // Establece la velocidad de datos del puerto serie
      
    Wire.begin(); // Establece la velocidad de datos del bus I2C
      
    RTC.begin(); // Establece la velocidad de datos del RTC
      
    lcd.backlight();
      
    // Start up the library
      
    sensors.begin();
      
    pinMode(RelayPinOUTPUT);  //Inicialitzem el pin del rele
     
    }

    int minuts;
    int hora;
    void loop()

        
    // call sensors.requestTemperatures() to issue a global temperature 
      // request to all devices on the bus

      
    DateTime now RTC.now(); // Obtiene la fecha y hora del RTC
      
    lcd.setCursor(0,0);
      
    lcd.print("=====ADRIA GRAU=====");
      
      
    lcd.setCursor(0,1);
      
    lcd.print("Temperatura: ");
      
    sensors.requestTemperatures(); // Send the command to get temperatures
      
    lcd.print(sensors.getTempCByIndex(0));
      
      
    lcd.setCursor(0,2);
      
    lcd.print("Hora: ");
      
    lcd.print(now
      
    .hour());
      
    lcd.print(":");
      
    lcd.print(now.minute());
      
    lcd.print(":");
      
    lcd.print(now.second());
      
    lcd.print("    ");
      
    delay(2000);
       
      
    //CODIC PER A VOLTATGE LEDS
      
    minuts=now.minute();
      
    hora=now.hour();
      
    Luces(minutshora); 
        
    //if (now.minute < 2) Retraso=1000; 
      ///else if (now.hour < 5) Retraso=10000; 
      //else Retraso=3000; 
      
    Retraso=3000;
    }


      
    void Luces(int minutosint horas) { 
    //LUCES PRIMARIAS// 
    int LucesAzules
    int InicioAmanecerAzul=540;//09:00 /conversion seria 60x11=660 la misma tabla para los demas parametros // 
    int FinAmanecerAzul=600;//12:00 // 
    int InicioAnochecerAzul=1080;//19:00// 
    int FinAnochecerAzul=1140;//18:00// 
    int MaxAzul=250
    int PorcentAzules

    int Tiempo;  
      
    Tiempo=horas*60+minutos
      
      
    //Activem el rele de la llum
      
    if (Tiempo>540 && bolRele1==0)
     {
       
    digitalWrite(2HIGH); 
       
    bolRele1=1;
     }
      if (
    Tiempo>1140 && bolRele1==1)
      {
        
    digitalWrite(2LOW); //CODIC PER A POSSAR EN MARXA EL RELE
        
    bolRele1=0;
      }
      
    //if (Tiempo < 60)Tiempo=Tiempo+1440; 
      //Tiempo=Tiempo-60; //Horario de Invierno  

    //################################# AZULES ################################### 

    //Noche 
    if (Tiempo InicioAmanecerAzulLucesAzules=0
    //Amanecer 
    if (Tiempo >= InicioAmanecerAzul && Tiempo <= FinAmanecerAzulLucesAzules=(Tiempo-InicioAmanecerAzul)*4
    //Dia 
    if ((Tiempo FinAmanecerAzul) && Tiempo InicioAnochecerAzulLucesAzules=MaxAzul
    //Anochecer 
    if (Tiempo >= InicioAnochecerAzul && Tiempo <= FinAnochecerAzulLucesAzules=(FinAnochecerAzul-Tiempo)*4

    //Control 
    if( LucesAzules <0LucesAzules=0
    if( 
    LucesAzules >250LucesAzules=250

     
    analogWrite(8255-LucesAzules );   
      
    //analogWrite(10, 255-LucesBlancas);  

    PorcentAzules =Porcent(LucesAzules ,255)*2
     
     
    p(); 
      
    //FadeLcd();  
      //lcd.init();
      
    lcd.setCursor(0,3); 
       
      
    //if (PorcentAzules < 10); 
      
      
    lcd.print("% "); 
      
    Serial.print(PorcentAzules); 
      
    lcd.print(PorcentAzules);
      
    lcd.print(" ");

     if (
    LucesAzules 1)
       {
      
    // digitalWrite(2, HIGH); //CODIC PER A POSSAR EN MARXA EL RELE
       
    lcd.print("  " ); 
       
    lcd.print(bolRele1);
       }
      else
      {
        
    //digitalWrite(2, LOW);
        
    lcd.print("  ILUMINACIO OFF");     //CODIC PER A TALLAR EL RELE
       
    }
       } 

    //PAUSAR 3 SEGONS
    void p () 
      {  
      
    delay (3000); 
      } 

    int Porcent(int Valorint Maximo

    int result
    result=Valor*50
    result=result/Maximo
    return 
    result
    }

    Por favor, que alguien me diga algo en cuanto puedan.

    Muchas gracias de antemano.

    SOLUCIÓN con el Codigo bien, aun asi hay cositas comentadas que son pruebas y demas que hago con el bichejo xD
    PHP:
    #include <OneWire.h>
    #include <DallasTemperature.h>
    #include <Wire.h> 
    #include <LiquidCrystal_I2C.h>
    #include "RTClib.h" // Incluye la librería RTClib
    RTC_DS1307 RTC// Crea el objeto RTC
    LiquidCrystal_I2C lcd(0x27,20,4);  // set the LCD address to 0x27 for a 16 chars and 2 line display
    int Retraso=5000
    int RelayPin 2;
    int bolRele1=0;//0=no 1=si
    int bolRele2=0;//0=no 1=si

    // Data wire is plugged into port 2 on the Arduino
    #define ONE_WIRE_BUS 7

    // Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs)
    OneWire oneWire(ONE_WIRE_BUS);

    // Pass our oneWire reference to Dallas Temperature. 
    DallasTemperature sensors(&oneWire);

    void setup()
    {
      
    // start serial port
     // Serial.begin(9600);
      
    lcd.init();
        
    Serial.begin(9600); // Establece la velocidad de datos del puerto serie
      
    Wire.begin(); // Establece la velocidad de datos del bus I2C
      
    RTC.begin(); // Establece la velocidad de datos del RTC
      
    lcd.backlight();
      
    // Start up the library
      
    sensors.begin();
      
    pinMode(RelayPinOUTPUT);  //Inicialitzem el pin del rele
     
    }

    int minuts;
    int hora;
    void loop()

        
    // call sensors.requestTemperatures() to issue a global temperature 
      // request to all devices on the bus

      
    DateTime now RTC.now(); // Obtiene la fecha y hora del RTC
      
    lcd.setCursor(0,0);
      
    lcd.print("=====ADRIA GRAU=====");
      
      
    lcd.setCursor(0,1);
      
    lcd.print("Aigua: ");
      
    sensors.requestTemperatures(); // Send the command to get temperatures
      
    lcd.print(sensors.getTempCByIndex(0));
      
    lcd.print(" C");
      
      
    lcd.setCursor(0,2);
      
    lcd.print("Hora: ");
      
    lcd.print(now
      
    .hour());
      
    lcd.print(":");
      
    lcd.print(now.minute());
    //  lcd.print(":");
     // lcd.print(now.second());
     // lcd.print("    ");
    //  delay(2000);
       
      //CODIC PER A VOLTATGE LEDS
      
    minuts=now.minute();
      
    hora=now.hour();
      
    Luces(minutshora); 
        
    //if (now.minute < 2) Retraso=1000; 
      ///else if (now.hour < 5) Retraso=10000; 
      //else Retraso=3000; 
     // Retraso=3000;
    }


      
    void Luces(int minutosint horas) { 
    //LUCES PRIMARIAS// 
    int LucesAzules;
    int LucesBlancas;
    int InicioAmanecerBlanco=600;
    int InicioAmanecerAzul=601;//09:00 /conversion seria 60x11=660 la misma tabla para los demas parametros // 

    int FinAmanecerBlanco=660;
    int FinAmanecerAzul=661;//12:00 // 

    int InicioAnochecerBlanco=1195;
    int InicioAnochecerAzul=1200;//19:00//

    int FinAnochecerBlanco=1255;
    int FinAnochecerAzul=1260;//18:00// 

    int MaxBlanco=250;
    int MaxAzul=250
    int PorcentBlancas;
    int PorcentAzules

    int Tiempo;  
      
    Tiempo=horas*60+minutos
      
      
    //ACTIVA EL RELE DE LA LLUM
      
    if (Tiempo>601 && bolRele1==0)
     {
       
    digitalWrite(2HIGH); 
       
    bolRele1=1;
       
    lcd.backlight();
     }
      if (
    Tiempo>1265 && bolRele1==1)
      {
        
    digitalWrite(2LOW); //CODIC PER A POSSAR EN MARXA EL RELE
        
    bolRele1=0;
        
    lcd.noBacklight();
      }
      
    //if (Tiempo < 60)Tiempo=Tiempo+1440; 
      //Tiempo=Tiempo-60; //Horario de Invierno  

    //################################# AZULES ################################### 
    //Noche 
    if (Tiempo InicioAmanecerBlancoLucesBlancas=0
    //Amanecer 
    if (Tiempo >= InicioAmanecerBlanco && Tiempo <= FinAmanecerBlancoLucesBlancas=(Tiempo-InicioAmanecerBlanco)*4
    //Dia 
    if ((Tiempo FinAmanecerBlanco) && Tiempo InicioAnochecerBlancoLucesBlancas=MaxBlanco
    //Anochecer 
    if (Tiempo >= InicioAnochecerBlanco && Tiempo <= FinAnochecerBlancoLucesBlancas=(FinAnochecerBlanco-Tiempo)*4

    //################################# BLANCAS ################################### 
    //Noche 
    if (Tiempo InicioAmanecerAzulLucesAzules=0
    //Amanecer 
    if (Tiempo >= InicioAmanecerAzul && Tiempo <= FinAmanecerAzulLucesAzules=(Tiempo-InicioAmanecerAzul)*4
    //Dia 
    if ((Tiempo FinAmanecerAzul) && Tiempo InicioAnochecerAzulLucesAzules=MaxAzul
    //Anochecer 
    if (Tiempo >= InicioAnochecerAzul && Tiempo <= FinAnochecerAzulLucesAzules=(FinAnochecerAzul-Tiempo)*4

    //Control 
    if( LucesAzules <0LucesAzules=0
    if (
    LucesBlancas<0LucesBlancas=0;
    if( 
    LucesAzules >250LucesAzules=250
    if(
    LucesBlancas>250LucesBlancas=250;
     
    analogWrite(8LucesAzules );   
     
    analogWrite(9LucesBlancas);  

    PorcentAzules =Porcent(LucesAzules ,255)*2
    PorcentBlancas =Porcent(LucesBlancas255)*2;
     
    p(); 
      
    lcd.setCursor(0,3); 
        
       
      
    //Serial.print(PorcentAzules); 
      
    lcd.print(PorcentAzules);
      
    lcd.print("%");
      
    lcd.print(" - ");

    //lcd.print("% "); 
      //Serial.print(PorcentBlancas); 
      
    lcd.print(PorcentBlancas);
      
    lcd.print("%");
      
    //lcd.print(" - ");
      //lcd.print(Tiempo);

     
    if (LucesAzules 1)
       {
      
    // digitalWrite(2, HIGH); //CODIC PER A POSSAR EN MARXA EL RELE
       //lcd.print("  " ); 
       //lcd.print(bolRele1);
       
    }
      else
      {
        
    //digitalWrite(2, LOW);
        //lcd.print("  ILUMINACIO OFF");     //CODIC PER A TALLAR EL RELE
       
    }
       
      
    // lcd.clear();
       


    //PAUSAR 3 SEGONS
    void p () 
      {  
      
    delay (6000); 
      } 

    int Porcent(int Valorint Maximo

    int result
    result=Valor*50
    result=result/Maximo
    return 
    result
    }
     
    Última edición: 27 Jun 2013
  2. Valeriano

    Valeriano

    Mensajes:
    101
    Registrado:
    21 Mar 2013
    Ubicación:
    Badajoz
    Yo no entiendo mucho pero en que lugar le has dicho el el PIN 7 es el RELE ?
     
  3. fredy666

    fredy666

    Mensajes:
    88
    Registrado:
    21 Oct 2011
    Ubicación:
    Benifaio
    No, en el 2 analogico, y el 7 digital para el dimeo

    Sent from my SK17i using Tapatalk 2
     
  4. Goldenpas

    Goldenpas

    Mensajes:
    184
    Registrado:
    23 May 2006
    Ubicación:
    España
    no entiendo mucho pero explica como quieres dimear, con fuente dimeable con tip seguro que algun compañero te dira algo..

    yo estoy como tu probando y probando
     
  5. fredy666

    fredy666

    Mensajes:
    88
    Registrado:
    21 Oct 2011
    Ubicación:
    Benifaio
    Siento no haberlo explicarlo antes, el dimeo lo quiero mediante TIP, esta todo conectado y teoricamente funciona, però no hace el dimeo, el cual lo tengo pinchado a uno de los cables de la alimentacion de los leds de 24v

    Sent from my SK17i using Tapatalk 2
     
  6. fredy666

    fredy666

    Mensajes:
    88
    Registrado:
    21 Oct 2011
    Ubicación:
    Benifaio
    Si, ese es el esquema que he seguido. Però con un tip120 creo, que para los w que tengo sobra xd

    Sent from my SK17i using Tapatalk 2
     
    Última edición: 14 Jun 2013
  7. Ashlar

    Ashlar

    Mensajes:
    899
    Registrado:
    22 Jun 2006
    Ubicación:
    España
    Creo que tienes un problema con los pines que has utilizado, te copio una de tus frases que me deja un poco descolocado...
    Los pínes analógicos del arduino son solo ENTRADAS, si miras en las descipciones de la web del arduino en los pines digitales habla de "I/O Pins" pero los analógicos son "Input Pins" nada más. Cuando se utiliza analogWrite se hace con un pin digital que admita pwm y no en uno analógico. Ojo que me baso en lo que has dicho... no se que modelo de arduino tengas por si lo tengas bien conectado y el fallo esté en otro lado...
     
  8. fredy666

    fredy666

    Mensajes:
    88
    Registrado:
    21 Oct 2011
    Ubicación:
    Benifaio
    Ok, probare eso, aunque me suena que ya lo probe aye i nada, ós adjunto una foto del rele para que me digais si esta bien puesto o no, esque nunca he conectado uno xd.

    Gracias

    Sent from my SK17i using Tapatalk 2
     

    Adjuntos:

  9. isoriano

    isoriano

    Mensajes:
    353
    Registrado:
    12 Sep 2011
    Ubicación:
    badalona
    esos reles estan mal conectados es centro mas un ladoy despues tendras que jugar con HIGH y LOW
     
    Última edición: 15 Jun 2013
  10. isoriano

    isoriano

    Mensajes:
    353
    Registrado:
    12 Sep 2011
    Ubicación:
    badalona
    y si no me equivoco te falta algo como
    pinMode(PowerFuente,OUTPUT);
    pinMode(PowerFuenteLuna,OUTPUT);
    Serial.end();

    y ademas
    int PowerFuente = 22; // conectar rele para encender y apagar la fuente
    int PowerFuenteLuna = 24; // conectar rele para encender y apagar la fuente de al luz de otro canal
    int RECV_PIN = 23; // pin IR entrada datos mando
    int Temperatura =25; //pin recepcion de la temperatura
    int ReleCalent =26; // pin controlar rele del calentador
    int PowerVentLampa =27; // pin para encender ventilador de la lampara led

    pero yo soy novato tambien pero me da la sensacion que no lo tienes declarado
     
  11. fredy666

    fredy666

    Mensajes:
    88
    Registrado:
    21 Oct 2011
    Ubicación:
    Benifaio
    Gracias, en cuanto llegue a casa cambio los cables.

    En cuanto a los pines utilizados, no utilizo tantos, hay cosas puestas, però que ahora no utilizo.

    Sent from my SK17i using Tapatalk 2
     
  12. isoriano

    isoriano

    Mensajes:
    353
    Registrado:
    12 Sep 2011
    Ubicación:
    badalona
    de nada de todas maneras si el codigo esa bien el rele deveria activarse y se deveria encender una luz en la placa de reles aparte de la de aliamentancion
    osea si lo programas a las 11.00 deveria hacer el chasquido de ponerse en marcha independienteme de que tu tubieras mal puestos los cables de conmutacio
     
  13. fredy666

    fredy666

    Mensajes:
    88
    Registrado:
    21 Oct 2011
    Ubicación:
    Benifaio
    Esa luz roja se pone cuando teoricamente el rele esta desconectado, por lo que supongo que LOW sera encendido y HIGH apagado, es decir, que lo tengo al revés xd

    Sent from my SK17i using Tapatalk 2
     
  14. fredy666

    fredy666

    Mensajes:
    88
    Registrado:
    21 Oct 2011
    Ubicación:
    Benifaio
    Vale, el rele ya está solucionado, era tema del cable, muchisimas gracias. Ahora me meteré con el tema del dimeo, ya que el codigo que tengo lo pille de estos foros, igual esta mal. Ya os contare como queda. También tenia mal puesto un cable del rele al GND, los cables que utilizo para las pruebas son muy delgados. Tengo que ver como los conecto bien, ya que no me sirven los cables que venden hechos, tiene muy poca longitud para lo que quiero xD

    Gracias
     
  15. Goldenpas

    Goldenpas

    Mensajes:
    184
    Registrado:
    23 May 2006
    Ubicación:
    España
    el rele esta activado pero como te dice el compañero isoriano lo tienes mal conectado
     
  16. fredy666

    fredy666

    Mensajes:
    88
    Registrado:
    21 Oct 2011
    Ubicación:
    Benifaio
    Una pregunta, con que enganchais los cables al arduino??? Yo lo hago directamente con el cable, però parece ser que es muy fino y oscila bastante.

    Por cierto, cuando hago funcionar el dimeo me falla el lcd, esta semana revisare todos los cables y haber si lo puedo ordenar mas, que tengo un manojo de cables impresionante xd

    Sent from my SK17i using Tapatalk 2
     
  17. Ashlar

    Ashlar

    Mensajes:
    899
    Registrado:
    22 Jun 2006
    Ubicación:
    España
    Yo tengo una shield que se pincha encima del arduino y que esta toda vacía de componentes y preparada para que puedas soldar en ella todo lo que quieras, así algunas cosas (como las resistencias para las entradas digitales) y cableado lo sueldo en ella y me aseguro que no se mueva por mucho que la toque.
     
  18. fredy666

    fredy666

    Mensajes:
    88
    Registrado:
    21 Oct 2011
    Ubicación:
    Benifaio
    Le hechare un vistazo, aunque el mayor problema lo tengo con. Los cables que van al arduino, que se mueven mucho, igual pillo los cables ya hechos, que no es mucha pasta xd

    Sent from my SK17i using Tapatalk 2
     
  19. manolete

    manolete

    Mensajes:
    122
    Registrado:
    15 Dic 2010
    Ubicación:
    esp
    Hola para ese problema busca en ebay algo como esto" Screw Shield V2 For Arduino ", así te quitas posibles fallos por mal contacto.

    saludos