Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* O PROJETO TEM COMO FUNÇÃO CONTROLAR UM SISTEMA DE OSMOSE REVERSA CONSTITUÍDA POR 3 BOMBAS, ONDE OS CONTATOS AUXILIARES
- DOS SEUS DISJUNTORES DEVEM MANDAR UM SINAL PARA O ARDUINO, O QUAL IRÁ VERIFICAR SE A BOMBA ESTÁ EM FUNCIONAMENTO, CASO
- O ARDUINO NÃO RECEBA O SINAL, O DISPLAY INDICARÁ QUE DETERMINADA BOMBA PAROU DE FUNCIONAR. HÁ TAMBÉM DOIS SENSORES BÓIA
- QUE INDICARÁ O NÍVEL DO TANQUE. */
- #include <LiquidCrystal.h>
- LiquidCrystal lcd(3, 4, 5, 6, 7, 8);
- // DEFINIÇÃO DE ENTRADAS E SAÍDAS DIGITAIS
- #define SinalBombaOR 9 // ENTRADA DE SINAL DO CONTATO AUXILIAR DO DISJUNTOR DA BOMBA OR
- #define SinalBombaPressOR 10 // ENTRADA DE SINAL DO CONTATO AUXILIAR DO DISJUNTOR DA BOMBA DE PRESSURIZAÇÃO OR
- #define SinalBombaPressCME 11 // ENTRADA DE SINAL DO CONTATO AUXILIAR DO DISJUNTOR DA BOMBA DE PRESSURIZAÇÃO CME
- #define SinalBoiaInferior 12 // ENTRADA DE SINAL DA BOIA INFERIOR
- #define SinalBoiaSuperior 13 // ENTRADA DE SINAL DA BOIA SUPERIOR
- #define Sirene A0 // SAÍDA DE SINAL PARA ACIONAR O RELÉ SINALIZADOR DE SOM
- #define LuzVermelha A1 // SAÍDA DE SINAL PARA ACIONAR O RELÉ SINALIZADOR DA COR VERMELHA
- #define LuzAmarela A2 // SAÍDA DE SINAL PARA ACIONAR O RELÉ SINALIZADOR DA COR AMARELA
- #define LuzVerde A3 // SAÍDA DE SINAL PARA ACIONAR O RELÉ SINALIZADOR DA COR VERDE
- // VARIAVÉIS GLOBAIS
- float 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 // 00 = 0
- int i = 0; // VARIÁVEL PARA SEGUNDOS
- int comando = 0; // VARIÁVEL PARA O COMANDO A SER EXECUTADO
- int leituraBombaOR = 0; // VARIAVEL PARA ARMAZENAMENTO DE ESTADO
- int leituraPressOR = 0; // VARIAVEL PARA ARMAZENAMENTO DE ESTADO
- int leituraPressCME = 0; // VARIAVEL PARA ARMAZENAMENTO DE ESTADO
- int leituraBoiaInferior = 0; // VARIAVEL PARA ARMAZENAMENTO DE ESTADO
- int leituraBoiaSuperior = 0; // VARIAVEL PARA ARMAZENAMENTO DE ESTADO
- //-------------------------------------------------------------------------
- void setup()
- {
- // PORTAS DE ENTRADA DE SINAL
- Serial.begin(9600);
- pinMode(SinalBombaOR, INPUT_PULLUP); // PULLUP INVERTE A LOGICA DA PORTA
- pinMode(SinalBombaPressOR, INPUT_PULLUP); // PULLUP INVERTE A LOGICA DA PORTA
- pinMode(SinalBombaPressCME, INPUT_PULLUP); // PULLUP INVERTE A LOGICA DA PORTA
- pinMode(SinalBoiaInferior, INPUT_PULLUP); // PULLUP INVERTE A LOGICA DA PORTA
- pinMode(SinalBoiaSuperior, 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)
- // analogReference(DEFAULT); // Desnecessario para este projeto
- pinMode(Sirene, OUTPUT);
- pinMode(LuzVermelha, OUTPUT);
- pinMode(LuzAmarela, OUTPUT);
- pinMode(LuzVerde, OUTPUT);
- // CONFIGURA OS RELÉS PARA FICAREM INICIALMENTE DESLIGADOS
- digitalWrite(Sirene, HIGH);
- digitalWrite(LuzVermelha, HIGH);
- digitalWrite(LuzAmarela, HIGH);
- digitalWrite(LuzVerde, HIGH);
- // INICIALIZAÇÃO DO LCD
- lcd.begin(16, 2);
- lcd.setCursor(0, 0);
- lcd.print("Monitoramento da");
- lcd.setCursor(1, 1);
- lcd.print("Osmose Reversa");
- delay(3000);
- }
- //-------------------------------------------------------------------------
- void tela_vazao ()
- {
- contaPulso = 0; // ZERA A VARIÁVEL
- sei(); // HABILITA A INTERRUPÇÃO
- delay (1000); // AGUARDA 1 SEGUNDO
- cli(); // DESABILITA A INTERRUPÇÃO
- vazao = contaPulso / 5.5; // CONVERTE PARA L/MIN
- media = media + vazao; // SOMA A VAZÃO PARA CÁLCULO DA MEDIA
- i++;
- lcd.setCursor(4, 0);
- lcd.print("Vazao OR");
- lcd.setCursor(3, 1);
- lcd.print(vazao); // ESCREVE NO DISPLAY O VALOR DA VAZAO
- lcd.print(" L/min "); // ESCREVE L/MIN
- delay(3000);
- }
- //-------------------------------------------------------------------------
- void loop ()
- {
- // LEITURA DOS SINAIS NAS PORTAS DIGITAIS(D9 À D13)
- leituraBombaOR = digitalRead(SinalBombaOR);
- leituraPressOR = digitalRead(SinalBombaPressOR);
- leituraPressCME = digitalRead(SinalBombaPressCME);
- leituraBoiaInferior = digitalRead(SinalBoiaInferior);
- leituraBoiaSuperior = digitalRead(SinalBoiaSuperior);
- /*
- bombaOR pressOR pressCME inferior superior Switch
- HIGH LOW LOW LOW LOW CASO 0 Bomba OR
- LOW HIGH LOW LOW LOW CASO 1 Bomba Press OR
- LOW LOW HIGH LOW LOW CASO 2 Bomba Press CME
- LOW LOW LOW HIGH HIGH CASO 3 TANQUE VAZIO ??
- LOW LOW LOW LOW HIGH CASO 4 TANQUE ENCHENDO
- LOW LOW LOW LOW LOW CASO 5 TANQUE CHEIO
- */
- Serial.println(leituraBombaOR);
- Serial.println(leituraPressOR);
- Serial.println(leituraPressCME);
- Serial.println(leituraBoiaInferior);
- Serial.println(leituraBoiaSuperior);
- Serial.println(" ");
- if (leituraBombaOR == HIGH) // SE O SINAL DA BOMBA OR ESTIVER 0VCC
- {
- comando = 0; // EXECUTA O CASO 0
- }
- if (leituraPressOR == HIGH ) // SE O SINAL DA BOMBA DE PRESSURIZAÇÃO OR ESTIVER 0VVC
- {
- comando = 1; // EXECUTA O CASO 1
- }
- if (leituraPressCME == HIGH) // SE O SINAL DA BOMBA DE PRESSURIZAÇÃO CME ESTIVER 0VCC
- {
- comando = 2; // EXECUTA O CASO 2
- }
- if (leituraBoiaInferior == HIGH ) // SE O SINAL DA BOIA INFERIOR E SUPERIOR ESTIVEREM BAIXO
- {
- comando = 3; // EXECUTA O CASO 3
- }
- if (leituraBombaOR == LOW && leituraPressOR == LOW && leituraPressCME == LOW && leituraBoiaInferior == LOW && leituraBoiaSuperior == LOW) // SE O SINAL DA BOIA SUPERIOR ESTIVER BAIXO
- {
- comando = 4; // EXECUTA O CASO 4
- }
- if ( leituraBoiaSuperior == HIGH) // SE O SINAL DA BOIA INFERIOR E SUPERIOR ESTIVEREM ALTO
- {
- comando = 5; // EXECUTA O CASO 5
- }
- Serial.println(comando);
- Serial.println(" ");
- switch (comando) // TROCA DOS CASOS
- {
- case 0:
- comando = 6; // COMANDO 0 EXECUTAD0
- digitalWrite(Sirene, LOW); // SIRENE ALARMA INDICANDO FALHA NO SISTEMA DA OSMOSE
- digitalWrite(LuzVermelha, LOW); // LUZ VERMELHA INDICANDO FALHA NO SISTEMA DA OSMOSE
- lcd.clear(); // LIMPA O DISPLAY E, EM SEGUIDA, MOSTRA A FALHA DO SISTEMA
- lcd.setCursor (3, 0);
- lcd.print ("Defeito na");
- lcd.setCursor (4, 1);
- lcd.print ("Bomba OR");
- delay (1000);
- break;
- case 1:
- comando = 6; // COMANDO 1 EXECUTADO
- digitalWrite(Sirene, LOW); // SIRENE ALARMA INDICANDO FALHA NO SISTEMA DA OSMOSE
- digitalWrite(LuzVermelha, LOW); // LUZ VERMELHA INDICANDO FALHA NO SISTEMA DA OSMOSE
- lcd.clear(); // LIMPA O DISPLAY E, EM SEGUIDA, MOSTRA A FALHA DO SISTEMA
- lcd.setCursor (3, 0);
- lcd.print ("Defeito na");
- lcd.setCursor (1, 1);
- lcd.print ("Bomba Press OR");
- delay (1000);
- break;
- case 2:
- comando = 6; // COMANDO 2 EXECUTADO
- digitalWrite(Sirene, LOW); // SIRENE ALARMA INDICANDO FALHA NO SISTEMA DA OSMOSE
- digitalWrite(LuzVermelha, LOW); // LUZ VERMELHA INDICANDO FALHA NO SISTEMA DA OSMOSE
- lcd.clear(); // LIMPA O DISPLAY E, EM SEGUIDA, MOSTRA A FALHA DO SISTEMA
- lcd.setCursor (3, 0);
- lcd.print ("Defeito na");
- lcd.setCursor (0, 1);
- lcd.print ("Bomba Press CME");
- delay (1000);
- break;
- case 3:
- comando = 6; // COMANDO 3 EXECUTADO
- digitalWrite(Sirene, LOW); // SIRENE ALARMA INDICANDO FALHA NO SISTEMA DA OSMOSE
- digitalWrite(LuzVermelha, LOW); // LUZ VERMELHA INDICANDO FALHA NO SISTEMA DA OSMOSE
- lcd.clear(); // LIMPA O DISPLAY E, EM SEGUIDA, MOSTRA A FALHA DO SISTEMA
- lcd.setCursor (4, 0);
- lcd.print ("Atencao");
- lcd.setCursor (2, 1);
- lcd.print ("Tanque Vazio");
- delay (1000);
- break;
- case 4:
- comando = 6; // COMANDO 4 EXECUTADO
- digitalWrite(Sirene, HIGH); // SIRENE DESATIVADA INDICANDO QUE NÃO HÁ FALHAS NO SISTEMA DA OSMOSE
- digitalWrite(LuzAmarela, LOW); // LUZ AMARELA INDICA QUE O TANQUE DE ÁGUA ESTÁ ENCHENDO
- lcd.clear(); // LIMPA O DISPLAY E, EM SEGUIDA, MOSTRA A INFORMAÇÃO DO SISTEMA
- lcd.setCursor (4, 0);
- lcd.print ("Atencao");
- lcd.setCursor (0, 1);
- lcd.print ("Tanque Enchendo");
- delay (1000);
- break;
- case 5:
- comando = 6; // COMANDO 5 EXECUTADO
- digitalWrite(Sirene, HIGH); // SIRENE DESATIVADA INDICANDO QUE NÃO HÁ FALHAS NO SISTEMA DA OSMOSE
- digitalWrite(LuzVerde, LOW); // LUZ VERDE INDICA QUE O TANQUE DE ÁGUA ESTÁ CHEIO
- lcd.clear(); // LIMPA O DISPLAY E, EM SEGUIDA, MOSTRA A INFORMAÇÃO DO SISTEMA
- lcd.setCursor (4, 0);
- lcd.print ("Atencao");
- lcd.setCursor (2, 1);
- lcd.print ("Tanque Cheio");
- delay (1000);
- lcd.clear();
- tela_vazao(); // ESCREVE O VALOR DA VAZAO
- delay(1000);
- break;
- case 6:
- break;
- }
- } // FIM DO VOID LOOP
- //-------------------------------------------------------------------------
- void incpulso ()
- {
- contaPulso++; // INCREMENTA A VARIÁVEL DE PULSOS
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement