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"
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
}
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.
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!
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().