TVZ2018 / Mbed 2 deprecated NAVODNJAVANJE_VRTA

Dependencies:   mbed Navodnjavanje

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "mbed.h"
00002 #include "Dht11.h"                                          //Library za DHT11 senzor temperature i vlage
00003 
00004 
00005 Serial pc(USBTX, USBRX);                                    
00006 Dht11 sensor(p26);                                          //Konfiguracija senzora na pin p26
00007 DigitalIn start(p24);                                       //Konfiguracija start tipkala na pin p14
00008 AnalogIn Ain(p19);                                          //Konfiguracija analognog ulaza na pin p19 -> spojen potenciometar za simulaciju nivoa tekućine u spremniku        
00009 
00010 
00011 DigitalOut LLsenzor(LED1);                                  //Vizualizacija senzora niskog nivoa u spremniku na ugrađeni LED1
00012 DigitalOut MLsenzor(LED2);                                  //Vizualizacija senzora srednjeg nivoa u spremniku na ugrađeni LED2
00013 DigitalOut HLsenzor(LED3);                                  //Vizualizacija senzora visokog nivoa u spremniku na ugrađeni LED3
00014 bool punjenjeGotovo;                                        //flag za indikaciju kraja punjenja
00015 bool zalijevanjeGotovo;                                     //flag za indikaciju kraja zalijevanja
00016 void detekcijaNivoa();
00017 void punjenjeSpremnika();
00018 void zalijevanje();
00019 
00020 DigitalOut pumpaVode(p23);                                  //Konfiguracija izlaza za pumpu vode na pin p23
00021 DigitalOut pumpaZaZalijevanje(p22);                         //Konfiguracija izlaza za pumpu za zalijevanje na pin p22
00022 DigitalOut pumpaGnojiva(p21);                               //Konfiguracija izlaza za pumpu gnojiva na pin p21
00023 
00024 Timer timer1;                                               //Deklaracija timera za ocitanje i ispis podataka na TeraTerm
00025 Timer timerPumpeGnojiva;                                    //Deklaracija timera za trajanje doziranja gnojiva u spremnik
00026 int temp;                                                   //Deklaracija varijable za spremanje vrijednosti temperature
00027 int vlaga;                                                  //Deklaracija varijable za spremanje vrijednosti vlage
00028 float ADCdata;                                              //Deklaracija varijable za spremanje vrijednosti analogne vrijednosti sa potenciometra
00029 
00030 int main() {
00031         while(1){
00032             timer1.start();                                 //Pokretanje timera                
00033             sensor.read();                                  //Pokretanje očitanja DHT senzora    
00034             temp = sensor.getCelsius();                     //Spremanje aktualne temperature u varijablu temp
00035             vlaga = sensor.getHumidity();                   //Spremanje aktualne vlage u varijablu vlaga
00036             ADCdata=Ain;                                    //Spremanje aktualne analogne vrijednosti u varijablu ADCdata
00037              
00038         if (timer1.read_ms()>=5000) {                       //Ako je prošlo 5sec
00039              
00040              pc.printf("   Temperatura: %d\r\n         Vlaga: %d\r\n", temp, vlaga);                //Ispiši aktualnu temperaturu i vlagu
00041              
00042              pc.printf("   Nivo spremnika: %f \n\r",ADCdata);                                       //Ispiši aktualnu vrijednost sa analognog ulaza
00043              
00044              if(LLsenzor == 1){
00045              pc.printf("   Senzor niskog nivoa:  aktivan\r\n");                                     //Ispiši stanje senzora niskog nivoa
00046              }else pc.printf("   Senzor niskog nivoa:  neaktivan\r\n");
00047              
00048              
00049             if(MLsenzor == 1){
00050              pc.printf("   Senzor srednjeg nivoa:aktivan\r\n");                                     //Ispiši stanje senzora visokog nivoa
00051              }else pc.printf("   Senzor srednjeg nivoa:neaktivan\r\n");
00052              
00053              if(HLsenzor == 1){
00054              pc.printf("   Senzor visokog nivoa: aktivan\r\n");                                     //Ispiši stanje senzora visokog nivoa
00055              }else pc.printf("   Senzor visokog nivoa: neaktivan\r\n");
00056              
00057              if(pumpaVode == 1){
00058              pc.printf("   Pumpa vode:           aktivna\r\n");                                     //Ispiši stanje pumpe vode
00059              }else pc.printf("   Pumpa vode:           neaktivna\r\n");
00060              
00061              if(pumpaZaZalijevanje == 1){
00062              pc.printf("   Pumpa za zalijevanje: aktivna\r\n");                                     //Ispiši stanje pumpe za zalijevanje
00063              }else pc.printf("   Pumpa za zalijevanje: neaktivna\r\n");
00064              
00065              if(pumpaGnojiva == 1){
00066              pc.printf("   Pumpa za gnojivo:     aktivna\r\n");                                     //Ispiši stanje pumpe za gnojivo
00067              }else pc.printf("   Pumpa za gnojivo:     neaktivna\r\n\n");
00068             
00069              
00070              timer1.reset();                                                //Resetiraj timer za prikaz podataka
00071              }
00072          
00073         detekcijaNivoa();                                                   //Skoči u funkciju za detekciju nivoa
00074         
00075         
00076         if(start == 1){                                                     //Ako je pritisnuta tipka start
00077         punjenjeSpremnika();                                                //Skoči u funkciju za punjenje spremnika
00078         
00079         zalijevanje();                                                      //Skoči u funkciju zalijevanje
00080         }else pumpaVode = 0, pumpaZaZalijevanje = 0, pumpaGnojiva = 0;      //Inače ugasi sve pumpe (sustav ugašen)
00081         
00082                       
00083                
00084                    
00085               
00086 ///////////////kraj maina i while////////////////////     
00087 } 
00088    }
00089    
00090 
00091 ///////////////Detektiranje aktivnih nivo senzora i paljenje ledica za prikaz/////////////////   
00092 
00093 void detekcijaNivoa() {
00094                      
00095         if (ADCdata > 0.33){                                //Ako je na analognom ulazu vrijednost veća od 0.33 ->trećina spremnika je puna
00096              
00097              LLsenzor = 1;                                  //Postavi njegovu varijablu u 1 i aktiviraj LED vizualizaciju prvog senzora
00098                                        
00099              }else LLsenzor = 0;                            //Inače ugasi   
00100              
00101         if (ADCdata > 0.66){                                //Ako je na analognom ulazu vrijednost veća od 0.66 ->2/3 spremnika je puno
00102              
00103              MLsenzor = 1;                                  //Postavi njegovu varijablu u 1 i aktiviraj LED vizualizaciju drugog senzora
00104                                        
00105              } else MLsenzor = 0;                           //Inače ugasi   
00106              
00107         if (ADCdata > 0.99){                                //Ako je na analognom ulazu vrijednost veća od 0.99 ->spremnik je pun
00108              
00109              HLsenzor = 1;                                  //Postavi njegovu varijablu u 1 i aktiviraj LED vizualizaciju trećeg senzora
00110                                        
00111              }else HLsenzor = 0;                            //Inače ugasi   
00112              
00113  }   
00114  
00115 
00116 //////////////////////////Punjenje spremnika vodom////////////////////////////////////// 
00117 
00118 void punjenjeSpremnika(){                                       
00119      
00120      if(LLsenzor == 0 && HLsenzor == 0){                    //Ako su senzor minimalnog nivoa i maksimalnog nivoa ugašeni
00121          
00122          
00123              
00124          pumpaVode = 1;                                     //Upali pumpu vode
00125                      
00126          
00127          
00128          }
00129          
00130      if(HLsenzor == 1){                                     //Ako je senzor max nivoa aktivan
00131          
00132          pumpaVode = 0;                                     //Ugasi pumpu vode
00133          
00134          }    
00135          
00136 //////////////////////////Punjenje spremnika gnojivom////////////////////////////////////////         
00137          
00138      if(HLsenzor == 1){                                     //Ako je spremnik pun
00139          
00140          timerPumpeGnojiva.start();                         //Pokreni timer doziranja gnojiva
00141          
00142          if(timerPumpeGnojiva.read_ms()< 5000){             //Doziraj dok timer ne dosegne zadanu vrijednost
00143              
00144              pumpaGnojiva = 1;                              //Pali pumpu gnojiva
00145              
00146              }else pumpaGnojiva = 0;                        //Ugasi pumpu gnojiva
00147          
00148          
00149          
00150          
00151          if(timerPumpeGnojiva.read_ms()> 5000){             //Ako je timer odbrojao zadano vrijeme
00152          punjenjeGotovo = 1;                                //Aktiviraj flag da je punjenje gotovo
00153          
00154          }else punjenjeGotovo = 0;
00155          
00156          
00157          
00158              
00159              
00160              
00161          }
00162              
00163      
00164      } //kraj punjenjeSpremnika()
00165      
00166      
00167      
00168 /////////////////////////Zalijevanje//////////////////////////////////////////////////////////
00169 
00170 void zalijevanje(){
00171     
00172   
00173         
00174             if(LLsenzor == 1 && pumpaVode == 0 && punjenjeGotovo == 1){         //Ako vode ima u spremniku, pumpa ne radi i punjenje je gotovo
00175                 
00176             pumpaZaZalijevanje = 1;                                             //Aktiviraj pumpu za zalijevanje
00177             zalijevanjeGotovo = 0;
00178             }else pumpaZaZalijevanje = 0;                                       //Inače ugasi pumpu za zalijevanje
00179             
00180             if(LLsenzor == 0){                                                  //Ako donji senzor nije aktivan =nema vode=zalijevanje gotovo
00181                 
00182             zalijevanjeGotovo = 1;                                              //Aktiviraj flag da je zalijevanje gotovo
00183             }else zalijevanjeGotovo = 0;                                        //Inače zalijevanje nije gotovo                
00184         
00185             if(zalijevanjeGotovo == 1 && punjenjeGotovo == 1){                  //Ako je punjenje i zalijevanje gotovo
00186                  
00187              timerPumpeGnojiva.reset();                                         //Resetiraj timer pumpe gnojiva za novi ciklus punjenja
00188              
00189              }
00190     
00191     
00192     }