Advertisement
RuiViana

Dosador triplo

Jul 13th, 2015
305
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 15.52 KB | None | 0 0
  1.  
  2. /*
  3. Nome do Projeto: Controle_Dosador_V01
  4. Nome do Aquivo: Controle_Dosador_V01.ino
  5. Dependências: LiquidCrystal.h Biblioteca para o LCD
  6. MCU: Atmega328
  7. Board: Arduino Uno/Mega/Mini
  8. Compilador N/A
  9. IDE: Arduino IDE 1.0.6
  10. Hardware: Arduino UNO/MEGA/Mini
  11. Escrito por: Rui Viana
  12. Data: 13/07/2015
  13. Uso: Didático
  14. Desenhos N/A
  15. Copyright @ N/A
  16.  
  17. Este programa é software livre;
  18. e é distribuído na esperança que possa ser útil, mas SEM QUALQUER GARANTIA;
  19. mesmo sem a garantia implícita de COMERCIALIZAÇÃO ou ADEQUAÇÃO A UM DETERMINADO FIM.
  20.  
  21. Obs: O pino 0 e 1 tem que ser desligado ao carregar o código, se não dará erro.
  22. avrdude: stk500_getsync(): not in sync: resp=0x00
  23.  
  24. REVISIONS: (latest entry first)
  25. 2015-07-13 - Controle_Dosador_V01.ino - First release. Só um sistema de fluxo
  26. 2015-07-13 - Controle_Dosador_V02.ino - Inclusão dos 2 outros sistemas
  27.  
  28. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  29. Descrição:
  30.  
  31. Este código para acionar uma bomba e uma válvula para encher uma embalagem com 500ml.
  32. Ele usa em sensor de fluxo para medir a quantiddade que é colocada na embalagem.
  33.  
  34. Parâmetros do sensor:
  35. Pulse frequency (Hz) in Horizontal Test = 5.5Q, Q is flow rate in L/min.
  36. Flow Rate Range 1~60L/min
  37.  
  38. O Sensor envia pulsos à razão de 330 pulso para cada litro envasado.
  39. */
  40. // ---------------------- Parametros e variaveis --------------------------
  41. #include <LiquidCrystal.h> // Biblioteca do LCD
  42. LiquidCrystal lcd(13,12,11,10,9,8); // Pinos do LCD
  43.  
  44. #define bombaUm 5 // pino que aciona a bomba1 e a válvula1
  45. #define bombaDois 6 // pino que aciona a bomba2 e a válvula2
  46. #define bombaTres 7 // pino que aciona a bomba3 e a válvula3
  47.  
  48. #define botao_prgm1 A0 // Pino para botão de carga do protudo 1
  49. #define botao_prgm2 A1 // Pino para botão de carga do protudo 2
  50. #define botao_prgm3 A2 // Pino para botão de carga do protudo 3
  51. #define botaoliga A3 // Pino para botão de Ligar o sistema
  52. #define EPO A4 // Botaão para Emergencia ESP
  53.  
  54. #define hallsensor1 0 // The pin location of the sensor
  55. #define hallsensor2 1 // The pin location of the sensor
  56. #define hallsensor3 2 // The pin location of the sensor
  57.  
  58. float Calc1 = 0; // Variavel para contagem de pulsos do sensor1 de fluxo
  59. float Calc2 = 0; // Variavel para contagem de pulsos do sensor2 de fluxo
  60. float Calc3 = 0; // Variavel para contagem de pulsos do sensor3 de fluxo
  61.  
  62. unsigned int debounceDelay = 5; // Tempo de debounce
  63. unsigned int Flagbotaoliga; // Variavel para indicar se o botão de liga foi acionado
  64. unsigned int Flagbotaoprgm1 = 0; // Variavel para indicar se o botão de prgm1 foi acionado
  65. unsigned int Flagbotaoprgm2 = 0; // Variavel para indicar se o botão de prgm2 foi acionado
  66. unsigned int Flagbotaoprgm3 = 0; // Variavel para indicar se o botão de prgm3 foi acionado
  67. unsigned int FlagEPO; // Variavel para indicar se o botão de emergencia foi acionado
  68. // -------------------------------------- setup -----------------------------
  69. void setup()
  70. {
  71. lcd.begin(20, 2); // Inicializa LCD de 20 posiçoes e 2 linhas
  72. lcd.setCursor(0,0); // Posiciona cursor na 1 posição da 1a linha
  73. lcd.clear();
  74. lcd.print ("Dosador");
  75. pinMode(hallsensor1, INPUT_PULLUP); // Initializes digital pin 2 as an input
  76. pinMode(hallsensor2, INPUT_PULLUP); // Initializes digital pin 2 as an input
  77. pinMode(hallsensor3, INPUT_PULLUP); // Initializes digital pin 2 as an input
  78. pinMode (bombaUm, OUTPUT); // pino que aciona a bomba1 e a válvula1 como saida
  79. pinMode (bombaDois, OUTPUT); // pino que aciona a bomba2 e a válvula1 como saida
  80. pinMode (bombaTres, OUTPUT); // pino que aciona a bomba3 e a válvula1 como saida
  81. pinMode (botaoliga, INPUT_PULLUP); // pino do botão de liga como entrada e PULL_UP
  82. pinMode (EPO, INPUT_PULLUP); // pino do botão de Emergencia como entrada e PULL_UP
  83. pinMode (botao_prgm1, INPUT_PULLUP); // pino do botão de carga de 500ml1 como entrada e PULL_UP
  84. pinMode (botao_prgm2, INPUT_PULLUP); // pino do botão de carga de 500ml2 como entrada e PULL_UP de liga como entrada e PULL_UP
  85. pinMode (botao_prgm3, INPUT_PULLUP); // pino do botão de carga de 1000m como entrada e PULL_UP de liga como entrada e PULL_UP
  86. lcd.setCursor(9,0); // Posiciona cursor na 9a. posição da 2a linha
  87. lcd.print ("Deslig."); // Informa sistema desligado
  88. Flagbotaoliga = 0; // Indicador de botaão de liga, como desligado
  89. }
  90.  
  91. //------------------------------------ loop -----------------------
  92. void loop()
  93. {
  94. // ================= botaoliga deboucing ===================
  95. if(!digitalRead(botaoliga)) // Se botão de ligar está pressionado
  96. { // Faça
  97. delay(debounceDelay); // delay para evitar bounce(ruído eletrico)
  98. if(!digitalRead(botaoliga)) // Se botão de ligar está pressionado
  99. { // Faça
  100. Flagbotaoliga = 1; // Indicador de botão de liga, como ligado
  101. FlagEPO = 0; // Indicativo de emergencia desligado
  102. lcd.setCursor(9,0); // Posiciona cursor na 9a. posição da 2a linha
  103. lcd.print ("Ligado "); // Informa sistema ligado
  104. lcd.setCursor(0,1); // Posiciona cursor na 10a. posição da 2a linha
  105. lcd.print (" "); // Limpa a área
  106. while(!digitalRead(botaoliga)) // Espera pela liberação do switch
  107. delayMicroseconds(1); // delay de 1u segundos
  108. }
  109. }
  110. // ================= EPO deboucing ===================
  111. if(!digitalRead(EPO)) // Se botão de ligar está pressionado
  112. { // Faça
  113. delay(debounceDelay); // delay para evitar bounce(ruído eletrico)
  114. if(!digitalRead(EPO)) // Se botão de emergencia está pressionado
  115. {
  116. FlagEPO = 1; // Indicativo de emergencia ligado
  117. digitalWrite (bombaUm,HIGH); // Desliga bomba 1 e Valvula 1
  118. digitalWrite (bombaDois,HIGH); // Desliga bomba 2 e Valvula 2
  119. digitalWrite (bombaTres,HIGH); // Desliga bomba 3 e Valvula 3
  120. Flagbotaoliga = 0; // Indicador de botão de liga, como desligado
  121. lcd.setCursor(9,0); // Posiciona cursor na 10a. posição da 2a linha
  122. lcd.print ("Deslig. "); // Informa sistema desligado
  123. lcd.setCursor(0,1); // Posiciona cursor na 1a. posição da 2a linha
  124. lcd.print (" "); // Limpa a área
  125. while(!digitalRead(EPO)) // Espera pela liberação do switch
  126. delayMicroseconds(1); // delay de 1u segundos
  127. }
  128. }
  129. // ----------------------------- controle do fluxo -----------------
  130. if (Flagbotaoliga == 1) // Se o botão de liga foi acionado
  131. { // Faça
  132. // ================= botao_prgm1 deboucing ===================
  133.  
  134. if ((Flagbotaoprgm2 == 0) & (Flagbotaoprgm3 == 0)) // Se não está usando prgm2 ou prgm3
  135. { // Faça
  136. if(!digitalRead(botao_prgm1)) // Se o botão de carga de 500ml1 está pressionado
  137. {
  138. if (Calc1 < 165) // Se a quantidade envasada for menor que 500ml
  139. { // Faça
  140. Flagbotaoprgm1 = 1; // Indicador de botão de progm1, como ligado
  141. digitalWrite (bombaUm,LOW); // Liga bomba 1 e Valvula 1
  142. if(pulseIn(hallsensor1, LOW)) // Se pulso do sensor1 de fluxo for low
  143. Calc1++; // Incremente contador de quantidade
  144. }
  145. else // Se a quantidade envasada for maior que 500ml
  146. { // Faça
  147. Flagbotaoliga = 0; // Indicador de botão de liga, como desligado
  148. lcd.setCursor(10,1); // Posiciona cursor na 10a. posição da 2a linha
  149. lcd.print (Calc1*3.0303); // Mostra contador
  150. lcd.setCursor(9,0); // Posiciona cursor na 9a. posição da 2a linha
  151. lcd.print ("Deslig."); // Informa sistema desligado
  152. Calc1 = 0; // Zera variavel contadora
  153. Flagbotaoprgm1 = 0; // Indicador de botão de progm1, como desligado
  154. }
  155. }
  156. else // Se o botão de carga de 500ml1 não está pressionado
  157. {
  158. if (Flagbotaoprgm1 == 1) // Se indicador de botão de progm1 estiver ligado
  159. { // Faça
  160. digitalWrite (bombaUm,HIGH); // Desliga bomba 1 e Valvula 1
  161. lcd.setCursor(0,1); // Posiciona cursor na 1a. posição da 2a linha
  162. lcd.print (" 500ml_1"); // Mostra qual sistema está sendo usado
  163. lcd.setCursor(10,1); // Posiciona cursor na 10a. posição da 2a linha
  164. lcd.print (Calc1*3.0303); // Mostra contador
  165. }
  166. }
  167. }
  168. // ================= botao_prgm2 deboucing ===================
  169. if ((Flagbotaoprgm1 == 0) & (Flagbotaoprgm3 == 0)) // Se não está usando prgm1 ou prgm3
  170. { // Faça
  171. if(!digitalRead(botao_prgm2)) // Se o botão de carga de 500ml2 está pressionado
  172. {
  173. if (Calc2 < 165) // Se a quantidade envasada for menor que 500ml
  174. { // Faça
  175. Flagbotaoprgm2 = 1; // Indicador de botão de progm2, como ligado
  176. digitalWrite (bombaDois,LOW); // Liga bomba 2 e Valvula 2
  177. if(pulseIn(hallsensor2, LOW)) // Se pulso do sensor2 de fluxo for low
  178. Calc2++; // Incremente contador de quantidade
  179. }
  180. else // Se a quantidade envasada for maior que 500ml
  181. { // Faça
  182. Flagbotaoliga = 0; // Indicador de botão de liga, como desligado
  183. lcd.setCursor(10,1); // Posiciona cursor na 10a. posição da 2a linha
  184. lcd.print (Calc2*3.0303); // Mostra contador
  185. lcd.setCursor(9,0); // Posiciona cursor na 9a. posição da 2a linha
  186. lcd.print ("Deslig."); // Informa sistema desligado
  187. Calc2 = 0; // Zera variavel contadora
  188. Flagbotaoprgm2 = 0; // Indicador de botão de progm2, como desligado
  189. }
  190. }
  191. else // Se o botão de carga de 500ml2 não está pressionado
  192. {
  193. if (Flagbotaoprgm2 == 1) // Se indicador de botão de progm2 está ligado
  194. { // Faça
  195. digitalWrite (bombaDois,HIGH); // Desliga bomba 2 e Valvula 2
  196. lcd.setCursor(0,1); // Posiciona cursor na 1a. posição da 2a linha
  197. lcd.print (" 500ml_2"); // Mostra qual sistema está sendo usado
  198. lcd.setCursor(10,1); // Posiciona cursor na 10a. posição da 2a linha
  199. lcd.print (Calc2*3.0303); // Mostra contador
  200. }
  201. }
  202. }
  203. // ================= botao_prgm3 deboucing ===================
  204. if ((Flagbotaoprgm1 == 0) & (Flagbotaoprgm2 == 0)) // Se não está usando prgm1 ou prgm2
  205. {
  206. if(!digitalRead(botao_prgm3)) // Se o botão de carga de 1000ml está pressionado
  207. { // Faça
  208. if (Calc3 < 330) // Se a quantidade envasada for menor que 500ml
  209. { // Faça
  210. Flagbotaoprgm3 = 1; // Indicador de botão de progm3, como ligado
  211. digitalWrite (bombaTres,LOW); // Liga bomba 3 e Valvula 3
  212. if(pulseIn(hallsensor3, LOW)) // Se pulso do sensor3 de fluxo for low
  213. Calc3++; // Incremente contador de quantidade
  214. }
  215. else // Se a quantidade envasada for maior que 1000ml
  216. { // Faça
  217. Flagbotaoliga = 0; // Indicador de botão de liga, como desligado
  218. lcd.setCursor(10,1); // Posiciona cursor na 10a. posição da 2a linha
  219. lcd.print (Calc3*3.0303); // Mostra contador
  220. lcd.setCursor(9,0); // Posiciona cursor na 9a. posição da 2a linha
  221. lcd.print ("Deslig."); // Informa sistema desligado
  222. Calc3 = 0; // Zera variavel contadora
  223. Flagbotaoprgm3 = 0; // Indicador de botão de progm3, como desligado
  224. }
  225. }
  226. else // Se o botão de carga de1000ml não está pressionado
  227. {
  228. if (Flagbotaoprgm3 == 1) // Se indicador de botão de progm3 está ligado
  229. { // Faça
  230. digitalWrite (bombaTres,HIGH); // Desliga bomba 3 e Valvula 3
  231. lcd.setCursor(0,1); // Posiciona cursor na 1a. posição da 2a linha
  232. lcd.print (" 1000ml "); // Mostra qual sistema está sendo usado
  233. lcd.setCursor(10,1); // Posiciona cursor na 10a. posição da 2a linha
  234. lcd.print (Calc3*3.0303); // Mostra contador
  235. }
  236. }
  237. }
  238. }
  239. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement