Secuencias de tiempo para cada rele

Hola
Como novato, acabo de hacer mi primer proyecto para un belén. El proyecto en si es que tiene que encender una maquina de humo durante 1,5 segundos y apagarse, después de 8 segundos tiene que encenderse una maquina de espuma durante 1 segundo y apagarse. este ciclo se tiene que repetir cada 30 minutos.
Tengo todos los esquemas hechos y también la programación pero no puedo subir adjuntos porque aquí también soy nuevo, si alguien me puede ayudar, se los mandaría por correo.
Quiero ver si todo esta bien para cuando me deis el visto bueno montarlo.
Gracias y un saludo

Moderador:
No tienes que subir un programa. Lee las normas del foro
Solo copias y pegas usando CODE.
Te dejo pequeña guia.


Lee las Normas del foro y edita tu código/error usando etiquetas de código.
Ve a edición, luego selecciona todo el código que has publicado, lo cortas y click en (<CODE/>)


Y quita la palabra "Ayuda para un novato" de tu título. Punto 5 de las normas.
Todos los que llegan, lo hacen por ayuda, o de lo contrario para que postean?
Gracias

Lo siento, te pasará mucho con los nuevos.
Haber si lo enfoco de otra manera.
Saludos

hola, no me aparece el botón "etiquetas"

A esto se refiere

1 Like

gracias

pero no se de donde sacar el codigo

Pero si has dicho que ya tienes esquemas y código.

Esto es lo que he conseguido, lo siento

const int HUMO = 13;
const int ESPUMA = 12;

void setup() {
Serial.begin (9600);
 pinMode(HUMO,OUTPUT);// conectado a pin 13
  pinMode(ESPUMA,OUTPUT);// conectado a pin 12
}

void loop() {
digitalWrite(12, LOW);// rele 2 desconectado
   Serial.print("Pin 12 LOW");// pin 12 desconectado
digitalWrite(13,HIGH);// rele 1 conectado
   Serial.print("Pin 13 LOW");// pin 13 conectado
delay(2000);// rele 12 desconectado y rele 13 conectado 2 segundos 

digitalWrite(12, LOW);// rele 2 desconectado
   Serial.print("Pin 12 LOW");// pin 12 desconectado
digitalWrite(13,LOW);// rele 1 desconectado
   Serial.print("Pin 13 LOW");// pin 13 desconectado
delay(8000);// rele 2 desconectado y rele 1 desconectado 8 segundos

digitalWrite(12, LOW);// rele 2 desconectado
   Serial.print("Pin 12 LOW");// pin 12 desconectado
digitalWrite(13,HIGH);// rele 1 desconectado
   Serial.print("Pin 13 HIGH");// pin 13 conectado
delay(1500);// rele 2 desconectado y rele 1 desconectado 1 segundo y medio

digitalWrite(13, LOW);// rele 2 desconectado
   Serial.print("Pin 13 LOW");// pin 13 desconectado
digitalWrite(12,LOW);// rele 1 desconectado
   Serial.print("Pin 12 LOW");// pin 12 desconectado
delay(180000);// rele 13 desconectado y rele 12 desconectado 30 minutos
}


