![](/media/cache/group/default_image.jpg.50x50_q85.jpg)
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.
Diff: main.cpp
- Revision:
- 0:088191a465cb
diff -r 000000000000 -r 088191a465cb main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Fri Mar 29 18:03:07 2019 +0000 @@ -0,0 +1,192 @@ +#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 + + } + + + } \ No newline at end of file