Go Down

Topic: Activar 6 reles con un pulsador y cada rele con su propio pulsador. (Read 11049 times) previous topic - next topic

plasrer

Os cuento lo que necesito, pero que no soy capaz.

Necesito que con el pulsador 1 encienda 6 salidas de rele

un pulso del pulsador 1 se activan los 6 reles, otro pulso se apagan los 6 reles.

luego con el pulsador 2 activo el rele 1
pulsador 3 activo el rele 2
pulsador 4 activo el rele 3
pulsador 5 activo el rele 4
pulsador 6 activo el rele 5
pulsador 7 activo el rele 6

ose con el pulsador 1 activo todos y con los demas pulsadores actico de rele en rele.

alguien sabria hacerme el programa, porque yo me vuelvo loco, muchas gracias

mike_117

Quote
alguien sabria hacerme el programa
Apuesto a que sí xD

Ahora bien que haz investigado por tu cuenta, ya tienes el modulo hecho, lo compraste, tienes algún avance? Este es un foro de Ayuda, no de hacerte los proyectos, investiga un poco por tu cuenta y cuando tengas algo vuelve.
Estudiante de Ingeniería en Electrónica, Creyente del open source y en mis ratos libres suelo venir al foro para tratar de ayudar a gente con sus problemas, aficionado a la programación y a Arduino.

plasrer

Si tengo todo, lo necesario, pero se lo básico encender un les, ósea una salida de Rele con un pulsador, el problema viene cuando quieres encender varios relés con un sólo pulsador, como hacéis para que con un pulso en una entrada actives 1,2, o más salidas a la vez???
 */

// Variables estáticas
int pinBoton = 2;   // Declaramos la variable pin del Botón
int pinBoton2 = 3; // la otra entrada
int pinBoton3 = 4; otra entrada
int srele =  12;   // Declaramos la variable pin para relé.
int srele2 = 11; // la otra salida


// Variables dinámicas
int estadoBoton = 0;  // Variable para estado del botón

void setup() {
// Inicializa el pin del LED como salida:
pinMode(srele, OUTPUT);
// Inicializa el pin del botón como entrada:
pinMode(pinBoton, INPUT);
}

void loop(){
// Lee el valor del pin del botón y lo almacena
// en la variable estadoBoton
estadoBoton = digitalRead(pinBoton);

// Chequea si el botón está pulsado:
if (estadoBoton == HIGH) {
// Si es así, enciende el LED:
digitalWrite(srelee, HIGH);
}

else {
// Si no, lo mantiene apagado:
digitalWrite(srele, LOW);
}
}

Esto vale para activar una salida sola en el momento que le pongo otro srele me da error.


Como hago ahora para que con pin 2 encienda las dos salidas, con el pin 3 una salida y con el pin4 la otra??

surbyte

#3
Feb 14, 2016, 08:54 pm Last Edit: Feb 15, 2016, 03:24 pm by surbyte
Que un pulsador controle si se van a activar todos si o no, está en contra con lo demás
Porque mira la situacion.
Boton1 activa con un pulso todos...
Luego que estan todos ON, presionas Boton2 que no va a apagarlo hasta que este en la situación del segundo pulso.
O sea, la primera vez de Boton2 volvera a poner en ON la salida correspondiente y la segunda vez lo pondra en OFF
Pero Boton1 y su status, vuelven a decirle que se ponga en ON ya que esta activo.
O sea que este programa parece un trabajo de instituto, es así?

Esta es la solución para accionar todos los reles y ademas controlar 1 individualmente.
Code: [Select]
// Variables estáticas
const byte pinBoton1 = 2;      // Declaramos la variable pin del Botón
const byte pinBoton2 = 3;      // la otra entrada
const byte pinBoton3 = 4;     
const byte pinBoton4 = 5;     
const byte pinBoton5 = 6;     
const byte pinBoton6 = 7;     
const byte pinBoton7 = 8;     

const byte srele1    = 13;   // Declaramos la variable pin para relé.
const byte srele2    = 12; // la otra salida
const byte srele3    = 11;
const byte srele4    = 10;
const byte srele5    =  9;
const byte srele6    = A0;


// Variables dinámicas
int estadoBoton = 0;  // Variable para estado del botón
bool estBtn1, estBtn2, estBtn3, estBtn4, estBtn5, estBtn6, estBtn7;
bool estBtn1Ant, estBtn2Ant, estBtn3Ant,estBtn4Ant, estBtn5Ant, estBtn6Ant, estBtn7Ant;
bool statusBtn1 = false, statusBtn2 = false, statusBtn3 = false, statusBtn4 = false,
     statusBtn5 = false, statusBtn6 = false, statusBtn7 = false;
bool todosActivados = false, Btn2Activado = false;

void setup() {
  // Inicializa el pin del LED como salida:
  pinMode(srele1, OUTPUT);
  pinMode(srele2, OUTPUT);
  pinMode(srele3, OUTPUT);
  pinMode(srele4, OUTPUT);
  pinMode(srele5, OUTPUT);
  pinMode(srele6, OUTPUT);

  // Inicializa el pin del botón como entrada:
  pinMode(pinBoton1, INPUT);
  pinMode(pinBoton2, INPUT);
  pinMode(pinBoton3, INPUT);
  pinMode(pinBoton4, INPUT);
  pinMode(pinBoton5, INPUT);
  pinMode(pinBoton6, INPUT);
  pinMode(pinBoton7, INPUT);
  Serial.begin(9600);
}

void loop(){
    // Lee el valor del pin del botón y lo almacena
    // en la variable estadoBoton
    estBtn1 = digitalRead(pinBoton1);

    // Chequea si el botón está pulsado:
    if (estBtn1 == HIGH && estBtn1Ant == LOW) {
       statusBtn1 = !statusBtn1;
       Serial.print("Status Btn1:");
       Serial.println(statusBtn1);
       todosActivados = true;   // permito que el accionamiento de todos los botones funcione 1 vez
    }
    estBtn1Ant = estBtn1;
   
    estBtn2 = digitalRead(pinBoton2);

    // Chequea si el botón está pulsado:
    if (estBtn2 == HIGH && estBtn2Ant == LOW) {
       statusBtn2 = !statusBtn2;
       Serial.print("Status Btn1:");
       Serial.println(statusBtn1);
       Btn2Activado = true;
    }
    estBtn2Ant = estBtn2;
   
    if (statusBtn1 && todosActivados) {
       digitalWrite(srele1, HIGH);
       digitalWrite(srele2, HIGH);
       digitalWrite(srele3, HIGH);
       digitalWrite(srele4, HIGH);
       digitalWrite(srele5, HIGH);
       digitalWrite(srele6, HIGH);
       Serial.println("Todos activados");
       todosActivados = false;
    }
   
    if (!statusBtn1 && todosActivados) {
       digitalWrite(srele1, LOW);
       digitalWrite(srele2, LOW);
       digitalWrite(srele3, LOW);
       digitalWrite(srele4, LOW);
       digitalWrite(srele5, LOW);
       digitalWrite(srele6, LOW);
       Serial.println("Todos desactivados");
       todosActivados = false;
    }
    if (statusBtn2 && Btn2Activado)
        digitalWrite(srele2, HIGH);
    if (!statusBtn2 && Btn2Activado)
        digitalWrite(srele2, LOW);
    Btn2Activado = false;
}

plasrer

#4
Feb 14, 2016, 09:57 pm Last Edit: Feb 15, 2016, 12:49 pm by plasrer
muchas gracias estaba con esta programacion y no me funcionaba voy intentar leer la que tu me has enviado, buffff muchisimas gracias






plasrer

no no que va soy un novato, no es un trabajo de instituto, tenia un logo programado para encenderme las luces de un pequeño almacen y se me ha estropeado, y tenia un arduino porque con excontrol es muy facil de programar para encender desde el movil, y estuve cachareando con el arduino, y lo deje parado, ahora se me estropeo el logo, y pense porque no lo hago con el arduino, pense que seria mas facil, y no lo es, jejejeeeee me estoy volviendo un poco loco. pero haber si con vuestra ayuda lo hago funcionar, muchas gracias

plasrer

Que un pulsador controle si se van a activar todos si o no, está en contra con lo demás
Porque mira la situacion.
Boton1 activa con un pulso todos...
Luego que estan todos ON, presionas Boton2 que no va a apagarlo hasta que este en la situación del segundo pulso.
O sea, la primera vez de Boton2 volvera a poner en ON la salida correspondiente y la segunda vez lo pondra en OFF
Pero Boton1 y su status, vuelven a decirle que se ponga en ON ya que esta activo.
O sea que este programa parece un trabajo de instituto, es así?

Esta es la solución para accionar todos los reles y ademas controlar 1 individualmente.
Code: [Select]
// Variables estáticas
const byte pinBoton1 = 2;      // Declaramos la variable pin del Botón
const byte pinBoton2 = 3;      // la otra entrada
const byte pinBoton3 = 4;      
const byte pinBoton4 = 5;      
const byte pinBoton5 = 6;      
const byte pinBoton6 = 7;      
const byte pinBoton7 = 8;      

const byte srele1    = 13;   // Declaramos la variable pin para relé.
const byte srele2    = 12; // la otra salida
const byte srele3    = 11;
const byte srele4    = 10;
const byte srele5    =  9;
const byte srele6    = A0;


// Variables dinámicas
int estadoBoton = 0;  // Variable para estado del botón
bool estBtn1, estBtn2, estBtn3, estBtn4, estBtn5, estBtn6, estBtn7;
bool estBtn1Ant, estBtn2Ant, estBtn3Ant,estBtn4Ant, estBtn5Ant, estBtn6Ant, estBtn7Ant;
bool statusBtn1 = false, statusBtn2 = false, statusBtn3 = false, statusBtn4 = false,
     statusBtn5 = false, statusBtn6 = false, statusBtn7 = false;
bool todosActivados = false, Btn2Activado = false;

void setup() {
  // Inicializa el pin del LED como salida:
  pinMode(srele1, OUTPUT);
  pinMode(srele2, OUTPUT);
  pinMode(srele3, OUTPUT);
  pinMode(srele4, OUTPUT);
  pinMode(srele5, OUTPUT);
  pinMode(srele6, OUTPUT);

  // Inicializa el pin del botón como entrada:
  pinMode(pinBoton1, INPUT);
  pinMode(pinBoton2, INPUT);
  pinMode(pinBoton3, INPUT);
  pinMode(pinBoton4, INPUT);
  pinMode(pinBoton5, INPUT);
  pinMode(pinBoton6, INPUT);
  pinMode(pinBoton7, INPUT);
}

void loop(){
    // Lee el valor del pin del botón y lo almacena
    // en la variable estadoBoton
    estBtn1 = digitalRead(pinBoton1);

    // Chequea si el botón está pulsado:
    if (estBtn1 == HIGH && estBtn1Ant == LOW) {
       statusBtn1 = !statusBtn1;
       todosActivados = true;   // permito que el accionamiento de todos los botones funcione 1 vez
    }
    estBtn1Ant = estBtn1;
    
    estBtn2 = digitalRead(pinBoton2);

    // Chequea si el botón está pulsado:
    if (estBtn2 == HIGH && estBtn2Ant == LOW) {
       statusBtn2 = !statusBtn2;
       Btn2Activado = true;
    }
    estBtn2Ant = estBtn2;
    
    if (statusBtn1 && todosActivados) {
       digitalWrite(srele1, HIGH);
       digitalWrite(srele2, HIGH);
       digitalWrite(srele3, HIGH);
       digitalWrite(srele4, HIGH);
       digitalWrite(srele5, HIGH);
       digitalWrite(srele6, HIGH);
       todosActivados = false;
    }
    else {
       digitalWrite(srele1, LOW);
       digitalWrite(srele2, LOW);
       digitalWrite(srele3, LOW);
       digitalWrite(srele4, LOW);
       digitalWrite(srele5, LOW);
       digitalWrite(srele6, LOW);
       todosActivados = false;
    }
    if (statusBtn1 && Btn2Activado)
        digitalWrite(srele1, HIGH);
    else
        digitalWrite(srele1, LOW);
    Btn2Activado = false;
}


como mañana me funcione, te invito a lo que quieras, gracias, un saludo.

surbyte

Solo te resolví el caso general y un pulsador... te faltan varios.
Y a menos que te tomes un avión dudo que puedas invitarme algo.. jajaja

