que tal gente, me encuentro con un problema en un código y necesito su ayuda
no puedo hacer que el programa haga la secuencia como debe aqui les dejo el proyecto
Tarjeta para fabricador de hielo
Se tiene un fabricador de hielo marca Manitowoc modelo QM30 el cual no tiene tarjeta de control por ende se decide fabricar ya que la misma no se encuentra o es muy costosa.
El mismo posee:
1 compresor
1 Bomba de agua – 1 Ventilador (trabajando en paralelo controlados por un relay)
1 Válvula solenoide de gas – 1 Válvula solenoide de agua (trabajando en paralelo controlados por un relay)
1 Termistor NTC de 10k
1 switch de 3 posiciones ( ON – OFF - WASH)
1 Termostato
Se desea que un controlador Atmega322p haga lo siguiente:
- Revisión del Termistor, si el termistor está en mal estado entonces arroje un error con 3 pitidos continuos, si no que siga al siguiente paso.
- verificación de la posición de switch si esta en OFF el equipo permanecerá apagado, si esta en wash procederá a activar solo la bomba de agua y las válvulas solenoide de gas-agua durante 20 min para que el usuario realice el mantenimiento del mismo, posteriormente se apague la bomba de agua, las válvulas y emita un sonido indicando que el ciclo a finalizado.
- Si el switch está en ON entonces:
• Verifique el termostato, si está en OFF (ABIERTO) el equipo permanecerá en standby de lo contrario, si esta ON (CERRADO) pasara al siguiente paso
• INITIAL STAR UP
• Encienda solo la válvula de gas – agua
• Espere 2.9 min
• Active el compresor y bomba de agua.
• Espere 5 segundos y apague la válvula gas – agua (PARA INICIAR EL CICLO DE FABRICACIÓN DE HIELO)
• Cuando la temperatura alcance los 0 °C el punto donde los cubos de hielo están bien formados entonces:
• Apague la bomba de agua
• Espere 2 segundos y encienda la válvula de Gas –Agua (esto hace que se despeguen los cubos de hielo y caigan a la bandeja).
• Cuando la temperatura llegue a 12 °C Apague la válvula de gas - agua
• Espere 2 segundos y encienda la bomba de agua (reiniciando el ciclo de fabricación de hielo)
• Este siclo se mantendrá mientras que el termostato este en ON (CERRADO) al pasar a OFF (ABIERTO. Esto indica que la bandeja de hielo está llena ) el equipo se apagara hasta que se vuelva a cerrar dicho termostato cuando esto suceda volverá nuevamente al siclo del INITIAL STAR UP
El problema es que no puedo hacer que el programa haga la secuencia como debe en el inicio o initial star up hace los cambios muy rápido, quisiera de su ayuda para ver en que me estoy equivocando o que me falta de la programación, creo que es por la funcion while que no la e escrito bien. se que aun le falta al codigo pero puse este para que vean cual es el código en el que estoy trabajando. si lo pueden revisar y orientarme se los agradecería
Aqui les dejo el codigo
#include <math.h>
int ThermistorPin = 0;
int Vo;
float R1 = 10000;
float logR2, R2, T, Tc, Tf;
float c1 = 1.009249522e-03, c2 = 2.378405444e-04, c3 = 2.019202697e-07;
int counter;
void setup()
{
Serial.begin(9600);
pinMode(11, OUTPUT); //Buzer
pinMode(12, OUTPUT); //Valvula de gas
pinMode(8, OUTPUT); //Compresor
pinMode(13, OUTPUT); //Bomba de agua
pinMode(A0, INPUT); //Termistor
pinMode(2, OUTPUT); //Termostato
}
void loop()
{
Vo = analogRead(ThermistorPin);
R2 = R1 * (1023.0 / (float)Vo - 1.0);
logR2 = log(R2);
T = (1.0 / (c1 + c2*logR2 + c3*logR2*logR2*logR2));
Tc = T - 273.15;
Tf = (T * 9.0)/ 5.0 + 32.0;
Serial.println();
Serial.print("TEMPERATURA = ");
Serial.print(Tc);
Serial.println(" c");
analogRead(ThermistorPin);
if (Tc <= -20 || Tc >= 50) {
tone(11, 554, 300); // play tone 61 (C#5 = 554 Hz)
delay(200); // Wait for 200 millisecond(s)
noTone(11);
delay(200); // Wait for 200 millisecond(s)
tone(11, 523, 300); // play tone 60 (C5 = 523 Hz)
delay(200); // Wait for 200 millisecond(s)
noTone(11);
delay(200); // Wait for 200 millisecond(s)
tone(11, 523, 300); // play tone 60 (C5 = 523 Hz)
delay(200); // Wait for 200 millisecond(s)
noTone(11);
delay(1000); // Wait for 1000 millisecond(s)
} else {
while (digitalRead(2) == HIGH) {
digitalWrite(12, HIGH);
delay(10000); // Wait for 10000 millisecond(s)
digitalWrite(8, HIGH);
digitalWrite(13, HIGH);
delay(5000); // Wait for 5000 millisecond(s)
digitalWrite(12, LOW);
while (digitalRead(2) == HIGH) {
while (analogRead(ThermistorPin) < (Tc < 1)) {
if (Tc > 1) {
digitalWrite(13, HIGH);
Serial.println("Temperatura =");
Serial.print(Tc);
}
}
while (Tc == 1 && Tc < 12) {
if (Tc == 1 && Tc < 12) {
digitalWrite(13, LOW);
digitalWrite(12, HIGH);
Serial.println("Temperatura =");
Serial.print(Tc);
}
}
}
digitalWrite(8, LOW);
digitalWrite(12, LOW);
digitalWrite(13, LOW);
delay(100); // Wait for 100 millisecond(s)
}
}
}