//declaraciones
//entradas analogicas
const byte inSensorTemp = A0;
const byte inSensorNivel = A1;
//salidas digitales
const byte outBomba = 5;
const byte outEV_Vapor = 6;
const byte outEV_Agua = 8;
//entradas digitales
const byte inPulsador = 13; //int externa
const byte inEstadoBomba = 12;
//Constantes
const int H_tanque = 2200; //altura total del
tanque
//variables
byte Temp_Agua_grados = 0; //valores fisicos
int Nivel_Agua_mm = 0; //valores fisicos
bool Bomba_on = false; //valores fisicos
int Nivel_Agua_an = 0; //valores analogicos
int Temp_Agua_an = 0; //valores analogicos
bool emergencia_ON = false;
void setup() {
// put your setup code here, to run once:
pinMode(outBomba, OUTPUT);
pinMode(outEV_Vapor, OUTPUT);
pinMode(outEV_Agua, OUTPUT);
pinMode(inEstadoBomba, INPUT);
//Inicialización de inPulsador como
interrupción externa (detección de ambos
flancos, cuando presiona y cuando suelta)
attachInterrupt(digitalPinToInterrupt(inPulsador
), handler_Pulsador, CHANGE);
//seteos iniciales de salidas
ApagarBomba();
ApagarValvulaVapor();
ApagarValvulaAgua();
//sensado de temperatura inicial
Temp_Agua_an = analogRead(inSensorTemp);
//0v=0unidades - -10 grados
//5v=1024unidades - 200 grados
//proporcional
Temp_Agua_grados = map(Temp_Agua_an,0,1024,-10,
200);
if (Temp_Agua_grados < 70){ //seteo inicial de
valvula de vapor
EncenderValvulaVapor();
}
//inicializo comunicación Serial
[Link](9600);
void loop() {
// put your main code here, to run repeatedly:
//sensado de temperatura
Temp_Agua_an = analogRead(inSensorTemp);
//0v=0unidades - -10 grados
//5v=1024unidades - 200 grados
//proporcional
Temp_Agua_grados = map(Temp_Agua_an,0,1024,-10,
200);
[Link]("Temperatura del agua: "+
String(Temp_Agua_grados));
//sensado de nivel
Nivel_Agua_an = analogRead(inSensorNivel);
//0v=0 - 0 mm
//5v=1024 - 2000 mm
//proporcional
//La altura del nivel de agua corresponde a la
altura de tanque total, menos la altura sensada
por la regla potenciométrica, por
//como trabaja físicamente
Nivel_Agua_mm = H_tanque -
map(Nivel_Agua_an,0,1024,0,2000);
[Link]("Nivel del agua: "+
String(Nivel_Agua_mm));
//si el pulsador se presiona enciende la bomba
if (digitalRead(inPulsador) == 0){
EncenderBomba();
}else{
ApagarBomba();
}
//si el nivel de agua está por debajo de 300mm,
se apaga la bomba
if (Nivel_Agua_mm < 300){
ApagarBomba();
}
//si el contacto bomba no enciende al pulsar,
emitir emergencia
if ((digitalRead(inEstadoBomba) == false) &&
(Bomba_on == true)){
emergencia_ON = true;
}else{
emergencia_ON = false;
}
//si temperatura de agua está por debajo de 50
grados hacer circular vapor
if (Temp_Agua_grados < 50){
EncenderValvulaVapor();
}
//si temperatura de agua está por encima de 90
grados deja de circular vapor
if (Temp_Agua_grados > 90){
ApagarValvulaVapor();
}
//si el nivel de agua está por debajo 350mm,
encender carga de agua
if (Nivel_Agua_mm < 350){
EncenderValvulaAgua();
}
//si el nivel de agua está por encima de
1400mm, detener carga de agua
if (Nivel_Agua_mm > 1400){
ApagarValvulaAgua();
}
delay(1500);
void EncenderBomba(){
digitalWrite(outBomba, LOW); //ENCIENDE LA
BOMBA
Bomba_on = true;
[Link]("Bomba Encendida");
}
void ApagarBomba(){
digitalWrite(outBomba, HIGH);
Bomba_on = false;
[Link]("Bomba Apagada");
}
void EncenderValvulaVapor(){
digitalWrite(outEV_Vapor, HIGH); //HIGH
enciende y LOW apaga
[Link]("EVVapor ON");
}
void ApagarValvulaVapor(){
digitalWrite(outEV_Vapor, LOW); //HIGH
enciende y LOW apaga
[Link]("EVVapor OFF");
}
void EncenderValvulaAgua(){
digitalWrite(outEV_Agua, LOW); //LOW enciende
y HIGH apaga
[Link]("EVAgua ON");
}
void ApagarValvulaAgua(){
digitalWrite(outEV_Agua, HIGH); //LOW
enciende y HIGH apaga
[Link]("EVAgua Off");
}
void handler_Pulsador(){
if (digitalRead(inPulsador) == LOW) {
EncenderBomba();
}else{
ApagarBomba();
}
}