Advertisement
RuiViana

OsmoseV05.ino

Nov 27th, 2018
356
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 10.01 KB | None | 0 0
  1. /* O PROJETO TEM COMO FUNÇÃO CONTROLAR UM SISTEMA DE OSMOSE REVERSA CONSTITUÍDA POR 3 BOMBAS, ONDE OS CONTATOS AUXILIARES
  2.   DOS SEUS DISJUNTORES DEVEM MANDAR UM SINAL PARA O ARDUINO, O QUAL IRÁ VERIFICAR SE A BOMBA ESTÁ EM FUNCIONAMENTO, CASO
  3.   O ARDUINO NÃO RECEBA O SINAL, O DISPLAY INDICARÁ QUE DETERMINADA BOMBA PAROU DE FUNCIONAR. HÁ TAMBÉM DOIS SENSORES BÓIA
  4.   QUE INDICARÁ O NÍVEL DO TANQUE.  */
  5.  
  6. #include <LiquidCrystal.h>
  7. LiquidCrystal lcd(3, 4, 5, 6, 7, 8);
  8.  
  9. // DEFINIÇÃO DE ENTRADAS E SAÍDAS DIGITAIS
  10. #define SinalBombaOR 9        // ENTRADA DE SINAL DO CONTATO AUXILIAR DO DISJUNTOR DA BOMBA OR
  11. #define SinalBombaPressOR 10  // ENTRADA DE SINAL DO CONTATO AUXILIAR DO DISJUNTOR DA BOMBA DE PRESSURIZAÇÃO OR
  12. #define SinalBombaPressCME 11 // ENTRADA DE SINAL DO CONTATO AUXILIAR DO DISJUNTOR DA BOMBA DE PRESSURIZAÇÃO CME
  13. #define SinalBoiaInferior 12  // ENTRADA DE SINAL DA BOIA INFERIOR
  14. #define SinalBoiaSuperior 13  // ENTRADA DE SINAL DA BOIA SUPERIOR
  15. #define Sirene A0             // SAÍDA DE SINAL PARA ACIONAR O RELÉ SINALIZADOR DE SOM
  16. #define LuzVermelha A1        // SAÍDA DE SINAL PARA ACIONAR O RELÉ SINALIZADOR DA COR VERMELHA
  17. #define LuzAmarela A2         // SAÍDA DE SINAL PARA ACIONAR O RELÉ SINALIZADOR DA COR AMARELA
  18. #define LuzVerde A3           // SAÍDA DE SINAL PARA ACIONAR O RELÉ SINALIZADOR DA COR VERDE
  19.  
  20. // VARIAVÉIS GLOBAIS
  21. float vazao = 0;              // VARIÁVEL PARA ARMAZENAR O VALOR EM L/MIN
  22. float media = 0;              // VARIÁVEL PARA FAZER A MEDIA DA VAZAO
  23. float Litros = 0;             // VARIÁVEL PARA A QUANTIDADE DE ÁGUA
  24. float MiliLitros = 0;         // VARIÁVEL PARA CONVERSÃO
  25. int contaPulso;               // VARIÁVEL PARA A QUANTIDADE DE PULSOS
  26. int Min = 0;                  // VARIÁVEL PARA MINUTOS  // 00 = 0
  27. int i = 0;                    // VARIÁVEL PARA SEGUNDOS
  28. int comando = 0;              // VARIÁVEL PARA O COMANDO A SER EXECUTADO
  29. int leituraBombaOR = 0;       // VARIAVEL PARA ARMAZENAMENTO DE ESTADO
  30. int leituraPressOR = 0;       // VARIAVEL PARA ARMAZENAMENTO DE ESTADO
  31. int leituraPressCME = 0;      // VARIAVEL PARA ARMAZENAMENTO DE ESTADO
  32. int leituraBoiaInferior = 0;  // VARIAVEL PARA ARMAZENAMENTO DE ESTADO
  33. int leituraBoiaSuperior = 0;  // VARIAVEL PARA ARMAZENAMENTO DE ESTADO
  34. //-------------------------------------------------------------------------
  35. void setup()
  36. {
  37.   // PORTAS DE ENTRADA DE SINAL
  38.   Serial.begin(9600);
  39.   pinMode(SinalBombaOR, INPUT_PULLUP);        // PULLUP INVERTE A LOGICA DA PORTA
  40.   pinMode(SinalBombaPressOR, INPUT_PULLUP);   // PULLUP INVERTE A LOGICA DA PORTA
  41.   pinMode(SinalBombaPressCME, INPUT_PULLUP);  // PULLUP INVERTE A LOGICA DA PORTA
  42.   pinMode(SinalBoiaInferior, INPUT_PULLUP);   // PULLUP INVERTE A LOGICA DA PORTA
  43.   pinMode(SinalBoiaSuperior, INPUT_PULLUP);   // PULLUP INVERTE A LOGICA DA PORTA
  44.   pinMode(2, INPUT);                          // ENTRADA DO PULSO DO SENSOR DE VAZAO
  45.   attachInterrupt(0, incpulso, RISING);       // CONFIGURA O PINO 2(INTERRUPÇÃO 0)
  46.  
  47.   // PORTAS DE SAÍDA DE SINAL PARA ACIONAMENTO DO RELÉ (SE ATIVA NO ESTADO LOW)
  48.   //  analogReference(DEFAULT);   // Desnecessario para este projeto
  49.   pinMode(Sirene, OUTPUT);
  50.   pinMode(LuzVermelha, OUTPUT);
  51.   pinMode(LuzAmarela, OUTPUT);
  52.   pinMode(LuzVerde, OUTPUT);
  53.  
  54.   // CONFIGURA OS RELÉS PARA FICAREM INICIALMENTE DESLIGADOS
  55.   digitalWrite(Sirene, HIGH);
  56.   digitalWrite(LuzVermelha, HIGH);
  57.   digitalWrite(LuzAmarela, HIGH);
  58.   digitalWrite(LuzVerde, HIGH);
  59.  
  60.   // INICIALIZAÇÃO DO LCD
  61.   lcd.begin(16, 2);
  62.   lcd.setCursor(0, 0);
  63.   lcd.print("Monitoramento da");
  64.   lcd.setCursor(1, 1);
  65.   lcd.print("Osmose Reversa");
  66.   delay(3000);
  67. }
  68. //-------------------------------------------------------------------------
  69. void tela_vazao ()
  70. {
  71.   contaPulso = 0;               // ZERA A VARIÁVEL
  72.   sei();                        // HABILITA A INTERRUPÇÃO
  73.   delay (1000);                 // AGUARDA 1 SEGUNDO
  74.   cli();                        // DESABILITA A INTERRUPÇÃO
  75.   vazao = contaPulso / 5.5;     // CONVERTE PARA L/MIN
  76.   media = media + vazao;        // SOMA A VAZÃO PARA CÁLCULO DA MEDIA
  77.   i++;
  78.   lcd.setCursor(4, 0);
  79.   lcd.print("Vazao OR");
  80.   lcd.setCursor(3, 1);
  81.   lcd.print(vazao);             // ESCREVE NO DISPLAY O VALOR DA VAZAO
  82.   lcd.print(" L/min ");         // ESCREVE L/MIN
  83.   delay(3000);
  84. }
  85. //-------------------------------------------------------------------------
  86. void loop ()
  87. {
  88.   // LEITURA DOS SINAIS NAS PORTAS DIGITAIS(D9 À D13)
  89.   leituraBombaOR = digitalRead(SinalBombaOR);
  90.   leituraPressOR = digitalRead(SinalBombaPressOR);
  91.   leituraPressCME = digitalRead(SinalBombaPressCME);
  92.   leituraBoiaInferior = digitalRead(SinalBoiaInferior);
  93.   leituraBoiaSuperior = digitalRead(SinalBoiaSuperior);
  94.  
  95.   /*
  96.         bombaOR   pressOR  pressCME   inferior   superior   Switch
  97.           HIGH      LOW      LOW        LOW        LOW      CASO 0  Bomba OR
  98.           LOW       HIGH     LOW        LOW        LOW      CASO 1  Bomba Press OR
  99.           LOW       LOW      HIGH       LOW        LOW      CASO 2  Bomba Press CME
  100.           LOW       LOW      LOW        HIGH       HIGH     CASO 3  TANQUE VAZIO ??
  101.           LOW       LOW      LOW        LOW        HIGH     CASO 4  TANQUE ENCHENDO
  102.           LOW       LOW      LOW        LOW        LOW      CASO 5  TANQUE CHEIO
  103.   */
  104.  
  105.   Serial.println(leituraBombaOR);
  106.   Serial.println(leituraPressOR);
  107.   Serial.println(leituraPressCME);
  108.   Serial.println(leituraBoiaInferior);
  109.   Serial.println(leituraBoiaSuperior);
  110.   Serial.println(" ");
  111.  
  112.   if (leituraBombaOR == HIGH) // SE O SINAL DA BOMBA OR ESTIVER 0VCC
  113.   {
  114.     comando = 0;      // EXECUTA O CASO 0
  115.   }
  116.   if (leituraPressOR == HIGH ) // SE O SINAL DA BOMBA DE PRESSURIZAÇÃO OR ESTIVER 0VVC
  117.   {
  118.     comando = 1;      // EXECUTA O CASO 1
  119.   }
  120.   if (leituraPressCME == HIGH) // SE O SINAL DA BOMBA DE PRESSURIZAÇÃO CME ESTIVER 0VCC
  121.   {
  122.     comando = 2;      // EXECUTA O CASO 2
  123.   }
  124.   if (leituraBoiaInferior == HIGH ) // SE O SINAL DA BOIA INFERIOR E SUPERIOR ESTIVEREM BAIXO
  125.   {
  126.     comando = 3;      // EXECUTA O CASO 3
  127.   }
  128.   if (leituraBombaOR == LOW && leituraPressOR == LOW && leituraPressCME == LOW && leituraBoiaInferior == LOW && leituraBoiaSuperior == LOW) // SE O SINAL DA BOIA SUPERIOR ESTIVER BAIXO
  129.   {
  130.     comando = 4;      // EXECUTA O CASO 4
  131.   }
  132.   if ( leituraBoiaSuperior == HIGH) // SE O SINAL DA BOIA INFERIOR E SUPERIOR ESTIVEREM ALTO
  133.   {
  134.     comando = 5;      // EXECUTA O CASO 5
  135.   }
  136.  
  137.   Serial.println(comando);
  138.   Serial.println(" ");
  139.  
  140.   switch (comando)                // TROCA DOS CASOS
  141.   {
  142.     case 0:
  143.       comando = 6;                      // COMANDO 0 EXECUTAD0
  144.       digitalWrite(Sirene, LOW);        // SIRENE ALARMA INDICANDO FALHA NO SISTEMA DA OSMOSE
  145.       digitalWrite(LuzVermelha, LOW);   // LUZ VERMELHA INDICANDO FALHA NO SISTEMA DA OSMOSE
  146.       lcd.clear();                      // LIMPA O DISPLAY E, EM SEGUIDA, MOSTRA A FALHA DO SISTEMA
  147.       lcd.setCursor (3, 0);
  148.       lcd.print ("Defeito na");
  149.       lcd.setCursor (4, 1);
  150.       lcd.print ("Bomba OR");
  151.       delay (1000);
  152.       break;
  153.  
  154.     case 1:
  155.       comando = 6;                      // COMANDO 1 EXECUTADO
  156.       digitalWrite(Sirene, LOW);        // SIRENE ALARMA INDICANDO FALHA NO SISTEMA DA OSMOSE
  157.       digitalWrite(LuzVermelha, LOW);   // LUZ VERMELHA INDICANDO FALHA NO SISTEMA DA OSMOSE
  158.       lcd.clear();                      // LIMPA O DISPLAY E, EM SEGUIDA, MOSTRA A FALHA DO SISTEMA
  159.       lcd.setCursor (3, 0);
  160.       lcd.print ("Defeito na");
  161.       lcd.setCursor (1, 1);
  162.       lcd.print ("Bomba Press OR");
  163.       delay (1000);
  164.       break;
  165.  
  166.     case 2:
  167.       comando = 6;                      // COMANDO 2 EXECUTADO
  168.       digitalWrite(Sirene, LOW);        // SIRENE ALARMA INDICANDO FALHA NO SISTEMA DA OSMOSE
  169.       digitalWrite(LuzVermelha, LOW);   // LUZ VERMELHA INDICANDO FALHA NO SISTEMA DA OSMOSE
  170.       lcd.clear();                      // LIMPA O DISPLAY E, EM SEGUIDA, MOSTRA A FALHA DO SISTEMA
  171.       lcd.setCursor (3, 0);
  172.       lcd.print ("Defeito na");
  173.       lcd.setCursor (0, 1);
  174.       lcd.print ("Bomba Press CME");
  175.       delay (1000);
  176.       break;
  177.  
  178.     case 3:
  179.       comando = 6;                      // COMANDO 3 EXECUTADO
  180.       digitalWrite(Sirene, LOW);        // SIRENE ALARMA INDICANDO FALHA NO SISTEMA DA OSMOSE
  181.       digitalWrite(LuzVermelha, LOW);   // LUZ VERMELHA INDICANDO FALHA NO SISTEMA DA OSMOSE
  182.       lcd.clear();                      // LIMPA O DISPLAY E, EM SEGUIDA, MOSTRA A FALHA DO SISTEMA
  183.       lcd.setCursor (4, 0);
  184.       lcd.print ("Atencao");
  185.       lcd.setCursor (2, 1);
  186.       lcd.print ("Tanque Vazio");
  187.       delay (1000);
  188.       break;
  189.  
  190.     case 4:
  191.       comando = 6;                      // COMANDO 4 EXECUTADO
  192.       digitalWrite(Sirene, HIGH);       // SIRENE DESATIVADA INDICANDO QUE NÃO HÁ FALHAS NO SISTEMA DA OSMOSE
  193.       digitalWrite(LuzAmarela, LOW);    // LUZ AMARELA INDICA QUE O TANQUE DE ÁGUA ESTÁ ENCHENDO
  194.       lcd.clear();                      // LIMPA O DISPLAY E, EM SEGUIDA, MOSTRA A INFORMAÇÃO DO SISTEMA
  195.       lcd.setCursor (4, 0);
  196.       lcd.print ("Atencao");
  197.       lcd.setCursor (0, 1);
  198.       lcd.print ("Tanque Enchendo");
  199.       delay (1000);
  200.       break;
  201.  
  202.     case 5:
  203.       comando = 6;                      // COMANDO 5 EXECUTADO
  204.       digitalWrite(Sirene, HIGH);       // SIRENE DESATIVADA INDICANDO QUE NÃO HÁ FALHAS NO SISTEMA DA OSMOSE
  205.       digitalWrite(LuzVerde, LOW);      // LUZ VERDE INDICA QUE O TANQUE DE ÁGUA ESTÁ CHEIO
  206.       lcd.clear();                      // LIMPA O DISPLAY E, EM SEGUIDA, MOSTRA A INFORMAÇÃO DO SISTEMA
  207.       lcd.setCursor (4, 0);
  208.       lcd.print ("Atencao");
  209.       lcd.setCursor (2, 1);
  210.       lcd.print ("Tanque Cheio");
  211.       delay (1000);
  212.       lcd.clear();
  213.       tela_vazao();                     // ESCREVE O VALOR DA VAZAO
  214.       delay(1000);
  215.       break;
  216.  
  217.     case 6:
  218.       break;
  219.  
  220.  
  221.   }
  222.  
  223. } // FIM DO VOID LOOP
  224. //-------------------------------------------------------------------------
  225. void incpulso ()
  226. {
  227.   contaPulso++;                   // INCREMENTA A VARIÁVEL DE PULSOS
  228. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement