Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <Wire.h>
- #include <LiquidCrystal_I2C.h>
- // INICIALIZA O DISPLAY NO ENDEREÇO 0X27
- LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
- // DEFINIÇÃO DE ENTRADAS E SÁIDAS DIGITAIS
- #define SinalPressostato 4 // ENTRADA DE SINAL DO CONTATO AUXILIAR DO PRESSOSTATO
- #define SinalBombaPress1 5 // ENTRADA DE SINAL DO CONTATO AUXILIAR DO DISJUNTOR DA BOMBA DE PRESSURIZAÇÃO 1
- #define SinalBombaPress2 6 // ENTRADA DE SINAL DO CONTATO AUXILIAR DO DISJUNTOR DA BOMBA DE PRESSURIZAÇÃO 2
- #define SinalBombaOR 7 // ENTRADA DE SINAL DO CONTATO AUXILIAR DO DISJUNTOR DA BOMBA OR
- #define SinalModoOperacao 8 // ENTRADA DE SINAL DO CONTATO DA CHAVE DO MODO DE OPERAÇÃO
- #define SinalFiltroAreia 9 // ENTRADA DE SINAL DO CONTATO AUXILIAR DO FILTRO DE AREIA
- #define SinalFiltroAbrandador 10 // ENTRADA DE SINAL DO CONTATO AUXILIAR DO FILTRO ABRANDADOR
- #define RelePress1 A0 // SAÍDA DE SINAL PARA ACIONAR O RELÉ DA BOMBA DE PRESSURIZAÇÃO 1
- #define RelePress2 A1 // SAÍDA DE SINAL PARA ACIONAR O RELÉ DA BOMBA DE PRESSURIZAÇÃO 2
- #define ReleBombaOR A2 // SAÍDA DE SINAL PARA ACIONAR O RELÉ DA BOMBA OR
- #define ReleValvulaAgua A3 // SAÍDA DE SINAL PARA ACIONAR O RELÉ DA VÁLVULA DE ENTRADA D'AGUA
- #define ReleAutoFlush 11 // SAÍDA DE SINAL PARA ACIONAR O RELÉ DA VÁLVULA DE AUTO FLUSH
- #define ReleStandBy 12 // SAÍDA DE SINAL PARA ACIONAR O RELÉ DA VÁLVULA DE STANDBY
- // VARIAVÉIS GLOBAIS PARA USO NO FLUXO DE ÁGUA
- float valor_vazao = 0; // VARIÁVEL PARA ARMAZENAR O VALOR EM L/MIN
- float media = 0; // VARIÁVEL PARA FAZER A MEDIA DA VAZAO
- float Litros = 0; // VARIÁVEL PARA A QUANTIDADE DE ÁGUA
- float MiliLitros = 0; // VARIÁVEL PARA CONVERSÃO
- int contaPulso; // VARIÁVEL PARA A QUANTIDADE DE PULSOS
- int Min = 0; // VARIÁVEL PARA MINUTOS
- int i = 0; // VARIÁVEL PARA SEGUNDOS
- bool mostra = false; // LIBERA TELA DE FLUXO
- bool flag = false; // CONTROLE PARA EVITAR REPETIÇÃO DO DISPLAY
- unsigned long tempo = 0; // TEMPO DE millis()
- unsigned long ciclo = 500; // TEMPO DE LIBERAÇÃO DO DISPLAY
- // VARIAVÉIS PARA MODO DE OPERAÇÃO
- int ModoOperacao = 0; // VARIÁVEL PARA ARMAZENAR O MODO DE OPERAÇÃO AUTOMATICO
- void setup() {
- // INICIALIZAÇÃO DA PORTA SERIAL E TEMPO
- Serial.begin(9600);
- tempo = millis();
- // PORTAS DE ENTRADA DE SINAL
- pinMode(SinalPressostato, INPUT_PULLUP); // PULLUP INVERTE A LOGICA DA PORTA
- pinMode(SinalBombaPress1, INPUT_PULLUP); // PULLUP INVERTE A LOGICA DA PORTA
- pinMode(SinalBombaPress2, INPUT_PULLUP); // PULLUP INVERTE A LOGICA DA PORTA
- pinMode(SinalBombaOR, INPUT_PULLUP); // PULLUP INVERTE A LOGICA DA PORTA
- pinMode(SinalModoOperacao, INPUT_PULLUP); // PULLUP INVERTE A LOGICA DA PORTA
- pinMode(SinalFiltroAreia, INPUT_PULLUP); // PULLUP INVERTE A LOGICA DA PORTA
- pinMode(SinalFiltroAbrandador, INPUT_PULLUP); // PULLUP INVERTE A LOGICA DA PORTA
- pinMode(2, INPUT); // ENTRADA DO PULSO DO SENSOR DE VAZAO
- attachInterrupt(0, incpulso, RISING); // CONFIGURA O PINO 2(INTERRUPÇÃO 0)
- // PORTAS DE SAÍDA DE SINAL PARA ACIONAMENTO DO RELÉ (SE ATIVA NO ESTADO LOW)
- pinMode(RelePress1, OUTPUT);
- pinMode(RelePress2, OUTPUT);
- pinMode(ReleBombaOR, OUTPUT);
- pinMode(ReleValvulaAgua, OUTPUT);
- pinMode(ReleAutoFlush, OUTPUT);
- pinMode(ReleStandBy, OUTPUT);
- // CONFIGURA OS RELÉS PARA FICAREM INICIALMENTE DESLIGADOS
- digitalWrite(RelePress1, HIGH);
- digitalWrite(RelePress2, HIGH);
- digitalWrite(ReleBombaOR, HIGH);
- digitalWrite(ReleValvulaAgua, HIGH);
- digitalWrite(ReleAutoFlush, HIGH);
- digitalWrite(ReleStandBy, HIGH);
- }
- void rotina_fluxo()
- {
- mostra = true; // TRAVA A TELA
- valor_vazao = (contaPulso / 5.5) / 2 ; // CONVERTE PARA L/MIN / 2 DEVIDO OS 500MS UTILIZADO NO CICLO
- lcd.clear();
- lcd.setBacklight(HIGH);
- lcd.setCursor(1, 0);
- lcd.print("OR Produzindo");
- lcd.setCursor(3, 1);
- lcd.print(valor_vazao); // ESCREVE NO DISPLAY O VALOR DA VAZAO
- lcd.print(" L/min "); // ESCREVE L/MIN
- contaPulso = 0; // ZERA A VARIÁVEL
- }
- void rotina_baixo_fluxo()
- {
- mostra = true; // TRAVA A TELA
- valor_vazao = (contaPulso / 5.5) / 2 ; // CONVERTE PARA L/MIN / 2 DEVIDO OS 500MS UTILIZADO NO CICLO
- lcd.clear();
- lcd.setBacklight(HIGH);
- lcd.setCursor(1, 0);
- lcd.print("Baixa Producao");
- lcd.setCursor(3, 1);
- lcd.print(valor_vazao); // ESCREVE NO DISPLAY O VALOR DA VAZAO
- lcd.print(" L/min "); // ESCREVE L/MIN
- contaPulso = 0; // ZERA A VARIÁVEL
- }
- void rotina_manutencao_filtros() // AS BOMBAS DE PRESSURIZAÇÃO NÃO PODEM SER LIGADAS AO MESMO TEMPO, E DEVEM SER ALTERNADAS EM CADA DIA.
- {
- digitalWrite(RelePress1, LOW); // FALTA DETERMINAR QUANDO SERÁ LIGADA A BOMBA PRESSURIZAÇÃO 1
- digitalWrite(RelePress2, LOW); // FALTA DETERMINAR QUANDO SERÁ LIGADA A BOMBA PRESSURIZAÇÃO 2
- digitalRead(SinalFiltroAreia); // VERIFICA O ESTADO DO FILTRO DE AREIA
- digitalRead(SinalFiltroAbrandador);// VERIFICA O ESTADO DO FILTRO ABRANDADOR
- } // FIM DA ROTINA DE MANUTENÇAO DOS FILTROS
- void rotina_osmose_em_producao()
- {
- lcd.clear();
- lcd.setBacklight(HIGH);
- lcd.setCursor(0, 0);
- lcd.print("Monitoramento da");
- lcd.setCursor(1, 1);
- lcd.print("Osmose Reversa");
- digitalWrite(RelePress1, LOW); // FALTA DETERMINAR QUANDO SERÁ LIGADA A BOMBA PRESSURIZAÇÃO 1
- digitalWrite(RelePress2, LOW); // FALTA DETERMINAR QUANDO SERÁ LIGADA A BOMBA PRESSURIZAÇÃO 2
- if (SinalPressostato == LOW) // SE O CONTATO DO PRESSOSTATO ESTIVER FECHADO, A OSMOSE SEGUE EM PRODUÇÃO
- {
- digitalWrite(ReleValvulaAgua, LOW);// LIGA A VÁLVULA DE ENTRADA D'AGUA
- digitalWrite(ReleBombaOR, LOW); // LIGA A BOMBA OR
- digitalRead(RelePress1); // VERIFICA O ESTADO DA BOMBA DE PRESSURIZAÇÃO 1
- digitalRead(RelePress2); // VERIFICA O ESTADO DA BOMBA DE PRESSURIZAÇÃO 2
- digitalRead(valor_vazao); // VERIFICA SE EXISTE FLUXO DE ÁGUA TRATADA
- if (valor_vazao != 0) // SE HÁ FLUXO DE ÁGUA TRATADA, CHAMA A ROTINA FLUXO, INDICANDO QUE A OSMOSE ESTÁ PRODUZINDO CORRETAMENTE
- {
- void rotina_fluxo();
- }
- if (valor_vazao == 0) // SE NÃO HÁ FLUXO DE ÁGUA TRATADA, CHAMA A ROTINA DE BAIXO FLUXO, INDICANDO QUE A OSMOSE NÃO ESTÁ PRODUZINDO
- {
- void rotina_baixo_fluxo();
- }
- digitalRead(SinalFiltroAreia); // VERIFICA O ESTADO DO FILTRO DE AREIA
- digitalRead(SinalFiltroAbrandador);// VERIFICA O ESTADO DO FILTRO ABRANDADOR
- if (SinalFiltroAreia == LOW || SinalFiltroAbrandador == LOW) // SE ALGUM DOS FILTROS ESTIVER ATIVO, A OSMOSE ENTRARÁ NA ROTINA DE MANUTENÇAO DOS FILTROS
- {
- void rotina_manutencao_filtros();
- }
- }
- digitalRead(SinalModoOperacao); // VERIFICA O ESTADO DO MODO DE OPERACAO
- if (SinalPressostato == HIGH)
- {
- lcd.clear();
- lcd.setBacklight(HIGH);
- lcd.setCursor(4, 0);
- lcd.print("Atencao");
- lcd.setCursor(2, 1);
- lcd.print("Falta d'agua");
- digitalWrite(ReleValvulaAgua, HIGH);// DESLIGA A VÁLVULA DE ENTRADA D'AGUA
- digitalWrite(ReleBombaOR, HIGH); // DESLIGA A BOMBA OR
- }
- } // FIM DA ROTINA DE OSMOSE EM PRODUÇÃO
- void rotina_standby()
- {
- delay(3600000); // AGUARDA 1 HORA PARA ENTRAR EM PRODUÇÃO
- void rotina_osmose_em_producao();
- delay(600000); // PRODUZ DURANTE 10 MINUTOS
- digitalRead(SinalModoOperacao); // VERIFICA SE A CHAVE ENTROU NO MODO AUTOMÁTICO
- } // FIM DA ROTINA DE STANDBY
- void loop() {
- // REALIZA A LEITURA DO MODO DE OPERAÇÃO
- ModoOperacao = digitalRead(SinalModoOperacao);
- if ((millis() - tempo) >= ciclo) // TEMPO DE DISPLAY
- {
- tempo = millis(); // RECUPERA millis()
- flag = false; // LIBERA DISPLAY
- mostra = false; // LIBERA TELA FLUXO
- }
- if (ModoOperacao == LOW); // SE O SINAL DO MODO DE OPERACAO ESTIVER ATIVO, A OSMOSE USARÁ A ROTINA DA OSMOSE EM OPERAÇÃO NORMAL
- {
- void rotina_osmose_em_producao();
- }
- if (ModoOperacao == HIGH); // SE O SINAL DO MODO DE OPERACAO ESTIVER INATIVO, A OSMOSE USARÁ A ROTINA NO MODO STANDBY
- {
- void rotina_standby();
- }
- } // FIM DO VOID LOOP
- void incpulso ()
- {
- contaPulso++; // INCREMENTA A VARIÁVEL DE PULSOS
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement