Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed Navodnjavanje
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 }
Generated on Fri Jul 22 2022 23:38:57 by
1.7.2