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:
- 0:088191a465cb
File content as of revision 0:088191a465cb:
#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 } }