Advertisement
JeanCarlosSantana

prog_final

Nov 17th, 2016
145
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 13.98 KB | None | 0 0
  1. #include <LiquidCrystal.h>                     //Biblioteca do display.
  2. #include <LinkedList.h>                        //
  3. #include <Gaussian.h>                          //Bibliotecas para cálculo da média móvel.
  4. #include <GaussianAverage.h>                   //
  5. #include <Ultrasonic.h>                        //Biblioteca dos sensores ultrassônicos.  
  6.  
  7. #define trigger1 6                             //Trigger do US1 no pino 6.
  8. #define echo1    5                             //Trigger do US1 no pino 5.
  9. #define trigger2 4                             //Trigger do US2 no pino 4.
  10. #define echo2    3                             //Trigger do US2 no pino 3.
  11.  
  12. #define pulsoSOLENOIDE A4                      //Botão da solenóde no pino A4.
  13. #define pulsoBOMBA     A5                      //Botão da bomba no pino A5.
  14. #define AUTO_MANU       0                      //Botão para seleção do modo de trabalho no pino 0.
  15. #define SOLENOIDE       1                      //Saída para acionamento da solenóide no pino 1.
  16. #define BOMBA           2                      //Saída para acionamento da bomba no pino 2.
  17.  
  18. LiquidCrystal lcd(12, 11, 10, 9, 8, 7);        //Define os pinos para a comunicação com o display.
  19.  
  20. GaussianAverage myMovingAverage1(10);          //Quantidade de leituras no sensor para média do sensor US1.
  21. GaussianAverage myMovingAverage2(10);          //Quantidade de leituras no sensor para média do sensor US2.
  22.  
  23. Ultrasonic ultrasonic1(trigger1, echo1);       //Chamada dos pinos trigger e echo do sesnor US1.
  24. Ultrasonic ultrasonic2(trigger2, echo2);       //Chamada dos pinos trigger e echo do sesnor US2.
  25.  
  26. float caixadagua =   28.5;                     //Caixa d'água com 28,5cm.
  27. float reservatorio = 28.5;                     //Reservatório com 28,5cm.
  28. int porcentagem1, nivel1, US1;                 //Variáveis do tipo inteira.
  29. int porcentagem2, nivel2, US2, estadoNivel, setLCD, estadoSolen;     //Variáveis do tipo inteira.
  30. //==========================================================================================================
  31.  
  32. void setup(){                                  //Inícialização do programa.
  33.  
  34.   lcd.begin(20,4);                             //Define o display com 20 colunas e quatro linhas.
  35.  
  36.   pinMode(pulsoBOMBA,INPUT_PULLUP);            //Define pulsoBOMBBA como entrada digital com pullup interno ativado.
  37.   pinMode(pulsoSOLENOIDE,INPUT_PULLUP);        //Define pulsoSOLENOIDE como entrada digital com pullup interno ativado.
  38.   pinMode(AUTO_MANU,INPUT_PULLUP);             //Define AUTO_MANU como entrada digital com pullup interno ativado.
  39.   pinMode(SOLENOIDE,OUTPUT);                   //Define SOLENOIDE como saída digital.
  40.   pinMode(BOMBA,OUTPUT);                       //DEfine BOMBA como saída digital.
  41.  
  42.   digitalWrite(SOLENOIDE,LOW);                 //Inicia com a solenóide desligada.
  43.   digitalWrite(BOMBA,LOW);                     //Inicia com a bomba desligada.
  44.  
  45.   estadoNivel = 0;                             //Atribui valor zero a variável estadoNivel.
  46.   estadoSolen = 0;                             //Atribui valor zero a variável estadoSolen.
  47. }                                              //Fim setup.
  48.  
  49. //========================================================================================================
  50. void loop(){                                                      //Loop do programa.
  51.  
  52.    if(digitalRead(AUTO_MANU) == LOW){                             //Condição que habilita o modo manual.
  53.      
  54.      float cmMsec1;                                               //=====================================                                      
  55.      long microsec1 = ultrasonic1.timing();
  56.      cmMsec1 = ultrasonic1.convert(microsec1, Ultrasonic::CM);  
  57.      porcentagem1 = (((cmMsec1-6.5)*100)/reservatorio);
  58.      nivel1 = (100-porcentagem1);  
  59.      myMovingAverage1 += nivel1;
  60.      myMovingAverage1.process();
  61.      US1 = myMovingAverage1.mean;                                 //Lógica responsável pela leitura do US1.
  62.      if(US1 > 100){
  63.        US1 = 100;
  64.      }
  65.      if(US1 < 0){
  66.        US1 = 0;
  67.      }                                                            //=====================================
  68.      
  69.      float cmMsec2;                                               //=====================================
  70.      long microsec2 = ultrasonic2.timing();
  71.      cmMsec2 = ultrasonic2.convert(microsec2, Ultrasonic::CM);  
  72.      porcentagem2 = ((cmMsec2-12)*100)/caixadagua;
  73.      nivel2 = (100-porcentagem2);  
  74.      myMovingAverage2 += nivel2;
  75.      myMovingAverage2.process();
  76.      US2 = myMovingAverage2.mean;                                 //Lógica responsável pela leitura do US2.  
  77.      if(US2 > 100){
  78.        US2 = 100;
  79.      }
  80.      if(US2 < 0){
  81.        US2 = 0;
  82.      }                                                            //=====================================
  83.      
  84.      lcd.clear();                                                 //limpa a tela do display.
  85.      lcd.setCursor(4,0);
  86.      lcd.print("MODO MANUAL");                                    //Imprime modo manual na coluna quatro, linha zero.
  87.      lcd.setCursor(0,1);
  88.      lcd.print("RESERVATORIO = ");                                //Imprime reservatório na coluna zero linha um.
  89.      lcd.setCursor(15,1);
  90.      lcd.print(US1);                                              //Imprime a leitura do US1 na coluna quinze, linha um.
  91.      lcd.setCursor(18,1);
  92.      lcd.print("%");                                              //Imprime o símbolo da porcentagem na coluna dezoito, linha um.                                                      
  93.      lcd.setCursor(0,2);
  94.      lcd.print("CAIXA D'AGUA = ");                                //Imprime caixa d'água na coluna zero, linha dois.
  95.      lcd.setCursor(15,2);
  96.      lcd.print(US2);                                              //Imprime a leitura do US2 na coluna , linha dois.
  97.      lcd.setCursor(18,2);
  98.      lcd.print("%");                                              //Imprime o símbolo da porcentagem na coluna dezoito, linha dois.
  99.      
  100.      if(digitalRead(pulsoSOLENOIDE) == LOW){                      //Condição que aciona a solenóide quando pressionado o botão.
  101.          digitalWrite(SOLENOIDE, HIGH);                           //Aciona a solenóide.
  102.          lcd.setCursor(0,3);
  103.          lcd.print("SOLEN=ON");                                   //Imprime ON na coluna zero, linha 3.
  104.          }
  105.      else{                                                        //Condição que desaciona a solenóide quando não pressionado o botão.
  106.          digitalWrite(SOLENOIDE, LOW);                            //Desaciona a solenóide.
  107.          lcd.setCursor(0,3);
  108.          lcd.print("SOLEN=OFF");                                  //Imprime OFF na coluna zero, linha três.
  109.          }
  110.      
  111.      
  112.      if(digitalRead(pulsoBOMBA) == LOW){                          //Condição que aciona a bomba quando pressionado o botão.
  113.          digitalWrite(BOMBA, HIGH);                               //Aciona a bomba.
  114.          lcd.setCursor(10,3);                  
  115.          lcd.print("BOMBA=ON");                                   //Imprime ON na coluna dez, linha três.
  116.          }
  117.      else{                                                        //Condição que desaciona a bomba quando não pressionado o botão.
  118.          digitalWrite(BOMBA, LOW);                                //Desaciona a bomba.                    
  119.          lcd.setCursor(10,3);                                    
  120.          lcd.print("BOMBA=OFF");                                  //Imprime OFF na coluna dez, linha três.
  121.      }
  122.    }                                                              //Fim manual.
  123.  
  124. //=========================================================================================================================================
  125. //=========================================================================================================================================
  126.  
  127.    if(digitalRead(AUTO_MANU) == HIGH){                            //Condição que habilita o modo automático.
  128.      
  129.      float cmMsec1;                                               //=====================================
  130.      long microsec1 = ultrasonic1.timing();
  131.      cmMsec1 = ultrasonic1.convert(microsec1, Ultrasonic::CM);  
  132.      porcentagem1 = (((cmMsec1-6.5)*100)/reservatorio);
  133.      nivel1 = (100-porcentagem1);  
  134.      myMovingAverage1 += nivel1;
  135.      myMovingAverage1.process();
  136.      US1 = myMovingAverage1.mean;                                 //Lógica responsável pela leitura do US1.  
  137.      if(US1 > 100){
  138.        US1 = 100;
  139.      }
  140.      if(US1 < 0){
  141.        US1 = 0;
  142.      }                                                            //=====================================
  143.      
  144.      float cmMsec2;                                               //=====================================
  145.      long microsec2 = ultrasonic2.timing();
  146.      cmMsec2 = ultrasonic2.convert(microsec2, Ultrasonic::CM);  
  147.      porcentagem2 = ((cmMsec2-12)*100)/caixadagua;
  148.      nivel2 = (100-porcentagem2);  
  149.      myMovingAverage2 += nivel2;
  150.      myMovingAverage2.process();
  151.      US2 = myMovingAverage2.mean;                                 //Lógica responsável pela leitura do US2.                              
  152.      if(US2 > 100){
  153.        US2 = 100;
  154.      }
  155.      if(US2 < 0){
  156.        US2 = 0;
  157.      }                                                            //=====================================
  158.      
  159.      lcd.clear();                                                 //limpa a tela do display
  160.      lcd.setCursor(2,0);
  161.      lcd.print("MODO AUTOMATICO");                                //Imprimme modo automático na coluna dois, linha zero.
  162.      lcd.setCursor(0,1);
  163.      lcd.print("RESERVATORIO = ");                                //Imprime reservatório na coluna zero, linha um.
  164.      lcd.setCursor(15,1);
  165.      lcd.print(US1);                                              //Imprime a leitura do US1 na coluna quinze, linha um.
  166.      lcd.setCursor(18,1);
  167.      lcd.print("%");                                              //Imprime o símbolo da porcentagem na coluna dezoito, linha um.                                                      
  168.      lcd.setCursor(0,2);
  169.      lcd.print("CAIXA D'AGUA = ");                                //Imprime caixa d'água na coluna zero, linha dois.
  170.      lcd.setCursor(15,2);
  171.      lcd.print(US2);                                              //Imprime a leitura do US2 na coluna quinze, linha dois.
  172.      lcd.setCursor(18,2);
  173.      lcd.print("%");                                              //Imprime o símbolo da porcentagem na coluna dezoito, linha dois.
  174.      
  175.      switch(estadoNivel){                                         //Switch responsável pelo controle da bomba.
  176.           case 0:
  177.                estadoNivel = 1;                                   //Atribui valor um à variável estadoNivel.
  178.                if((US2 < 20) && (US1 >10)){                       //Habilita a condição se US2 ler menos que 20% e US1 maior que 20%.
  179.                    digitalWrite(BOMBA, HIGH);                     //Aciona a bomba.                          
  180.                }              
  181.           break;          
  182.           case 1:
  183.                estadoNivel = 2;                                   //Atribui valor dois a variável estadoNivel.
  184.                if(US2 > 90){                                      //Habilita a condição se US2 for maior que 90%.
  185.                    digitalWrite(BOMBA, LOW);                      //Desaciiona a bomba.
  186.                    setLCD = 0;  
  187.                }        
  188.           break;          
  189.           case 2:
  190.                estadoNivel = 0;                                   //Atribui valor zero à variável estadoNivel.
  191.                if(US1 < 10){                                      //Habilita a condição se US1 for menor que 10%.
  192.                    digitalWrite(BOMBA, LOW);                      //Desaciona a bomba.
  193.                    setLCD = 0;
  194.                }        
  195.           break;                
  196.      }
  197.      
  198.      if (digitalRead(BOMBA) == LOW){                              //Habilita a condição se a bomba estiver desligada.
  199.            lcd.setCursor(10,3);                                    
  200.            lcd.print("BOMBA=OFF");                                //Imprime BOMBA=OFF na coluna zero, linha três.
  201.      }
  202.      else{
  203.          lcd.setCursor(10,3);                                    
  204.          lcd.print("BOMBA=ON");                                   //Imprime BOMBA=ON na coluna dez, linha três.
  205.      }                
  206.            
  207.      
  208.      switch(estadoSolen){                                         //Switch responsável pelo controle da solenóide.
  209.            case 0:
  210.            estadoSolen = 1;                                       //Atribui valor um a variável estadoSolen.
  211.            if((US2 <20) && (US1 < 10)){                           //Habilita a condição se US2 for manor que 20% e US1 menor que 20%.
  212.                  digitalWrite(SOLENOIDE, HIGH);                   //Aciona solenóide.
  213.            }
  214.            break;          
  215.            case 1:
  216.            estadoSolen = 0;                                       //Atribui valor zero a variável estadoSolen.
  217.            if(US2 > 90){                                          //Habilita a condição se US2 for maior que 90%.
  218.                 digitalWrite(SOLENOIDE, LOW);                     //Desaciona a solenóide.
  219.            }
  220.            break;
  221.      }
  222.      
  223.       if (digitalRead(SOLENOIDE) == LOW){                         //Habilita a condição quando se a solenoide estiver desligada.
  224.            lcd.setCursor(0,3);                                        
  225.            lcd.print("SOLEN=OFF");                                //Imprime SOLEN=OFF na coluna zero, linha três.
  226.        }
  227.        else{
  228.            lcd.setCursor(0,3);                                    
  229.            lcd.print("SOLEN=ON");                                 //Imprime SOLEN=ON na coluna zero, linha três.
  230.        }
  231.    }
  232.    delay(500);
  233.   }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement