Program za ispit

Dependencies:   mbed Navodnjavanje

Program za navodnjavanje vrta, dht11 senzorom mjeri se vlaga i temperatura čije je očitanje moguće preko terminala, također na terminalu je moguće vidjeti trenutne statuse senzora nivoa vode u spremniku, te samih pumpi.

Sustav je aktivan ako je sklopka spojena na p24 uključena, inače sustav gasi sve funkcije.

Za potrebe simulacije potenciometar spojen na analogni ulaz mbeda simulira punjenje spremnika tekućinom. Kad se spremnik napuni do vrha vodom kreće automatsko doziranje sredstva za prihranu, nakon što taj dio procesa završi pali se pumpa za zaljevanje i spremnik se prazni.

main.cpp

Committer:
Filip10
Date:
2019-03-29
Revision:
1:278abedfcbd5
Parent:
0:088191a465cb

File content as of revision 1:278abedfcbd5:

#include "mbed.h"
#include "Dht11.h"                                          //Library za DHT11 senzor temperature i vlage


Serial pc(USBTX, USBRX);                                    
Dht11 sensor(p26);                                          //Konfiguracija senzora na pin p26
DigitalIn start(p24);                                       //Konfiguracija start tipkala na pin p14
AnalogIn Ain(p19);                                          //Konfiguracija analognog ulaza na pin p19 -> spojen potenciometar za simulaciju nivoa tekućine u spremniku        


DigitalOut LLsenzor(LED1);                                  //Vizualizacija senzora niskog nivoa u spremniku na ugrađeni LED1
DigitalOut MLsenzor(LED2);                                  //Vizualizacija senzora srednjeg nivoa u spremniku na ugrađeni LED2
DigitalOut HLsenzor(LED3);                                  //Vizualizacija senzora visokog nivoa u spremniku na ugrađeni LED3
bool punjenjeGotovo;                                        //flag za indikaciju kraja punjenja
bool zalijevanjeGotovo;                                     //flag za indikaciju kraja zalijevanja
void detekcijaNivoa();
void punjenjeSpremnika();
void zalijevanje();

DigitalOut pumpaVode(p23);                                  //Konfiguracija izlaza za pumpu vode na pin p23
DigitalOut pumpaZaZalijevanje(p22);                         //Konfiguracija izlaza za pumpu za zalijevanje na pin p22
DigitalOut pumpaGnojiva(p21);                               //Konfiguracija izlaza za pumpu gnojiva na pin p21

Timer timer1;                                               //Deklaracija timera za ocitanje i ispis podataka na TeraTerm
Timer timerPumpeGnojiva;                                    //Deklaracija timera za trajanje doziranja gnojiva u spremnik
int temp;                                                   //Deklaracija varijable za spremanje vrijednosti temperature
int vlaga;                                                  //Deklaracija varijable za spremanje vrijednosti vlage
float ADCdata;                                              //Deklaracija varijable za spremanje vrijednosti analogne vrijednosti sa potenciometra

int main() {
        while(1){
            timer1.start();                                 //Pokretanje timera                
            sensor.read();                                  //Pokretanje očitanja DHT senzora    
            temp = sensor.getCelsius();                     //Spremanje aktualne temperature u varijablu temp
            vlaga = sensor.getHumidity();                   //Spremanje aktualne vlage u varijablu vlaga
            ADCdata=Ain;                                    //Spremanje aktualne analogne vrijednosti u varijablu ADCdata
             
        if (timer1.read_ms()>=5000) {                       //Ako je prošlo 5sec
             
             pc.printf("   Temperatura: %d\r\n         Vlaga: %d\r\n", temp, vlaga);                //Ispiši aktualnu temperaturu i vlagu
             
             pc.printf("   Nivo spremnika: %f \n\r",ADCdata);                                       //Ispiši aktualnu vrijednost sa analognog ulaza
             
             if(LLsenzor == 1){
             pc.printf("   Senzor niskog nivoa:  aktivan\r\n");                                     //Ispiši stanje senzora niskog nivoa
             }else pc.printf("   Senzor niskog nivoa:  neaktivan\r\n");
             
             
            if(MLsenzor == 1){
             pc.printf("   Senzor srednjeg nivoa:aktivan\r\n");                                     //Ispiši stanje senzora visokog nivoa
             }else pc.printf("   Senzor srednjeg nivoa:neaktivan\r\n");
             
             if(HLsenzor == 1){
             pc.printf("   Senzor visokog nivoa: aktivan\r\n");                                     //Ispiši stanje senzora visokog nivoa
             }else pc.printf("   Senzor visokog nivoa: neaktivan\r\n");
             
             if(pumpaVode == 1){
             pc.printf("   Pumpa vode:           aktivna\r\n");                                     //Ispiši stanje pumpe vode
             }else pc.printf("   Pumpa vode:           neaktivna\r\n");
             
             if(pumpaZaZalijevanje == 1){
             pc.printf("   Pumpa za zalijevanje: aktivna\r\n");                                     //Ispiši stanje pumpe za zalijevanje
             }else pc.printf("   Pumpa za zalijevanje: neaktivna\r\n");
             
             if(pumpaGnojiva == 1){
             pc.printf("   Pumpa za gnojivo:     aktivna\r\n");                                     //Ispiši stanje pumpe za gnojivo
             }else pc.printf("   Pumpa za gnojivo:     neaktivna\r\n\n");
            
             
             timer1.reset();                                                //Resetiraj timer za prikaz podataka
             }
         
        detekcijaNivoa();                                                   //Skoči u funkciju za detekciju nivoa
        
        
        if(start == 1){                                                     //Ako je pritisnuta tipka start
        punjenjeSpremnika();                                                //Skoči u funkciju za punjenje spremnika
        
        zalijevanje();                                                      //Skoči u funkciju zalijevanje
        }else pumpaVode = 0, pumpaZaZalijevanje = 0, pumpaGnojiva = 0;      //Inače ugasi sve pumpe (sustav ugašen)
        
                      
               
                   
              
///////////////kraj maina i while////////////////////     
} 
   }
   

///////////////Detektiranje aktivnih nivo senzora i paljenje ledica za prikaz/////////////////   

void detekcijaNivoa() {
                     
        if (ADCdata > 0.33){                                //Ako je na analognom ulazu vrijednost veća od 0.33 ->trećina spremnika je puna
             
             LLsenzor = 1;                                  //Postavi njegovu varijablu u 1 i aktiviraj LED vizualizaciju prvog senzora
                                       
             }else LLsenzor = 0;                            //Inače ugasi   
             
        if (ADCdata > 0.66){                                //Ako je na analognom ulazu vrijednost veća od 0.66 ->2/3 spremnika je puno
             
             MLsenzor = 1;                                  //Postavi njegovu varijablu u 1 i aktiviraj LED vizualizaciju drugog senzora
                                       
             } else MLsenzor = 0;                           //Inače ugasi   
             
        if (ADCdata > 0.99){                                //Ako je na analognom ulazu vrijednost veća od 0.99 ->spremnik je pun
             
             HLsenzor = 1;                                  //Postavi njegovu varijablu u 1 i aktiviraj LED vizualizaciju trećeg senzora
                                       
             }else HLsenzor = 0;                            //Inače ugasi   
             
 }   
 

//////////////////////////Punjenje spremnika vodom////////////////////////////////////// 

void punjenjeSpremnika(){                                       
     
     if(LLsenzor == 0 && HLsenzor == 0){                    //Ako su senzor minimalnog nivoa i maksimalnog nivoa ugašeni
         
         
             
         pumpaVode = 1;                                     //Upali pumpu vode
                     
         
         
         }
         
     if(HLsenzor == 1){                                     //Ako je senzor max nivoa aktivan
         
         pumpaVode = 0;                                     //Ugasi pumpu vode
         
         }    
         
//////////////////////////Punjenje spremnika gnojivom////////////////////////////////////////         
         
     if(HLsenzor == 1){                                     //Ako je spremnik pun
         
         timerPumpeGnojiva.start();                         //Pokreni timer doziranja gnojiva
         
         if(timerPumpeGnojiva.read_ms()< 5000){             //Doziraj dok timer ne dosegne zadanu vrijednost
             
             pumpaGnojiva = 1;                              //Pali pumpu gnojiva
             
             }else pumpaGnojiva = 0;                        //Ugasi pumpu gnojiva
         
         
         
         
         if(timerPumpeGnojiva.read_ms()> 5000){             //Ako je timer odbrojao zadano vrijeme
         punjenjeGotovo = 1;                                //Aktiviraj flag da je punjenje gotovo
         
         }else punjenjeGotovo = 0;
         
         
         
             
             
             
         }
             
     
     } //kraj punjenjeSpremnika()
     
     
     
/////////////////////////Zalijevanje//////////////////////////////////////////////////////////

void zalijevanje(){
    
  
        
            if(LLsenzor == 1 && pumpaVode == 0 && punjenjeGotovo == 1){         //Ako vode ima u spremniku, pumpa ne radi i punjenje je gotovo
                
            pumpaZaZalijevanje = 1;                                             //Aktiviraj pumpu za zalijevanje
            zalijevanjeGotovo = 0;
            }else pumpaZaZalijevanje = 0;                                       //Inače ugasi pumpu za zalijevanje
            
            if(LLsenzor == 0){                                                  //Ako donji senzor nije aktivan =nema vode=zalijevanje gotovo
                
            zalijevanjeGotovo = 1;                                              //Aktiviraj flag da je zalijevanje gotovo
            }else zalijevanjeGotovo = 0;                                        //Inače zalijevanje nije gotovo                
        
            if(zalijevanjeGotovo == 1 && punjenjeGotovo == 1){                  //Ako je punjenje i zalijevanje gotovo
                 
             timerPumpeGnojiva.reset();                                         //Resetiraj timer pumpe gnojiva za novi ciklus punjenja
             
             }
    
    
    }