Ayuda para control de compresores y cambiar maestro.


hola todo el mundo!

soy nuevo en el foro y en el mundo de arduino, solo programado plcs y esto se me queda un poco grande por ahora, voy empezar recibir cursos de arduino como lenguaje y programación pero necesito ayuda para un proyecto, os lo explico.

el proyecto en si es controlar una sala de compresores de aire, cada compresor consta de un sensor temperatura y un sensor de presión en común en el calderín, todos estos adaptados para que funcione con arduino.

procesos:

1 - cuando la presión sea menor 7,5 bares entra funcionar el compresor 1, si después de un tiempo la presión es menor 7,5 entrará el compresor 2, después de otro tiempo si la presión sigue estando menor 7,5 bares entrará el compresor 3. (hasta ahí si soy capaz de programarlo)

2 - si los tres compresores estuvieran funcionando un tiempo determinar y la presión es menor 7,5 bares pararía los compresores (que sería por rotura de tubería de la instalación)

3 - como veis el compresor 1 sería el maestro en realizar el empiece de los procesos y para que no sufra tanto desgaste sería que  cada 200 horas cambiara de maestro, por ejemplo cuando el compresor 1 ha estado 200 horas de maestro cambiará al compresor 2 empezando el proceso en el compresor 2 y así con el compresor 3.

el control de temperatura sería por avería, cuando un compresor supere 82 ºc pararía dicho compresor y saltaría una avería.

como veis esto me queda un poco grande la hora de programar y ect ya que hasta ahora solo consigo programar y hacer funcionar  el paso 1 ya que cuando aplico el paso 2 se me queda el compresor 1 encendido aunque le cambia las variables en un if en el loop.

a ver si alguien me pudiera ayudar o que código haríais para el manejo de este proceso.

gracias de antemano, un saludo!

hola, bienvenido!!!
te voy recomendar que hagas los cursos tutoriales que estan en documentación, los dos primeros links son de 8 clases cada uno. solo para que refuerces tus conocimientos de arduino.
los que hemos trabajado con plc tenemos algunas costumbres que acá no existen. las cosas no estan tan servidas y hay que trabajar un poquito mas. 

una de las clases es sobre millis()
millis() es una función que te da un valor unsigned long en milisegundos contados desde que arrancas el arduino.
por ende, no guarda relación con ninguna hora, pero si sirve para la medicíón de tiempos. claro que si cortas energía pierdes todo lo que venias acumulando.
asi que yo usaria un rtc, y el recomendado es el ds3231 o no... ahora que lo pienso mejor tal vez no haga falta. ya retomaré esto.
siguiendo con la idea, 
punto 2. los tres compresores funcionan un tiempo tx y la presion es menor 7.5bares  detienes los compresores.
si esto lo implementas con millis() es muy fácil. lee el ejemplo blinkwithoutdelay.ino que usa esta función.
pero básicamente haces asi


code: [select]
// defines un variable unsigned long
unsigned long t_start;


// en el loop en alguna parte estará esto


if (millis()-t_start>intervalo && presion<7.50) {
   digitalwrite(pincomp1, low);
   digitalwrite(pincomp2, low);
   digitalwrite(pincomp3, low);

 }


bien, aunque eso luce bien, falta decirle t_start = millis(); en el momento que tu enciendas los compresores e inicies la cuenta que terminara cuando la diferencia entre millis() y t_start supere intervalo.
se entiende?
punto3. 
puedes llevar una variable x cada compresor mas otra para contabilizar arranque y parada

code: [select]
unsigned long toncompresor1 = 0; // tiempo en milisegundos de compresor 1
unsigned long toncompresor2 = 0; // tiempo en milisegundos de compresor 2
unsigned long toncompresor3 = 0; // tiempo en milisegundos de compresor 3



unsigned long tempcompresor1 = 0;
unsigned long tempcompresor2 = 0;
unsigned long tempcompresor3 = 0;





de nuevo, cuando enciendas cada compresor harás
tempcompresor1 = milllis();
lo mismo para comp2 y 3
cuando detengas un compresor haras


toncompresor1 += millis()-tempcompresor1;

que hace esta ultima instrucción?
toncompresor1 valia 0.
tempcompresor1 la inicializaste conlos milisegundos que llevaba el arduino al momento en que encendiste el compresor1 y cuando lo detengas calculas los milisegundos que estuvo on como millis() - tempcompresor1 y se lo sumas toncompresor1 sin perder el valor que ya pudiera tener acumulado.

espero lo comprendas. es lo mismo que con el plc pero escrito en c.
obviamente falta.. asi que ese toncompresor1 debes compararlo con 200*3600*1000 (200 hs expresadas en miliseg).


code: [select]
if (toncompresor1 > 720000000ul) {
 // cambias de bomba
}


bueno tienes bastante para unir y trabajar.
esos valores tan grandes mejor crearlos al comienzo de este modo
#define 200horas 200*3600*1000 // 200 horas expresadas en milisegundos
y luego lo usas asi

code: [select]
if (toncompresor1 > 200horas) {
 // cambias de bomba
}


a ver como resulta.


Arduino Forum > International > Español > Software (Moderators: surbyte, Hector_A) > Ayuda para control de compresores y cambiar maestro.


arduino

Comments