Go Down

Topic: ¿Es correcto este planteamiento? (Read 985 times) previous topic - next topic

divat_12

Hola compañeros,

Os explico un poco: Estoy iniciándome en este mundo del Arduino por un proyectillo que tengo en mente. No sé qué modelo de Arduino sería el más conveniente.

Lo que debe hacer el programa es lo siguiente:
En haber una señal de inicio (pulsador) se enciende un LED y da una primera salida (yo la utilizare para activar un relé). Para la función que debe hacer el relé dejare un margen de 2 segundos la señal activa, antes de desactivarla. Acto seguido, y pasado otro tiempo de reposo, necesito que se active el relé 2, automáticamente, y así sucesivamente.

A continuación les dejo el código que he escrito haber si ven algún fallo o cree que puede funcionar. He intentado utilizar el programa "Virtual Breadboard" para simularlo pero no consigo que el programa me funcione en mi ordenador.

Muchas gracias de antemano.

CODIGO:

int pulsador = 2;       
int led = 13;               
int RELAY1 = 7;         
int RELAY2 = 8;         
int RELAY3 = 9;         
int RELAY4 = 10;         

void setup()
{
   pinMode(pulsador, INPUT);     
   pinMode(led, OUTPUT);   
   pinMode(RELAY1, OUTPUT);     
   pinMode(RELAY2, OUTPUT);
   pinMode(RELAY3, OUTPUT);
   pinMode(RELAY4, OUTPUT);
}

void loop()    
{
             if (digitalRead(pulsador) == HIGH)
   {   
      digitalWrite(led, HIGH);               
      digitalWrite(RELAY1, LOW);   
      delay(2000);                           
      digitalWrite(RELAY1, HIGH);       
      delay(4000);          
      digitalWrite(RELAY2, LOW);         
      delay(2000);                       
      digitalWrite(RELAY2, HIGH);         
      delay(4000);
      digitalWrite(RELAY3, LOW);           
      delay(2000);                         
      digitalWrite(RELAY3, HIGH);         
      delay(4000);
      digitalWrite(RELAY4, LOW
      delay(2000);                         
      digitalWrite(RELAY4, HIGH);         
   }
   
   else
   {      
   digitalWrite(led, LOW); 
   }
}

El mejor simulador es el botón de Upload :)

Así a ojo veo un fallo que te dará error al compilar:

[...]   
      delay(4000);
      digitalWrite(RELAY4, LOW
);
      delay(2000);                         
      digitalWrite(RELAY4, HIGH); 
       
[...]

divat_12

Ok!! Muchas gracias! El problema es que aún no tengo la placa de Arduino porque no se que modelo se adaptaria mejor a mis necesidades.

Cual me recomendais?

Un saludo,
David.

davidvg

#3
Sep 19, 2013, 02:13 pm Last Edit: Sep 19, 2013, 02:18 pm by davidvg Reason: 1
No necesitas la placa para compilar; no obtendrás los resultados reales pero puedes comprobar si hay errores de compilación con el IDE del Arduino o cualquier otro compilador para C++ :)

divat_12

Según el programa de Arduino no hay error de compilación (una vez puesto el ); que falta tal y como comento JRodrigo).

Ahora bien, ¿Ara lo que necessito? ¿Puedo activar con esta salida el relé? ¿Que placa Arduino necesito?


Imagina

Para ese sencillo programa te vale cualquier Arduino, ten en cuenta que tan solo utilizas una entrada y 6 salidas.

Para activar según que relé necesitaras algún componente adicional, pero muy poca cosa, eso o compras una PCB de 4 relés que ya lleva todos los componentes soldados.

Un Saludo,

Marcial

Buenas, mira si te serviria algo asi:


int Salidas=5;                                   // Numero de salidas
int TiempoSenal=2000;                            // Tiempo que queremos mantener las señales
int PinSalida[]={10,11,12,13,14};                // Pines usados para las salidas
int TiemposEspera[]={1000,1500,2000,2500,3000};  // Tiempos de espera entre disparos
int PinEntrada=5;                                // Pin pulsador inicio
int X;                                           // Auxiliar bucles
boolean Ejecutado=false;                         // Hemos ejecutado ya?

void setup()
{
  pinMode(PinEntrada, INPUT);                    // Establecer el pin del pulsador como entrada
  for (X=0;X<Salidas;X++)                        // 1 por cada salida
  {
    pinMode(PinSalida[X], OUTPUT);               // Establecer el pin como salida         
  }
}

void loop()
{
  if (!Ejecutado)                                // Si no hemos ejecutado
  {
    if (digitalRead(PinEntrada))                 // Si pulsamos boton inicio
    {
      Ejecutado=true;                            // Para que no ejecute de nuevo
      for (X=0;X<Salidas;X++)                    // 1 por cada salida
      {
        digitalWrite(PinSalida[X], HIGH);        // Activar salida
        delay(TiempoSenal);                      // Mantenemos señal el tiempo selecionado
        digitalWrite(PinSalida[X], LOW);         // Desactivar salida       
        delay(TiemposEspera[X]);                 // Esperamos el tiempo selecionado entre salidas     
      }
    }
  }
}

Go Up