Advertisement
Guest User

SKETCH V.2

a guest
Jan 31st, 2019
146
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 8.77 KB | None | 0 0
  1. #include <Wire.h>
  2. #include <LiquidCrystal_I2C.h>
  3.  
  4. // INICIALIZA O DISPLAY NO ENDEREÇO 0X27
  5. LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
  6.  
  7. // DEFINIÇÃO DE ENTRADAS E SÁIDAS DIGITAIS
  8. #define SinalPressostato 4           // ENTRADA DE SINAL DO CONTATO AUXILIAR DO PRESSOSTATO
  9. #define SinalBombaPress1 5           // ENTRADA DE SINAL DO CONTATO AUXILIAR DO DISJUNTOR DA BOMBA DE PRESSURIZAÇÃO 1
  10. #define SinalBombaPress2 6           // ENTRADA DE SINAL DO CONTATO AUXILIAR DO DISJUNTOR DA BOMBA DE PRESSURIZAÇÃO 2
  11. #define SinalBombaOR 7               // ENTRADA DE SINAL DO CONTATO AUXILIAR DO DISJUNTOR DA BOMBA OR
  12. #define SinalModoOperacao 8          // ENTRADA DE SINAL DO CONTATO DA CHAVE DO MODO DE OPERAÇÃO
  13. #define SinalFiltroAreia 9           // ENTRADA DE SINAL DO CONTATO AUXILIAR DO FILTRO DE AREIA
  14. #define SinalFiltroAbrandador 10     // ENTRADA DE SINAL DO CONTATO AUXILIAR DO FILTRO ABRANDADOR
  15. #define RelePress1 A0                // SAÍDA DE SINAL PARA ACIONAR O RELÉ DA BOMBA DE PRESSURIZAÇÃO 1
  16. #define RelePress2 A1                // SAÍDA DE SINAL PARA ACIONAR O RELÉ DA BOMBA DE PRESSURIZAÇÃO 2
  17. #define ReleBombaOR A2               // SAÍDA DE SINAL PARA ACIONAR O RELÉ DA BOMBA OR
  18. #define ReleValvulaAgua A3           // SAÍDA DE SINAL PARA ACIONAR O RELÉ DA VÁLVULA DE ENTRADA D'AGUA
  19. #define ReleAutoFlush 11             // SAÍDA DE SINAL PARA ACIONAR O RELÉ DA VÁLVULA DE AUTO FLUSH
  20. #define ReleStandBy 12               // SAÍDA DE SINAL PARA ACIONAR O RELÉ DA VÁLVULA DE STANDBY
  21.  
  22. // VARIAVÉIS GLOBAIS PARA USO NO FLUXO DE ÁGUA
  23. float valor_vazao = 0;        // VARIÁVEL PARA ARMAZENAR O VALOR EM L/MIN
  24. float media = 0;              // VARIÁVEL PARA FAZER A MEDIA DA VAZAO
  25. float Litros = 0;             // VARIÁVEL PARA A QUANTIDADE DE ÁGUA
  26. float MiliLitros = 0;         // VARIÁVEL PARA CONVERSÃO
  27. int contaPulso;               // VARIÁVEL PARA A QUANTIDADE DE PULSOS
  28. int Min = 0;                  // VARIÁVEL PARA MINUTOS
  29. int i = 0;                    // VARIÁVEL PARA SEGUNDOS
  30. bool mostra = false;          // LIBERA TELA DE FLUXO
  31. bool flag = false;            // CONTROLE PARA EVITAR REPETIÇÃO DO DISPLAY
  32. unsigned long tempo = 0;      // TEMPO DE millis()
  33. unsigned long ciclo  = 500;   // TEMPO DE LIBERAÇÃO DO DISPLAY
  34.  
  35. // VARIAVÉIS PARA MODO DE OPERAÇÃO
  36. int ModoOperacao = 0;       // VARIÁVEL PARA ARMAZENAR O MODO DE OPERAÇÃO AUTOMATICO
  37.  
  38.  
  39. void setup() {
  40.  
  41.   // INICIALIZAÇÃO DA PORTA SERIAL E TEMPO
  42.   Serial.begin(9600);
  43.   tempo = millis();
  44.  
  45.   // PORTAS DE ENTRADA DE SINAL
  46.   pinMode(SinalPressostato, INPUT_PULLUP);        // PULLUP INVERTE A LOGICA DA PORTA
  47.   pinMode(SinalBombaPress1, INPUT_PULLUP);        // PULLUP INVERTE A LOGICA DA PORTA
  48.   pinMode(SinalBombaPress2, INPUT_PULLUP);        // PULLUP INVERTE A LOGICA DA PORTA
  49.   pinMode(SinalBombaOR, INPUT_PULLUP);            // PULLUP INVERTE A LOGICA DA PORTA
  50.   pinMode(SinalModoOperacao, INPUT_PULLUP);          // PULLUP INVERTE A LOGICA DA PORTA
  51.   pinMode(SinalFiltroAreia, INPUT_PULLUP);        // PULLUP INVERTE A LOGICA DA PORTA
  52.   pinMode(SinalFiltroAbrandador, INPUT_PULLUP);   // PULLUP INVERTE A LOGICA DA PORTA
  53.   pinMode(2, INPUT);                              // ENTRADA DO PULSO DO SENSOR DE VAZAO
  54.   attachInterrupt(0, incpulso, RISING);           // CONFIGURA O PINO 2(INTERRUPÇÃO 0)
  55.  
  56.   // PORTAS DE SAÍDA DE SINAL PARA ACIONAMENTO DO RELÉ (SE ATIVA NO ESTADO LOW)
  57.   pinMode(RelePress1, OUTPUT);
  58.   pinMode(RelePress2, OUTPUT);
  59.   pinMode(ReleBombaOR, OUTPUT);
  60.   pinMode(ReleValvulaAgua, OUTPUT);
  61.   pinMode(ReleAutoFlush, OUTPUT);
  62.   pinMode(ReleStandBy, OUTPUT);
  63.  
  64.   // CONFIGURA OS RELÉS PARA FICAREM INICIALMENTE DESLIGADOS
  65.   digitalWrite(RelePress1, HIGH);
  66.   digitalWrite(RelePress2, HIGH);
  67.   digitalWrite(ReleBombaOR, HIGH);
  68.   digitalWrite(ReleValvulaAgua, HIGH);
  69.   digitalWrite(ReleAutoFlush, HIGH);
  70.   digitalWrite(ReleStandBy, HIGH);
  71.  
  72. }
  73.  
  74. void rotina_fluxo()
  75. {
  76.   mostra = true;                            // TRAVA A TELA
  77.   valor_vazao = (contaPulso / 5.5) / 2 ;    // CONVERTE PARA L/MIN / 2 DEVIDO OS 500MS UTILIZADO NO CICLO
  78.   lcd.clear();
  79.   lcd.setBacklight(HIGH);
  80.   lcd.setCursor(1, 0);
  81.   lcd.print("OR Produzindo");
  82.   lcd.setCursor(3, 1);
  83.   lcd.print(valor_vazao);                   // ESCREVE NO DISPLAY O VALOR DA VAZAO
  84.   lcd.print(" L/min ");                     // ESCREVE L/MIN
  85.   contaPulso = 0;                           // ZERA A VARIÁVEL
  86. }
  87.  
  88. void rotina_baixo_fluxo()
  89. {
  90.   mostra = true;                            // TRAVA A TELA
  91.   valor_vazao = (contaPulso / 5.5) / 2 ;    // CONVERTE PARA L/MIN / 2 DEVIDO OS 500MS UTILIZADO NO CICLO
  92.   lcd.clear();
  93.   lcd.setBacklight(HIGH);
  94.   lcd.setCursor(1, 0);
  95.   lcd.print("Baixa Producao");
  96.   lcd.setCursor(3, 1);
  97.   lcd.print(valor_vazao);                   // ESCREVE NO DISPLAY O VALOR DA VAZAO
  98.   lcd.print(" L/min ");                     // ESCREVE L/MIN
  99.   contaPulso = 0;                           // ZERA A VARIÁVEL
  100. }
  101.  
  102. void rotina_manutencao_filtros()   // AS BOMBAS DE PRESSURIZAÇÃO NÃO PODEM SER LIGADAS AO MESMO TEMPO, E DEVEM SER ALTERNADAS EM CADA DIA.
  103. {
  104.   digitalWrite(RelePress1, LOW);     // FALTA DETERMINAR QUANDO SERÁ LIGADA A BOMBA PRESSURIZAÇÃO 1
  105.   digitalWrite(RelePress2, LOW);     // FALTA DETERMINAR QUANDO SERÁ LIGADA A BOMBA PRESSURIZAÇÃO 2
  106.   digitalRead(SinalFiltroAreia);     // VERIFICA O ESTADO DO FILTRO DE AREIA
  107.   digitalRead(SinalFiltroAbrandador);// VERIFICA O ESTADO DO FILTRO ABRANDADOR
  108.  
  109. } // FIM DA ROTINA DE MANUTENÇAO DOS FILTROS
  110.  
  111. void rotina_osmose_em_producao()
  112. {
  113.   lcd.clear();
  114.   lcd.setBacklight(HIGH);
  115.   lcd.setCursor(0, 0);
  116.   lcd.print("Monitoramento da");
  117.   lcd.setCursor(1, 1);
  118.   lcd.print("Osmose Reversa");
  119.   digitalWrite(RelePress1, LOW);     // FALTA DETERMINAR QUANDO SERÁ LIGADA A BOMBA PRESSURIZAÇÃO 1
  120.   digitalWrite(RelePress2, LOW);     // FALTA DETERMINAR QUANDO SERÁ LIGADA A BOMBA PRESSURIZAÇÃO 2
  121.  
  122.   if (SinalPressostato == LOW)       // SE O CONTATO DO PRESSOSTATO ESTIVER FECHADO, A OSMOSE SEGUE EM PRODUÇÃO
  123.   {
  124.     digitalWrite(ReleValvulaAgua, LOW);// LIGA A VÁLVULA DE ENTRADA D'AGUA
  125.     digitalWrite(ReleBombaOR, LOW);    // LIGA A BOMBA OR
  126.     digitalRead(RelePress1);           // VERIFICA O ESTADO DA BOMBA DE PRESSURIZAÇÃO 1
  127.     digitalRead(RelePress2);           // VERIFICA O ESTADO DA BOMBA DE PRESSURIZAÇÃO 2
  128.     digitalRead(valor_vazao);          // VERIFICA SE EXISTE FLUXO DE ÁGUA TRATADA
  129.  
  130.     if (valor_vazao != 0)              // SE HÁ FLUXO DE ÁGUA TRATADA, CHAMA A ROTINA FLUXO, INDICANDO QUE A OSMOSE ESTÁ PRODUZINDO CORRETAMENTE
  131.     {
  132.       void rotina_fluxo();
  133.     }
  134.     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
  135.     {
  136.       void rotina_baixo_fluxo();
  137.     }
  138.     digitalRead(SinalFiltroAreia);     // VERIFICA O ESTADO DO FILTRO DE AREIA
  139.     digitalRead(SinalFiltroAbrandador);// VERIFICA O ESTADO DO FILTRO ABRANDADOR
  140.  
  141.     if (SinalFiltroAreia == LOW || SinalFiltroAbrandador == LOW) // SE ALGUM DOS FILTROS ESTIVER ATIVO, A OSMOSE ENTRARÁ NA ROTINA DE MANUTENÇAO DOS FILTROS
  142.     {
  143.       void rotina_manutencao_filtros();
  144.     }
  145.   }
  146.   digitalRead(SinalModoOperacao);       // VERIFICA O ESTADO DO MODO DE OPERACAO
  147.  
  148.   if (SinalPressostato == HIGH)
  149.   {
  150.     lcd.clear();
  151.     lcd.setBacklight(HIGH);
  152.     lcd.setCursor(4, 0);
  153.     lcd.print("Atencao");
  154.     lcd.setCursor(2, 1);
  155.     lcd.print("Falta d'agua");
  156.     digitalWrite(ReleValvulaAgua, HIGH);// DESLIGA A VÁLVULA DE ENTRADA D'AGUA
  157.     digitalWrite(ReleBombaOR, HIGH);    // DESLIGA A BOMBA OR
  158.   }
  159.  
  160. } // FIM DA ROTINA DE OSMOSE EM PRODUÇÃO
  161.  
  162. void rotina_standby()
  163. {
  164.   delay(3600000);                    // AGUARDA 1 HORA PARA ENTRAR EM PRODUÇÃO
  165.   void rotina_osmose_em_producao();
  166.   delay(600000);                     // PRODUZ DURANTE 10 MINUTOS
  167.   digitalRead(SinalModoOperacao);       // VERIFICA SE A CHAVE ENTROU NO MODO AUTOMÁTICO
  168.  
  169. } // FIM DA ROTINA DE STANDBY
  170.  
  171. void loop() {
  172.   // REALIZA A LEITURA DO MODO DE OPERAÇÃO
  173.  
  174.   ModoOperacao = digitalRead(SinalModoOperacao);
  175.  
  176.   if ((millis() - tempo) >= ciclo)    // TEMPO DE DISPLAY
  177.   {
  178.     tempo = millis();                   // RECUPERA millis()
  179.     flag = false;                       // LIBERA DISPLAY
  180.     mostra = false;                     // LIBERA TELA FLUXO
  181.   }
  182.   if (ModoOperacao == LOW);           // SE O SINAL DO MODO DE OPERACAO ESTIVER ATIVO, A OSMOSE USARÁ A ROTINA DA OSMOSE EM OPERAÇÃO NORMAL
  183.   {
  184.     void rotina_osmose_em_producao();
  185.   }
  186.   if (ModoOperacao == HIGH);           // SE O SINAL DO MODO DE OPERACAO ESTIVER INATIVO, A OSMOSE USARÁ A ROTINA NO MODO STANDBY
  187.   {
  188.     void rotina_standby();
  189.   }
  190. } // FIM DO VOID LOOP
  191.  
  192. void incpulso ()
  193. {
  194.   contaPulso++;                   // INCREMENTA A VARIÁVEL DE PULSOS
  195. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement