Advertisement
RuiViana

Chocadeira III

Dec 16th, 2015
251
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.82 KB | None | 0 0
  1. // http://pastebin.com/C4HCpHSM#
  2. //************ Variaveis e constantes ************
  3.  
  4. // unsigned long InterSeg = 30000; // (milliseconds) somando linhas de code = +- = 30 segundos
  5. // unsigned long IinterHora = 7600000; // (milliseconds) hora = +- 3.600 s Seg = 3.600.000 mSeg
  6. // unsigned long InterDias = 86400000; // (milliseconds) dia = +- 86.400 s Seg = 86.400.000 mSeg
  7. unsigned long InterSeg = 2000; // Teste
  8. unsigned long InterHora = 14400; // Teste
  9. unsigned long InterDias = 28800; // Teste
  10. unsigned long Segundos = 0; // will store last time LED was updated
  11. unsigned long Horas = 0; // will store last time LED was updated
  12. unsigned long Dias = 0; // will store last time LED was updated
  13.  
  14. boolean flagmotor = 0;
  15.  
  16. #include <LiquidCrystal.h> // Inclui a biblioteca do LCD
  17. #include "DHT.h" // Inclui a biblioteca do DHT11
  18. #define DHTPIN A1 // pino que estamos conectado
  19. #define DHTTYPE DHT22 // DHT 11
  20. DHT dht(DHTPIN, DHTTYPE);
  21.  
  22. LiquidCrystal lcd(8, 9, 4, 5, 6, 7); // Pinos do LCD
  23. #define Up 2 // Pino do switch de Up
  24. #define Dn 3 // Pino do switch de Dn
  25. #define relemotor 10 // Motor vira ovos
  26. #define Boia 11 // Pino sensor da boia
  27. #define Bomba 12 // Pino acionamento da bomba
  28. #define Rele 13 // Resistencia de aquecimento
  29.  
  30. float TempProg = 27; // Variavel com temperatura programada
  31. long debouncing_time = 15; // Debouncing Time in Milliseconds
  32. volatile unsigned long last_micros; // Variavel para deboucing
  33. float celsius; // Varialvel para guardar valor de temperatura
  34. byte humidade; // Varialvel para guardar valor de humidade
  35.  
  36. //*********************** Setup *******************
  37. void setup()
  38. {
  39. Serial.begin(9600);
  40. lcd.begin(16, 2); // Inicia o LCD com dimensões 16x2(Colunas x Linhas)
  41. pinMode(relemotor, OUTPUT); // Port como saída
  42. pinMode(Rele, OUTPUT); // Port como saída
  43. pinMode(Bomba, OUTPUT); // Port como saída
  44.  
  45. pinMode(Up, INPUT_PULLUP); // Port do switch Up como entrada e Pull-Up
  46. pinMode(Dn, INPUT_PULLUP); // Port do switch Dn como entrada e Pull-Up
  47. pinMode(Boia, INPUT_PULLUP); // Port da boia como entrada e Pull-Up
  48. dht.begin(); // inicializa o Sensor
  49. delay(1000); // Aguarda 1 seg antes de acessar as informações do sensor
  50.  
  51. attachInterrupt(1, PressUp, RISING); // Interrupt de botão ao ficar HIGH o pino 3
  52. attachInterrupt(0, PressDn, RISING); // Interrupt de botão ao ficar HIGH o pino 2
  53.  
  54. lcd.clear(); // Limpa do buffer do LCD
  55. lcd.setCursor(0, 0); // Seleciona posição 0 da linha 0
  56. lcd.print("Chocadeira"); // Imprime texto
  57. lcd.setCursor(11, 1); // Seleciona posição 0 da linha 0
  58. lcd.print(TempProg); // Imprime variavel
  59.  
  60. digitalWrite(relemotor, HIGH); // Desliga relemotor
  61. digitalWrite(Rele, HIGH); // Desliga Rele
  62. digitalWrite(Bomba, HIGH); // Desliga Bomba
  63. }
  64. //*************** Rotina PressUp *****************
  65. void PressUp() // Rotina chamada pela interrupcao do botão de aumento
  66. {
  67. if((long)(micros() - last_micros) >= debouncing_time * 1000) // Tempo de debouncing
  68. {
  69. TempProg = TempProg + 0.1; // Incrementa temperatura em 0,01 oC
  70. lcd.setCursor(11, 1); // Seleciona posição 0 da linha 0
  71. lcd.print(TempProg); // Imprime variavel
  72. last_micros = micros(); // Tempo de debouncing
  73. }
  74. }
  75. //*************** Rotina PressDn *****************
  76. void PressDn() // Rotina chamada pela interrupcao do botão de reducao
  77. {
  78. if((long)(micros() - last_micros) >= debouncing_time * 1000) // Tempo de debouncing
  79. {
  80. TempProg = TempProg - 0.1; // Decrementa temperatura em 0,01 oC
  81. lcd.setCursor(11, 1); // Seleciona posição 0 da linha 0
  82. lcd.print(TempProg); // Imprime variavel
  83. last_micros = micros(); // Tempo de debouncing
  84. }
  85. }
  86. //*********************** Loop ********************
  87. void loop()
  88. {
  89. if (digitalRead(Boia == LOW)) // Se a boia tiver baixa
  90. digitalWrite(Bomba, HIGH); // Liga a bomba
  91. else // Se não
  92. digitalWrite(Bomba, LOW); // Desliga a bomba
  93. celsius = dht.readTemperature(); // Le temperatura no DHT11
  94. humidade = dht.readHumidity(); // Le humidade no DHT11
  95.  
  96. lcd.setCursor(11, 0); // Seleciona posição 0 da linha 0
  97. lcd.print("H "); // Imprime texto
  98. lcd.print(humidade); // Imprime humidade
  99. if (celsius >= TempProg) // Faça se a temperatura for menor que a programada
  100. digitalWrite(Rele, LOW); // Desliga Rele como entrada e Pull-Up
  101. else // Ou se não for
  102. digitalWrite(Rele, HIGH); // Liga Rele como entrada e Pull-Up
  103. lcd.setCursor(0, 1); // Seleciona posição 0 da linha 0
  104. lcd.print(celsius); // Imprime a gemperatura
  105. lcd.setCursor(6, 1); // Seleciona posição 6 da linha 0
  106. if (digitalRead(Rele) == 1) // Faça se o rele tiver operado
  107. lcd.print("Lig "); // Imprime texto
  108. else // Ou se não tiver
  109. lcd.print("Desl"); // Imprime texto
  110. delay(200);
  111.  
  112. if ((millis() - Horas) >= InterHora) // Se for maior que interHora
  113. { // faça
  114. // Serial.println((millis() - Horas)); // Teste
  115. Horas = millis(); // Recarrega o valor de millis() em horas
  116. Segundos = millis(); // Recarrega o valor de millis() em segundos
  117. while ((millis() - Segundos) <= InterSeg) // Faça enquanto minutos menos que
  118. {
  119. digitalWrite(relemotor, LOW); // Liga relemotor
  120. }
  121. digitalWrite(relemotor, HIGH); // Desliga relemotor
  122. }
  123.  
  124. if ((millis() - Dias) >= InterDias) // Se for maior que interDias
  125. { // faça
  126. Dias = millis(); // Recarrega o valor de millis() em Dias
  127. lcd.setCursor(0, 0); // Seleciona posição 0 da linha 0
  128. lcd.print(" Dias "); // Imprime texto
  129. lcd.print(Dias/InterDias); // Imprime numero de dias (Dias/interDias)
  130. }
  131. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement