Advertisement
Guest User

Monitoramento Osmose Reversa

a guest
Nov 29th, 2018
116
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 12.38 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; // VARIAVEL PARA ARMAZENAMENTO DE ESTADO
  33. int leituraBoiaSuperior; // 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 INVERTE A LOGICA DA PORTA
  40. pinMode(SinalBombaPressOR, INPUT); // PULLUP INVERTE A LOGICA DA PORTA
  41. pinMode(SinalBombaPressCME, INPUT); // PULLUP INVERTE A LOGICA DA PORTA
  42. pinMode(SinalBoiaInferior, INPUT); // PULLUP INVERTE A LOGICA DA PORTA
  43. pinMode(SinalBoiaSuperior, INPUT); // 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);
  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 incpulso ()
  70. {
  71. contaPulso++; // INCREMENTA A VARIÁVEL DE PULSOS
  72. }
  73.  
  74. void tela_vazao ()
  75. {
  76. contaPulso = 0; // ZERA A VARIÁVEL
  77. sei(); // HABILITA A INTERRUPÇÃO
  78. delay (1000); // AGUARDA 1 SEGUNDO
  79. cli(); // DESABILITA A INTERRUPÇÃO
  80. vazao = contaPulso / 5.5; // CONVERTE PARA L/MIN
  81. media = media + vazao; // SOMA A VAZÃO PARA CÁLCULO DA MEDIA
  82. i++;
  83. lcd.setCursor(1, 0);
  84. lcd.print("OR Produzindo");
  85. lcd.setCursor(3, 1);
  86. lcd.print(vazao); // ESCREVE NO DISPLAY O VALOR DA VAZAO
  87. lcd.print(" L/min "); // ESCREVE L/MIN
  88. delay(3000);
  89. }
  90. void loop ()
  91. {
  92. // LEITURA DOS SINAIS DAS BOMBAS NAS PORTAS DIGITAIS(D9 À D11)
  93. leituraBombaOR = digitalRead(SinalBombaOR);
  94. leituraPressOR = digitalRead(SinalBombaPressOR);
  95. leituraPressCME = digitalRead(SinalBombaPressCME);
  96.  
  97. // LEITURA DOS SINAIS DOS SENSORES DO TANQUE (D12 E D13)
  98. leituraBoiaInferior = digitalRead(SinalBoiaInferior);
  99. leituraBoiaSuperior = digitalRead(SinalBoiaSuperior);
  100.  
  101. // CONDIÇÕES DE FALHAS NAS BOMBAS
  102.  
  103. if (leituraBombaOR == LOW && leituraPressOR == HIGH && leituraPressCME == HIGH) // SE O SINAL DA BOMBA OR ESTIVER 0VCC
  104. {
  105. comando = 0; // EXECUTA O CASO 0
  106. }
  107. else if (leituraBombaOR == HIGH && leituraPressOR == LOW && leituraPressCME == HIGH) // SE O SINAL DA BOMBA DE PRESSURIZAÇÃO OR ESTIVER 0VCC
  108. {
  109. comando = 1; // EXECUTA O CASO 1
  110. }
  111. else if (leituraBombaOR == HIGH && leituraPressOR == HIGH && leituraPressCME == LOW) // SE O SINAL DA BOMBA DE PRESSURIZAÇÃO CME ESTIVER 0VCC
  112. {
  113. comando = 2; // EXECUTA O CASO 2
  114. }
  115. else if (leituraBombaOR == HIGH && leituraPressOR == HIGH && leituraPressCME == HIGH) // SE TODOS OS SINAIS DAS BOMBAS ESTIVEREM 5VCC
  116. {
  117. comando = 3; // EXECUTA O CASO 3
  118. }
  119. else if (leituraBombaOR == LOW && leituraPressOR == LOW && leituraPressCME == LOW) // SE TODOS OS SINAIS DAS BOMBAS ESTIVEREM 0VCC
  120. {
  121. comando = 4; // EXECUTA O CASO 4
  122. }
  123. else if (leituraBombaOR == LOW && leituraPressOR == LOW && leituraPressCME == HIGH) // SE OS SINAIS DA BOMBA OR E BOMBA PRESS OR ESTIVEREM 0VCC
  124. {
  125. comando = 5; // EXECUTA O CASO 5
  126. }
  127. else if (leituraBombaOR == LOW && leituraPressOR == HIGH && leituraPressCME == LOW) // SE OS SINAIS DA BOMBA OR E BOMBA PRESS CME ESTIVEREM 0VCC
  128. {
  129. comando = 6; // EXECUTA O CASO 6
  130. }
  131. else if (leituraBombaOR == HIGH && leituraPressOR == LOW && leituraPressCME == LOW) // SE OS SINAIS DA BOMBA PRESS OR E BOMBA PRESS CME ESTIVEREM 0VCC
  132. {
  133. comando = 7; // EXECUTA O CASO 7
  134. }
  135. switch (comando) // TROCA DOS CASOS
  136. {
  137.  
  138. case 0:
  139. comando = 0; // COMANDO 0 EXECUTAD0
  140. digitalWrite(Sirene, LOW); // SIRENE ALARMA INDICANDO FALHA NO SISTEMA DA OSMOSE
  141. digitalWrite(LuzVermelha, LOW); // LUZ VERMELHA INDICANDO FALHA NO SISTEMA DA OSMOSE
  142. digitalWrite(LuzAmarela, HIGH);
  143. digitalWrite(LuzVerde, HIGH);
  144. lcd.clear(); // LIMPA O DISPLAY E, EM SEGUIDA, MOSTRA A FALHA DO SISTEMA
  145. lcd.setCursor(3, 0);
  146. lcd.print("Defeito na");
  147. lcd.setCursor(4, 1);
  148. lcd.print("Bomba OR");
  149. delay(1000);
  150. break;
  151.  
  152. case 1:
  153. comando = 1; // COMANDO 1 EXECUTADO
  154. digitalWrite(Sirene, LOW); // SIRENE ALARMA INDICANDO FALHA NO SISTEMA DA OSMOSE
  155. digitalWrite(LuzVermelha, LOW); // LUZ VERMELHA INDICANDO FALHA NO SISTEMA DA OSMOSE
  156. digitalWrite(LuzAmarela, HIGH);
  157. digitalWrite(LuzVerde, HIGH);
  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 = 2; // 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. digitalWrite(LuzAmarela, HIGH);
  171. digitalWrite(LuzVerde, HIGH);
  172. lcd.clear(); // LIMPA O DISPLAY E, EM SEGUIDA, MOSTRA A FALHA DO SISTEMA
  173. lcd.setCursor(3, 0);
  174. lcd.print("Defeito na");
  175. lcd.setCursor(0, 1);
  176. lcd.print("Bomba Press CME");
  177. delay(1000);
  178. break;
  179.  
  180. case 3:
  181. comando = 3;// COMANDO 3 EXECUTADO
  182. digitalWrite(Sirene, LOW); // SIRENE ALARMA INDICANDO FALHA NO SISTEMA DA OSMOSE
  183. digitalWrite(LuzVermelha, LOW); // LUZ VERMELHA INDICANDO FALHA NO SISTEMA DA OSMOSE
  184. digitalWrite(LuzAmarela, HIGH);
  185. digitalWrite(LuzVerde, HIGH);
  186. lcd.clear(); // LIMPA O DISPLAY E, EM SEGUIDA, MOSTRA A FALHA DO SISTEMA
  187. lcd.setCursor(4, 0);
  188. lcd.print("Atencao");
  189. lcd.setCursor(2, 1);
  190. lcd.print("Tanque Vazio");
  191. delay(1000);
  192.  
  193. if (leituraBoiaInferior = HIGH && leituraBoiaSuperior == HIGH)
  194. {
  195. digitalWrite(Sirene, HIGH); // SIRENE ALARMA INDICANDO FALHA NO SISTEMA DA OSMOSE
  196. digitalWrite(LuzVermelha, HIGH);
  197. digitalWrite(LuzAmarela, HIGH);
  198. digitalWrite(LuzVerde, LOW); // LUZ VERDE INDICANDO FALHA NO SISTEMA DA OSMOSE
  199. lcd.clear(); // LIMPA O DISPLAY E, EM SEGUIDA, MOSTRA A FALHA DO SISTEMA
  200. lcd.setCursor(4, 0);
  201. lcd.print("Atencao");
  202. lcd.setCursor(1, 1);
  203. lcd.print("OR Produzindo");
  204. delay(1000);
  205. }
  206. if (leituraBoiaInferior = HIGH && leituraBoiaSuperior == LOW)
  207. {
  208. digitalWrite(Sirene, HIGH); // SIRENE ALARMA INDICANDO FALHA NO SISTEMA DA OSMOSE
  209. digitalWrite(LuzVermelha, HIGH);
  210. digitalWrite(LuzAmarela,LOW); // LUZ AMARELA INDICANDO FALHA NO SISTEMA DA OSMOSE
  211. digitalWrite(LuzVerde, HIGH);
  212. lcd.clear(); // LIMPA O DISPLAY E, EM SEGUIDA, MOSTRA A FALHA DO SISTEMA
  213. lcd.setCursor(4, 0);
  214. lcd.print("Atencao");
  215. lcd.setCursor(3, 1);
  216. lcd.print("Tanque 50%");
  217. delay(1000);
  218. }
  219. break;
  220.  
  221. case 4:
  222. comando = 4; // COMANDO 4 EXECUTADO
  223. digitalWrite(Sirene, LOW); // SIRENE ATIVADA INDICANDO QUE HÁ FALHAS NO SISTEMA DA OSMOSE
  224. digitalWrite(LuzVermelha, LOW); // LUZ VERMELHA INDICANDO FALHA NO SISTEMA DA OSMOSE
  225. digitalWrite(LuzAmarela, HIGH);
  226. digitalWrite(LuzVerde, HIGH);
  227. lcd.clear(); // LIMPA O DISPLAY E, EM SEGUIDA, MOSTRA A FALHA DO SISTEMA
  228. lcd.setCursor(3, 0);
  229. lcd.print("Defeito na");
  230. lcd.setCursor(4, 1);
  231. lcd.print("Bomba OR");
  232. delay(1000);
  233. lcd.clear(); // LIMPA O DISPLAY E, EM SEGUIDA, MOSTRA A FALHA DO SISTEMA
  234. lcd.setCursor(3, 0);
  235. lcd.print("Defeito na");
  236. lcd.setCursor(1, 1);
  237. lcd.print("Bomba Press OR");
  238. delay(1000);
  239. lcd.clear(); // LIMPA O DISPLAY E, EM SEGUIDA, MOSTRA A FALHA DO SISTEMA
  240. lcd.setCursor(3, 0);
  241. lcd.print("Defeito na");
  242. lcd.setCursor(0, 1);
  243. lcd.print("Bomba Press CME");
  244. delay(1000);
  245. break;
  246.  
  247. case 5:
  248. comando = 5; // COMANDO 5 EXECUTADO
  249. digitalWrite(Sirene, LOW); // SIRENE ATIVADA INDICANDO QUE HÁ FALHAS NO SISTEMA DA OSMOSE
  250. digitalWrite(LuzVermelha, LOW); // LUZ VERMELHA INDICANDO FALHA NO SISTEMA DA OSMOSE
  251. digitalWrite(LuzAmarela, HIGH);
  252. digitalWrite(LuzVerde, HIGH);
  253. lcd.clear(); // LIMPA O DISPLAY E, EM SEGUIDA, MOSTRA A FALHA DO SISTEMA
  254. lcd.setCursor(3, 0);
  255. lcd.print("Defeito na");
  256. lcd.setCursor(4, 1);
  257. lcd.print("Bomba OR");
  258. delay(1000);
  259. lcd.clear(); // LIMPA O DISPLAY E, EM SEGUIDA, MOSTRA A FALHA DO SISTEMA
  260. lcd.setCursor(3, 0);
  261. lcd.print("Defeito na");
  262. lcd.setCursor(1, 1);
  263. lcd.print("Bomba Press OR");
  264. delay(1000);
  265. break;
  266.  
  267.  
  268. case 6:
  269. comando = 6; // COMANDO 6 EXECUTADO
  270. digitalWrite(Sirene, LOW); // SIRENE ATIVADA INDICANDO QUE HÁ FALHAS NO SISTEMA DA OSMOSE
  271. digitalWrite(LuzVermelha, LOW); // LUZ VERMELHA INDICANDO FALHA NO SISTEMA DA OSMOSE
  272. digitalWrite(LuzAmarela, HIGH);
  273. digitalWrite(LuzVerde, HIGH);
  274. lcd.clear(); // LIMPA O DISPLAY E, EM SEGUIDA, MOSTRA A FALHA DO SISTEMA
  275. lcd.setCursor(3, 0);
  276. lcd.print("Defeito na");
  277. lcd.setCursor(4, 1);
  278. lcd.print("Bomba OR");
  279. delay (1000);
  280. lcd.clear(); // LIMPA O DISPLAY E, EM SEGUIDA, MOSTRA A FALHA DO SISTEMA
  281. lcd.setCursor(3, 0);
  282. lcd.print("Defeito na");
  283. lcd.setCursor(0, 1);
  284. lcd.print("Bomba Press CME");
  285. delay(1000);
  286. break;
  287.  
  288.  
  289. case 7:
  290. comando = 7; // COMANDO 7 EXECUTADO
  291. digitalWrite(Sirene, LOW); // SIRENE ATIVADA INDICANDO QUE HÁ FALHAS NO SISTEMA DA OSMOSE
  292. digitalWrite(LuzVermelha, LOW); // LUZ VERMELHA INDICANDO FALHA NO SISTEMA DA OSMOSE
  293. digitalWrite(LuzAmarela, HIGH);
  294. digitalWrite(LuzVerde, HIGH);
  295. lcd.clear(); // LIMPA O DISPLAY E, EM SEGUIDA, MOSTRA A FALHA DO SISTEMA
  296. lcd.setCursor(3, 0);
  297. lcd.print("Defeito na");
  298. lcd.setCursor(1, 1);
  299. lcd.print("Bomba Press OR");
  300. delay(1000);
  301. lcd.clear(); // LIMPA O DISPLAY E, EM SEGUIDA, MOSTRA A FALHA DO SISTEMA
  302. lcd.setCursor(3, 0);
  303. lcd.print("Defeito na");
  304. lcd.setCursor(0, 1);
  305. lcd.print("Bomba Press CME");
  306. delay(1000);
  307. break;
  308.  
  309.  
  310. }
  311. } // FIM DO VOID LOOP
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement