Advertisement
Guest User

Untitled

a guest
Jul 15th, 2019
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.28 KB | None | 0 0
  1. #include <Stepper.h>
  2. #include <LiquidCrystal.h>
  3. #include <OneWire.h>
  4. #include <DallasTemperature.h>
  5. #include <Wire.h>
  6.  
  7. /*
  8. * Definicoes
  9. */
  10. #define DEBUG Serial.print
  11.  
  12. /*
  13. * Constantes
  14. */
  15. const int pinoBotao = 19; //PINO DIGITAL UTILIZADO PELO PUSH BUTTON
  16. const int totalStepToOpen = 158;
  17. const int stepsPerRevolution = 48;
  18. const int speedStep = 10;
  19.  
  20.  
  21. /*
  22. * Variaveis Globais
  23. */
  24. volatile bool isFishDetected, isButtonPressed = false; // Variaveis para controle da detecção de peixe e botão
  25. volatile int numSteps = 0; // Variavel para a contagem de voltas
  26. unsigned long initTime, finalTime, deltaTime = 0; // Variavel para determinacao do tempo
  27. float tempo, tempC, t, f, T, V; // Variaveis para conversa de frequencia
  28.  
  29.  
  30.  
  31. /*
  32. * Pinout
  33. */
  34.  
  35. /* LCD */
  36. LiquidCrystal lcd(53,52,51,50,49,48);
  37.  
  38. /* Motor de Passos */
  39. Stepper stepper(stepsPerRevolution, 8,9,10,11);
  40.  
  41. /* Sensor de Temperatura */
  42. OneWire oneWire(21);
  43. DallasTemperature sensors(&oneWire);
  44. DeviceAddress temperatureSensor;
  45.  
  46.  
  47. /*
  48. * Inicializacao dos perifericos
  49. */
  50. void setup() {
  51.  
  52. Serial.begin(9600);
  53.  
  54. //configura button
  55. pinMode(pinoBotao, INPUT_PULLUP);
  56.  
  57. // Inicia sensor temp
  58. DEBUG("Inicializacao: Sensor Temp\n");
  59. sensors.begin();
  60. sensors.getAddress(temperatureSensor, 0);
  61.  
  62. // Inicia LCD
  63. DEBUG("Inicializacao: Display LCD\n");
  64. lcd.begin(20, 2);
  65. pinMode(2, INPUT); //pino sensor vazao
  66. pinMode(3, INPUT); //pino fotodiodo
  67.  
  68. // Realiza a abertura inicial
  69. DEBUG("Inicializacao: Motor de Passos\n");
  70. stepper.setSpeed(speedStep);
  71. stepper.step(stepsPerRevolution);
  72.  
  73. // Apresenta a tela de inicio
  74. showInitialLCD();
  75.  
  76. // Configura interrupcoes
  77. attachInterrupt(1, callbackPeixe, RISING);
  78. attachInterrupt(3, callbackButton, FALLING);
  79.  
  80. // Aguarda 5s
  81. delay(3000);
  82.  
  83. //limpa LCD para apresentar "aguarda botao"
  84. lcd.clear();
  85. esperaButton();
  86.  
  87. delay(3000);
  88.  
  89. }
  90.  
  91.  
  92. /*
  93. * Loop Embarcado
  94. */
  95. void loop() {
  96.  
  97. //apresenta no LCD o aguardo do botao pressionado para iniciar sistema
  98.  
  99. //se botao pressionado, começa sistema
  100. if(isButtonPressed){
  101.  
  102.  
  103. initTime = millis();
  104.  
  105. DEBUG(">>> Inicio do Processo: ");
  106. DEBUG(initTime);
  107. DEBUG("\n");
  108.  
  109. // Realiza abertura inicial
  110. DEBUG("Abertura da Valvula\n");
  111. stepper.setSpeed(speedStep);
  112. stepper.step(stepsPerRevolution);
  113.  
  114. // Le sensor de Vazão
  115. readFlowSensor();
  116.  
  117. // Le sensor de Tenoeratura
  118. sensors.requestTemperatures();
  119. tempC = sensors.getTempC(temperatureSensor);
  120.  
  121. // Atualiza Display
  122. showLCD();
  123.  
  124. // Incrementa numero de voltas
  125. numSteps++;
  126.  
  127. // Aguarda 1min
  128. delay(1000);
  129.  
  130. if(isFishDetected == true)
  131. {
  132. // Atualiza Display com a Tela Final
  133. showFinalLCD();
  134. Serial.print(deltaTime);
  135.  
  136. // Fecha o Registros
  137. stepper.setSpeed(speedStep);
  138. stepper.step(-stepsPerRevolution*numSteps);
  139.  
  140. // Atualiza flag de detecção do peixe
  141. isFishDetected = false;
  142.  
  143. // Atualiza flag de detecção do botao
  144. isButtonPressed = false;
  145.  
  146. // Trava o fluxo de codigo
  147. while(1);
  148. }
  149.  
  150. }
  151. }
  152.  
  153.  
  154. void showInitialLCD()
  155. {
  156. lcd.setCursor(4, 0);
  157. lcd.print("Iniciando");
  158. lcd.setCursor(4, 1);
  159. lcd.print("Sistema...");
  160. }
  161.  
  162. void showFinalLCD()
  163. {
  164. lcd.clear();
  165. lcd.setCursor(0, 0);
  166. lcd.print("Vf:");
  167. lcd.setCursor(4, 0);
  168. lcd.print(V);
  169. lcd.setCursor(19,0);
  170. lcd.print("L/min");
  171. lcd.setCursor(0,1);
  172. lcd.print("T final: ");
  173. lcd.write(223);
  174. lcd.print("C");
  175. lcd.setCursor(9,1);
  176. lcd.print(tempC);
  177. }
  178.  
  179. void showLCD()
  180. {
  181. lcd.setCursor(0, 0);
  182. lcd.print("V:");
  183. lcd.setCursor(3, 0);
  184. lcd.print(V);
  185. lcd.setCursor(8,0);
  186. lcd.print(" L/M");
  187. lcd.setCursor(0,1);
  188. lcd.print("T: ");
  189. lcd.write(223);
  190. lcd.print("C");
  191. lcd.setCursor(4,1);
  192. lcd.print(tempC);
  193. }
  194.  
  195. void getFreq()
  196. {
  197. tempo = pulseIn(2, HIGH); //pulso em alta, em microsegundos
  198. t = tempo * 0.000001; //pulso em segundos
  199. T = 2.00 * t; //periodo completo em s
  200. f = 1 / T; //frequencia
  201. }
  202.  
  203. void convertFreqToFlow()
  204. {
  205. V = f/8.2; //[L/MIN]
  206. }
  207.  
  208. void readFlowSensor()
  209. {
  210. getFreq();
  211. convertFreqToFlow();
  212. }
  213.  
  214. void callbackPeixe()
  215. {
  216. // Calcula o diferencial de tempo
  217. finalTime = millis();
  218.  
  219. DEBUG("Detectou um peixe:");
  220. DEBUG(finalTime);
  221. DEBUG("\n");
  222.  
  223. // Calcula diferencial de Tempo
  224. deltaTime = (finalTime - initTime)/1000;
  225.  
  226. DEBUG("Tempo desde o Inicio da Operacao:");
  227. DEBUG(deltaTime);
  228. DEBUG("\n");
  229.  
  230. // Atualiza a flag de detecção do peixe
  231. isFishDetected = true;
  232. }
  233.  
  234. void esperaButton()
  235. {
  236. lcd.setCursor(0,0);
  237. lcd.print("Aguardando botao.");
  238. }
  239.  
  240. void callbackButton()
  241. {
  242. isButtonPressed = true;
  243. DEBUG("Botao Detectado");
  244. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement