Hola foro en español, quiero remplazar PLC, por un mega, porque el PLC se corrompió el código, y esta descontinuado ese modelo, y nadie a podido activarlo, me pidieron que intente remplazarlo con Arduino, el hardware ya casi lo tengo listo, solo falta que lleguen unos módulos que vienen en camino, lo que no se deja es el código, empece con uno muy simple, ya hace la secuencia de encendido de los reles pero le falta mas cosas. si me pueden echar una manita (como decimos en México cuando necesitamos ayuda), subo toda la información que tengo, intentare explicar me lo mas claro que me sea posible, para no hacer les perder el tiempo.
Saludos.
Este es el susodicho PLC que tengo que reemplazar por el mega.
#include "max6675.h"
const byte thermoDO = 6;
const byte thermoCS = 5;
const byte thermoCLK = 3;
MAX6675 thermocouple(thermoCLK, thermoCS, thermoDO);
const unsigned long intervalfiltro = 10000;
const unsigned long intervalventilador = 15000;
const unsigned long intervalvalvula = 20000;
const unsigned long intervalcombustion = 25000;
const unsigned long intervalEspera = 30000;
const byte gndPin = 2;
const byte vccPin = 3;
#define R1filtro 8
#define R2ventilador 9
#define R3valvula 10
#define R4combustion 11
#define sensorfiltro 22
#define sensorventilador 24
#define sensorvalvula 26
#define sensorcombustion 28
enum estado {INICIO, FILTRO, VENTILADOR, VALVULA, COMBUSTION};
estado estados;
unsigned long tiempofiltro;
unsigned long tiempoventilador;
unsigned long tiempovalvula;
unsigned long tiempocombustion;
unsigned long tiemponuevointento;
unsigned long intervalolecturas = 2500UL;
bool estadosensorfiltro;
bool estadosensorventilador;
bool estadosensorvalvula;
bool estadosensorcombustion;
float temp;
void setup() {
Serial.begin(9600);
pinMode(R1filtro, OUTPUT);
pinMode(R2ventilador, OUTPUT);
pinMode(R3valvula, OUTPUT);
pinMode(R4combustion, OUTPUT);
pinMode(sensorfiltro, INPUT_PULLUP);
pinMode(sensorventilador, INPUT_PULLUP);
pinMode(sensorvalvula, INPUT_PULLUP);
pinMode(sensorcombustion, INPUT_PULLUP);
digitalWrite(R1filtro, HIGH);
digitalWrite(R2ventilador, HIGH);
digitalWrite(R3valvula, HIGH);
digitalWrite(R4combustion, HIGH);
pinMode(gndPin, OUTPUT);
digitalWrite(gndPin, LOW);
pinMode(vccPin, OUTPUT);
digitalWrite(vccPin, HIGH);
}
void loop() {
if (millis() - intervalolecturas > 3000UL) {
temp = thermocouple.readCelsius();
intervalolecturas = millis();
switch (estados) {
case INICIO:
case FILTRO:
case VENTILADOR:
case VALVULA:
case COMBUSTION:
if (millis() - tiempofiltro <= intervalfiltro) {
bool estadosensorfiltro = digitalRead (sensorfiltro);
if (estadosensorfiltro == HIGH)
digitalWrite(R1filtro, LOW);
if (estadosensorfiltro == LOW)
digitalWrite(R1filtro, HIGH);
}
break;
if (millis() - tiempoventilador >= intervalventilador) {
bool estadosensorventilador = digitalRead (sensorventilador);
if (estadosensorventilador == HIGH)
digitalWrite(R2ventilador, LOW);
else
digitalWrite(R2ventilador, HIGH);
}
break;
if (millis() - tiempovalvula >= intervalvalvula) {
bool estadosensorvalvula = digitalRead (sensorvalvula);
if (estadosensorvalvula == HIGH){
digitalWrite(R3valvula, LOW);
} else{
digitalWrite(R3valvula, HIGH);
}
}
break;
if (millis() - tiempocombustion >= intervalcombustion) {
bool estadosensorcombustion = digitalRead (sensorcombustion);
if (estadosensorcombustion == HIGH)
digitalWrite(R4combustion, LOW);
else
digitalWrite(R4combustion, HIGH);
}
break;
}
}
}
Esta es un intento de meterlo en un switch, case, break, y ya no paso del renglón 82, el código que si hace la secuencia solo reconoce los sensores de forma individual, y tiene que ser secuencial, si no esta en HIGH filtro no debe continuar la secuencia de ventilador, y así sucesivamente para todos los reles, el PLC usaba thermistores para controlar la temperatura, ahora sera con una sonda tipo K, el PLC se controlaba con una pantalla que se encuentra a 30 mts. del equipo, eso no va a poder ser con el mega.
Se alimenta con 12vdc, gnd, Rnet+ y Rnet- ni idea como opera ese tipo de comunicación, es un cable blindad con 4 hilos, 30 mts. de distancia del equipo, dentro de esa caja, también esta uno de los thermistores, que controla el apagado y encendido del equipo, se ajusta la temperatura que le programe con los botones no tiene histeresis se vuelve a encender 2 grados por debajo del setpoint.