[foto arduino dibujo.pdf|attachment](upload://vqG0nRnwdy04eFqXCEEYdHLqrAB.pdf) (125,5 KB)

Bueno, repites ordenes innecesariamente, te falta un cero en el delay final, pero andaría.

Te aconsejo que leas algún tutorial sobre sustituir delays por millis, tienes media hora al arduino sin hacer nada, (delay 1800000), ¿es que no vas a encender ni una bombillita del belen?.
A continuación te dejo un código algo mas coherente:

const int HUMO = 13;
const int ESPUMA = 12;

void setup() {
  Serial.begin (9600);
  pinMode(HUMO, OUTPUT); // conectado a pin 13
  pinMode(ESPUMA, OUTPUT); // conectado a pin 12
  
  // arrancamos con los dos reles apagados.
  digitalWrite(ESPUMA, LOW);// rele espuma desconectado
  digitalWrite(HUMO, LOW); // rele humo desconectado
}

void loop() {
  digitalWrite(HUMO, HIGH);       // rele humo conectado
  Serial.print("Pin HUMO HIGH");  // imprime pin humo conectado
  delay(1500);                    // humo durante 1,5 seg
  digitalWrite(HUMO, LOW);        // rele humo desconectado
  Serial.print("Pin HUMO LOW");   // imprime pin humo desconectado
  
  delay(8000);// rele humo desconectado y rele espuma desconectado 8 segundos
 
  digitalWrite(ESPUMA, HIGH);       // rele espuma conectado
  Serial.print("Pin ESPUMA HIGH");  // imprime pin espuma conectado
  delay(1000);                      // humo durante 1,5 seg  
  digitalWrite(ESPUMA, LOW);        // rele espuma desconectado
  Serial.print("Pin ESPUMA LOW");   // imprime pin espuma desconectado  
 
  delay(1789500);// rele humo desconectado y rele espuma desconectado el resto de los 30 minutos
}
1 Like

Sabes lo que hace delay(). Delay detiene el codigo el tiempo que le indicas en milisegundos.
Asi que nunca vas a poder encender algo mientras otra cosa no termine su delay.
Ve a Documentación y lee los tutoriales sobre millis().
Vos leelos y luego te diremos como modifcar tu código.

Mira el ejemplo BlinkWithoutDelay.ino y verás como ese código hace cosas sin consumir tiempo.
Del mimo modo puedes agregar mas parpadeos en otros pines porque el flujo del programa no se detiene en un delay().
Cuando usas millis() tmb debes entender el concepto de una máquina de estados.
Es como un contador y un switch que cambia de tarea cuando la tarea anterior esta terminada. De ese modo puedes hacer cosas y hacer que el Arduino luzca como que hiciera muchas tareas pero sigue haciéndolas de manera secuencial solo que sin trabas, y la única traba es delay() pero tambien son trabas operaciones que demoran varios mseg.

1 Like

gracias, mirare los millis

Gracias.

@txisio Si únicamente necesitas encender y apagar los relés y nada más te recomiendo que uses el código de @gonpezzi.
En lo personal agregaría un pequeño delay al final de setup() para que no active el humo inmediatamente se conecta.

Si vas a agregar otra funcionalidad entonces debes usar millis() como te ha dicho @Surbyte

¡Feliz año!

1 Like

Gracias, lo tengo en cuenta

Moderador:

Sigues respondiendo sin haber cambiado el título como te pedí en el post#2

Quedas advertido por segunda vez!!

hecho

Hola
He hecho como me has dicho pero todo va al revés, coando tienen que estar los reles accionados, se apagan y cuando tienen que estar apagados se encienden, ademas al encenderlo por primera vez parpadean los dos reles.

const int HUMO = 13;
const int ESPUMA = 12;

void setup() {
  Serial.begin (9600);
  pinMode(HUMO, OUTPUT); // conectado a pin 13
  pinMode(ESPUMA, OUTPUT); // conectado a pin 12
  delay(2000);
}

void loop() {
  digitalWrite(HUMO, LOW);       // rele humo conectado
  Serial.print("Pin HUMO LOW");  // imprime pin humo conectado
  delay(2000);                    // humo durante 2 seg
  digitalWrite(HUMO, HIGH);        // rele humo desconectado
  Serial.print("Pin HUMO HIGH");   // imprime pin humo desconectado
  
  delay(7000);// rele humo desconectado y rele espuma desconectado 7 segundos
 
  digitalWrite(ESPUMA, LOW);       // rele espuma conectado
  Serial.print("Pin ESPUMA LOW");  // imprime pin espuma conectado
  delay(1000);                      // humo durante 1 seg  
  digitalWrite(ESPUMA, HIGH);        // rele espuma desconectado
  Serial.print("Pin ESPUMA HIGH");   // imprime pin espuma desconectado  
 
  delay(10000);// rele humo desconectado y rele espuma desconectado el resto de los 10 segundos

perdona, como ves he cambiado los HIGH por LOW y viceversa y funciona como quiero pero sigue parpadeando al principio

Olvidaste poner en HIGH los pines en setup().