plasrer

okk bueno haber si lo hecho andar osea que solo funciona un pulsador no??

luego tendre que activar los otros, buffffffffffffffff

jejeee, bueno muchisimas gracias

plasrer



Solo te resolví el caso general y un pulsador... te faltan varios.
Y a menos que te tomes un avión dudo que puedas invitarme algo.. jajaja
hola compy he metido el programa en el arduino y no me funciona, error no da al compilarlo, lo unico que me hace es encender todos los reles nada mas lo programa luego le meto algun pulso por cualquier entrada y no funciona, sabrias decirme porque, o si es que aun tengo que meterle alguna cosa mas, muchas gracias

plasrer

hola he conseguido hacer un programa que sigo poniendole datos, os explico lo que me pasa he conseguido que al meter un pulso en el pin 6 se me activen los 6 reles de salida y al meterle otro pulso se me desactiven los 6 reles de salida, pero aveces hace cosas raras. depende y no se porque aveces se activan solo 4 otras veces se activan todos otras veces se desactivan 2, pero bueno aveces no se porque funciona bien, luego he activado otro pin de entrada, el 5 entonces pulso elpin 6 se me encienden todos los reles pulso el pin 5 y se me apaga solo el rele 1, perfecto funciona, si lo vuelvo a pulsar se vuelve a encender el rele 1, cual es el problema el problema es que si esta todo apagado y pulso el pin 5 enciendo un rele perfecto, pero ahora quiero pulsar el pin 6 para encender todo, y claro se me enciende todo pero se me apafa el rele 1

os pongo aqui mi programa

 int LED = 10 ;  int LED2 = 11 ; int LED3 = 12 ;  int LED4 = 13 ; int LED5 = 9 ; int LED6 = 8 ; int boton = 6 ; int boton2 = 5 ; int boton3 = 4 ; int boton4 = 3 ;
   
    bool estado = true ;
     bool estado_anterior = true ;
      bool estado2 = true ;
     bool estado_anterior2 = true ;
     bool estado3 = true ;
     bool estado_anterior3 = true ;
     bool estado4 = true ;
     bool estado_anterior4 = true ;
      bool estado5 = true ;
     bool estado_anterior5 = true ;
      bool estado6 = true ;
     bool estado_anterior6 = true ;
     bool estado7 = true ;
     bool estado_anterior7 = true ;
     
     
     void setup()
          {
               pinMode(boton, INPUT_PULLUP);        //Hemos eliminado R3
                pinMode(boton2, INPUT_PULLUP);
                pinMode(boton3, INPUT_PULLUP);
                pinMode(boton4, INPUT_PULLUP);
               pinMode(LED, OUTPUT);
               pinMode(LED2, OUTPUT);
               pinMode(LED3, OUTPUT);
               pinMode(LED4, OUTPUT);
               pinMode(LED5, OUTPUT);
               pinMode(LED6, OUTPUT);
          }
         


     void loop()
          {
               estado = digitalRead(boton);
               if (estado != estado_anterior)      //hay cambio : Han pulsado o soltado
                  {
                     if (estado == LOW)            //Al pulsar botón cambiar LED, pero no al soltar
                         
                           digitalWrite(LED, !digitalRead(LED));
                            delay(20);
                     estado_anterior = estado ;     // Para recordar el ultimo valor
                  }
                 
                   estado2 = digitalRead(boton);
               if (estado2 != estado_anterior2)      //hay cambio : Han pulsado o soltado
                  {
                     if (estado2 == LOW)            //Al pulsar botón cambiar LED, pero no al soltar
                           
                           digitalWrite(LED2, !digitalRead(LED2));
                            delay(20);
                     estado_anterior2 = estado2 ;     // Para recordar el ultimo valor
                  }
                 
                  estado3 = digitalRead(boton);
               if (estado3 != estado_anterior3)      //hay cambio : Han pulsado o soltado
                  {
                     if (estado3 == LOW)            //Al pulsar botón cambiar LED, pero no al soltar
                           
                           digitalWrite(LED3, !digitalRead(LED3));
                            delay(20);
                     estado_anterior3 = estado3 ;     // Para recordar el ultimo valor
                  }
                 
                  estado4 = digitalRead(boton);
               if (estado4 != estado_anterior4)      //hay cambio : Han pulsado o soltado
                  {
                     if (estado4 == LOW)            //Al pulsar botón cambiar LED, pero no al soltar
                           
                           digitalWrite(LED4, !digitalRead(LED4));
                            delay(30);
                     estado_anterior4 = estado4 ;     // Para recordar el ultimo valor
                  }
                 
                 
                 
                  estado5 = digitalRead(boton);
               if (estado5 != estado_anterior5)      //hay cambio : Han pulsado o soltado
                  {
                     if (estado5 == LOW)            //Al pulsar botón cambiar LED, pero no al soltar
                           
                           digitalWrite(LED5, !digitalRead(LED5));
                            delay(30);
                     estado_anterior5 = estado5 ;     // Para recordar el ultimo valor
                  }
                 
                 
                   estado6 = digitalRead(boton);
               if (estado6 != estado_anterior6)      //hay cambio : Han pulsado o soltado
                  {
                     if (estado6 == LOW)            //Al pulsar botón cambiar LED, pero no al soltar
                           
                           digitalWrite(LED6, !digitalRead(LED6));
                            delay(30);
                     estado_anterior6 = estado6 ;     // Para recordar el ultimo valor
                  }
                 
                 
                 
                      estado7 = digitalRead(boton2);
               if (estado7 != estado_anterior7)      //hay cambio : Han pulsado o soltado
                  {
                     if (estado7 == LOW)            //Al pulsar botón cambiar LED, pero no al soltar
                           
                           digitalWrite(LED, !digitalRead(LED));
                            delay(30);
                     estado_anterior7 = estado7 ;     // Para recordar el ultimo valor
                  }
             
           }
           

surbyte

#11
Feb 15, 2016, 12:36 pm Last Edit: Feb 15, 2016, 12:49 pm by surbyte
Te pedi que insertes los códigos usando tags.
Lee las normas del foroy luego edita tus post.
Ya veré el programa. Dudo que no funcione. Lo reviso y te respondo.
Lo primero que veo es que no usas resistencias, y que lo has conectado usando la resistencia interna del Arduino.

El programa si funciona y TE EXPLIQUE que solo funcionaba con el boton 1 y 2 solamente y que el resto lo tienes que completar tu. Entonces tu comentario que activas las entradas y nada pasa es lógico.
boton1 conectado a pin 2 y boton2 conectado a pin 3.

Bueno si ya hiciste tu programa me alegro. Pero si comparas un programa que esta configurado de un modo al ejecutarlo de otro modo obtienes resultados distintos. Por ende tu prueba de mi programa no fue la apropiada.

plasrer

Te pedi que insertes los códigos usando tags.
Lee las normas del foroy luego edita tus post.
Ya veré el programa. Dudo que no funcione. Lo reviso y te respondo.

que me quieres decir con esto:

Te pedi que insertes los códigos usando tags.

no te entiendo.

Por otra parte perdonarme por no haberme leido las normas antes, gracias

plasrer

Te pedi que insertes los códigos usando tags.
Lee las normas del foroy luego edita tus post.
Ya veré el programa. Dudo que no funcione. Lo reviso y te respondo.
Lo primero que veo es que no usas resistencias, y que lo has conectado usando la resistencia interna del Arduino.

El programa si funciona y TE EXPLIQUE que solo funcionaba con el boton 1 y 2 solamente y que el resto lo tienes que completar tu. Entonces tu comentario que activas las entradas y nada pasa es lógico.
boton1 conectado a pin 2 y boton2 conectado a pin 3.

Bueno si ya hiciste tu programa me alegro. Pero si comparas un programa que esta configurado de un modo al ejecutarlo de otro modo obtienes resultados distintos. Por ende tu prueba de mi programa no fue la apropiada.
[/quote

bufff se me hace grande, si yo quiero tu programa, pero es que me pierdo, intento saber lo que has escrito, pero se me va.

voy otra vez a probarlo, deverdad que estoy muy agradecido.

plasrer

Por fin ya me funciona tu programa pero solo me funciona con el pin1 cuando le doy al pin1 se activa todo menos el rele1 no entiendo porque y el pin 2 no hace nada, que puede estar pasando??

Go Up