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.

Committer:
Filip10
Date:
Fri Mar 29 18:04:47 2019 +0000
Revision:
1:278abedfcbd5
Parent:
0:088191a465cb
.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Filip10 0:088191a465cb 1 #include "mbed.h"
Filip10 0:088191a465cb 2 #include "Dht11.h" //Library za DHT11 senzor temperature i vlage
Filip10 0:088191a465cb 3
Filip10 0:088191a465cb 4
Filip10 0:088191a465cb 5 Serial pc(USBTX, USBRX);
Filip10 0:088191a465cb 6 Dht11 sensor(p26); //Konfiguracija senzora na pin p26
Filip10 0:088191a465cb 7 DigitalIn start(p24); //Konfiguracija start tipkala na pin p14
Filip10 0:088191a465cb 8 AnalogIn Ain(p19); //Konfiguracija analognog ulaza na pin p19 -> spojen potenciometar za simulaciju nivoa tekućine u spremniku
Filip10 0:088191a465cb 9
Filip10 0:088191a465cb 10
Filip10 0:088191a465cb 11 DigitalOut LLsenzor(LED1); //Vizualizacija senzora niskog nivoa u spremniku na ugrađeni LED1
Filip10 0:088191a465cb 12 DigitalOut MLsenzor(LED2); //Vizualizacija senzora srednjeg nivoa u spremniku na ugrađeni LED2
Filip10 0:088191a465cb 13 DigitalOut HLsenzor(LED3); //Vizualizacija senzora visokog nivoa u spremniku na ugrađeni LED3
Filip10 0:088191a465cb 14 bool punjenjeGotovo; //flag za indikaciju kraja punjenja
Filip10 0:088191a465cb 15 bool zalijevanjeGotovo; //flag za indikaciju kraja zalijevanja
Filip10 0:088191a465cb 16 void detekcijaNivoa();
Filip10 0:088191a465cb 17 void punjenjeSpremnika();
Filip10 0:088191a465cb 18 void zalijevanje();
Filip10 0:088191a465cb 19
Filip10 0:088191a465cb 20 DigitalOut pumpaVode(p23); //Konfiguracija izlaza za pumpu vode na pin p23
Filip10 0:088191a465cb 21 DigitalOut pumpaZaZalijevanje(p22); //Konfiguracija izlaza za pumpu za zalijevanje na pin p22
Filip10 0:088191a465cb 22 DigitalOut pumpaGnojiva(p21); //Konfiguracija izlaza za pumpu gnojiva na pin p21
Filip10 0:088191a465cb 23
Filip10 0:088191a465cb 24 Timer timer1; //Deklaracija timera za ocitanje i ispis podataka na TeraTerm
Filip10 0:088191a465cb 25 Timer timerPumpeGnojiva; //Deklaracija timera za trajanje doziranja gnojiva u spremnik
Filip10 0:088191a465cb 26 int temp; //Deklaracija varijable za spremanje vrijednosti temperature
Filip10 0:088191a465cb 27 int vlaga; //Deklaracija varijable za spremanje vrijednosti vlage
Filip10 0:088191a465cb 28 float ADCdata; //Deklaracija varijable za spremanje vrijednosti analogne vrijednosti sa potenciometra
Filip10 0:088191a465cb 29
Filip10 0:088191a465cb 30 int main() {
Filip10 0:088191a465cb 31 while(1){
Filip10 0:088191a465cb 32 timer1.start(); //Pokretanje timera
Filip10 0:088191a465cb 33 sensor.read(); //Pokretanje očitanja DHT senzora
Filip10 0:088191a465cb 34 temp = sensor.getCelsius(); //Spremanje aktualne temperature u varijablu temp
Filip10 0:088191a465cb 35 vlaga = sensor.getHumidity(); //Spremanje aktualne vlage u varijablu vlaga
Filip10 0:088191a465cb 36 ADCdata=Ain; //Spremanje aktualne analogne vrijednosti u varijablu ADCdata
Filip10 0:088191a465cb 37
Filip10 0:088191a465cb 38 if (timer1.read_ms()>=5000) { //Ako je prošlo 5sec
Filip10 0:088191a465cb 39
Filip10 0:088191a465cb 40 pc.printf(" Temperatura: %d\r\n Vlaga: %d\r\n", temp, vlaga); //Ispiši aktualnu temperaturu i vlagu
Filip10 0:088191a465cb 41
Filip10 0:088191a465cb 42 pc.printf(" Nivo spremnika: %f \n\r",ADCdata); //Ispiši aktualnu vrijednost sa analognog ulaza
Filip10 0:088191a465cb 43
Filip10 0:088191a465cb 44 if(LLsenzor == 1){
Filip10 0:088191a465cb 45 pc.printf(" Senzor niskog nivoa: aktivan\r\n"); //Ispiši stanje senzora niskog nivoa
Filip10 0:088191a465cb 46 }else pc.printf(" Senzor niskog nivoa: neaktivan\r\n");
Filip10 0:088191a465cb 47
Filip10 0:088191a465cb 48
Filip10 0:088191a465cb 49 if(MLsenzor == 1){
Filip10 0:088191a465cb 50 pc.printf(" Senzor srednjeg nivoa:aktivan\r\n"); //Ispiši stanje senzora visokog nivoa
Filip10 0:088191a465cb 51 }else pc.printf(" Senzor srednjeg nivoa:neaktivan\r\n");
Filip10 0:088191a465cb 52
Filip10 0:088191a465cb 53 if(HLsenzor == 1){
Filip10 0:088191a465cb 54 pc.printf(" Senzor visokog nivoa: aktivan\r\n"); //Ispiši stanje senzora visokog nivoa
Filip10 0:088191a465cb 55 }else pc.printf(" Senzor visokog nivoa: neaktivan\r\n");
Filip10 0:088191a465cb 56
Filip10 0:088191a465cb 57 if(pumpaVode == 1){
Filip10 0:088191a465cb 58 pc.printf(" Pumpa vode: aktivna\r\n"); //Ispiši stanje pumpe vode
Filip10 0:088191a465cb 59 }else pc.printf(" Pumpa vode: neaktivna\r\n");
Filip10 0:088191a465cb 60
Filip10 0:088191a465cb 61 if(pumpaZaZalijevanje == 1){
Filip10 0:088191a465cb 62 pc.printf(" Pumpa za zalijevanje: aktivna\r\n"); //Ispiši stanje pumpe za zalijevanje
Filip10 0:088191a465cb 63 }else pc.printf(" Pumpa za zalijevanje: neaktivna\r\n");
Filip10 0:088191a465cb 64
Filip10 0:088191a465cb 65 if(pumpaGnojiva == 1){
Filip10 0:088191a465cb 66 pc.printf(" Pumpa za gnojivo: aktivna\r\n"); //Ispiši stanje pumpe za gnojivo
Filip10 0:088191a465cb 67 }else pc.printf(" Pumpa za gnojivo: neaktivna\r\n\n");
Filip10 0:088191a465cb 68
Filip10 0:088191a465cb 69
Filip10 0:088191a465cb 70 timer1.reset(); //Resetiraj timer za prikaz podataka
Filip10 0:088191a465cb 71 }
Filip10 0:088191a465cb 72
Filip10 0:088191a465cb 73 detekcijaNivoa(); //Skoči u funkciju za detekciju nivoa
Filip10 0:088191a465cb 74
Filip10 0:088191a465cb 75
Filip10 0:088191a465cb 76 if(start == 1){ //Ako je pritisnuta tipka start
Filip10 0:088191a465cb 77 punjenjeSpremnika(); //Skoči u funkciju za punjenje spremnika
Filip10 0:088191a465cb 78
Filip10 0:088191a465cb 79 zalijevanje(); //Skoči u funkciju zalijevanje
Filip10 0:088191a465cb 80 }else pumpaVode = 0, pumpaZaZalijevanje = 0, pumpaGnojiva = 0; //Inače ugasi sve pumpe (sustav ugašen)
Filip10 0:088191a465cb 81
Filip10 0:088191a465cb 82
Filip10 0:088191a465cb 83
Filip10 0:088191a465cb 84
Filip10 0:088191a465cb 85
Filip10 0:088191a465cb 86 ///////////////kraj maina i while////////////////////
Filip10 0:088191a465cb 87 }
Filip10 0:088191a465cb 88 }
Filip10 0:088191a465cb 89
Filip10 0:088191a465cb 90
Filip10 0:088191a465cb 91 ///////////////Detektiranje aktivnih nivo senzora i paljenje ledica za prikaz/////////////////
Filip10 0:088191a465cb 92
Filip10 0:088191a465cb 93 void detekcijaNivoa() {
Filip10 0:088191a465cb 94
Filip10 0:088191a465cb 95 if (ADCdata > 0.33){ //Ako je na analognom ulazu vrijednost veća od 0.33 ->trećina spremnika je puna
Filip10 0:088191a465cb 96
Filip10 0:088191a465cb 97 LLsenzor = 1; //Postavi njegovu varijablu u 1 i aktiviraj LED vizualizaciju prvog senzora
Filip10 0:088191a465cb 98
Filip10 0:088191a465cb 99 }else LLsenzor = 0; //Inače ugasi
Filip10 0:088191a465cb 100
Filip10 0:088191a465cb 101 if (ADCdata > 0.66){ //Ako je na analognom ulazu vrijednost veća od 0.66 ->2/3 spremnika je puno
Filip10 0:088191a465cb 102
Filip10 0:088191a465cb 103 MLsenzor = 1; //Postavi njegovu varijablu u 1 i aktiviraj LED vizualizaciju drugog senzora
Filip10 0:088191a465cb 104
Filip10 0:088191a465cb 105 } else MLsenzor = 0; //Inače ugasi
Filip10 0:088191a465cb 106
Filip10 0:088191a465cb 107 if (ADCdata > 0.99){ //Ako je na analognom ulazu vrijednost veća od 0.99 ->spremnik je pun
Filip10 0:088191a465cb 108
Filip10 0:088191a465cb 109 HLsenzor = 1; //Postavi njegovu varijablu u 1 i aktiviraj LED vizualizaciju trećeg senzora
Filip10 0:088191a465cb 110
Filip10 0:088191a465cb 111 }else HLsenzor = 0; //Inače ugasi
Filip10 0:088191a465cb 112
Filip10 0:088191a465cb 113 }
Filip10 0:088191a465cb 114
Filip10 0:088191a465cb 115
Filip10 0:088191a465cb 116 //////////////////////////Punjenje spremnika vodom//////////////////////////////////////
Filip10 0:088191a465cb 117
Filip10 0:088191a465cb 118 void punjenjeSpremnika(){
Filip10 0:088191a465cb 119
Filip10 0:088191a465cb 120 if(LLsenzor == 0 && HLsenzor == 0){ //Ako su senzor minimalnog nivoa i maksimalnog nivoa ugašeni
Filip10 0:088191a465cb 121
Filip10 0:088191a465cb 122
Filip10 0:088191a465cb 123
Filip10 0:088191a465cb 124 pumpaVode = 1; //Upali pumpu vode
Filip10 0:088191a465cb 125
Filip10 0:088191a465cb 126
Filip10 0:088191a465cb 127
Filip10 0:088191a465cb 128 }
Filip10 0:088191a465cb 129
Filip10 0:088191a465cb 130 if(HLsenzor == 1){ //Ako je senzor max nivoa aktivan
Filip10 0:088191a465cb 131
Filip10 0:088191a465cb 132 pumpaVode = 0; //Ugasi pumpu vode
Filip10 0:088191a465cb 133
Filip10 0:088191a465cb 134 }
Filip10 0:088191a465cb 135
Filip10 0:088191a465cb 136 //////////////////////////Punjenje spremnika gnojivom////////////////////////////////////////
Filip10 0:088191a465cb 137
Filip10 0:088191a465cb 138 if(HLsenzor == 1){ //Ako je spremnik pun
Filip10 0:088191a465cb 139
Filip10 0:088191a465cb 140 timerPumpeGnojiva.start(); //Pokreni timer doziranja gnojiva
Filip10 0:088191a465cb 141
Filip10 0:088191a465cb 142 if(timerPumpeGnojiva.read_ms()< 5000){ //Doziraj dok timer ne dosegne zadanu vrijednost
Filip10 0:088191a465cb 143
Filip10 0:088191a465cb 144 pumpaGnojiva = 1; //Pali pumpu gnojiva
Filip10 0:088191a465cb 145
Filip10 0:088191a465cb 146 }else pumpaGnojiva = 0; //Ugasi pumpu gnojiva
Filip10 0:088191a465cb 147
Filip10 0:088191a465cb 148
Filip10 0:088191a465cb 149
Filip10 0:088191a465cb 150
Filip10 0:088191a465cb 151 if(timerPumpeGnojiva.read_ms()> 5000){ //Ako je timer odbrojao zadano vrijeme
Filip10 0:088191a465cb 152 punjenjeGotovo = 1; //Aktiviraj flag da je punjenje gotovo
Filip10 0:088191a465cb 153
Filip10 0:088191a465cb 154 }else punjenjeGotovo = 0;
Filip10 0:088191a465cb 155
Filip10 0:088191a465cb 156
Filip10 0:088191a465cb 157
Filip10 0:088191a465cb 158
Filip10 0:088191a465cb 159
Filip10 0:088191a465cb 160
Filip10 0:088191a465cb 161 }
Filip10 0:088191a465cb 162
Filip10 0:088191a465cb 163
Filip10 0:088191a465cb 164 } //kraj punjenjeSpremnika()
Filip10 0:088191a465cb 165
Filip10 0:088191a465cb 166
Filip10 0:088191a465cb 167
Filip10 0:088191a465cb 168 /////////////////////////Zalijevanje//////////////////////////////////////////////////////////
Filip10 0:088191a465cb 169
Filip10 0:088191a465cb 170 void zalijevanje(){
Filip10 0:088191a465cb 171
Filip10 0:088191a465cb 172
Filip10 0:088191a465cb 173
Filip10 0:088191a465cb 174 if(LLsenzor == 1 && pumpaVode == 0 && punjenjeGotovo == 1){ //Ako vode ima u spremniku, pumpa ne radi i punjenje je gotovo
Filip10 0:088191a465cb 175
Filip10 0:088191a465cb 176 pumpaZaZalijevanje = 1; //Aktiviraj pumpu za zalijevanje
Filip10 0:088191a465cb 177 zalijevanjeGotovo = 0;
Filip10 0:088191a465cb 178 }else pumpaZaZalijevanje = 0; //Inače ugasi pumpu za zalijevanje
Filip10 0:088191a465cb 179
Filip10 0:088191a465cb 180 if(LLsenzor == 0){ //Ako donji senzor nije aktivan =nema vode=zalijevanje gotovo
Filip10 0:088191a465cb 181
Filip10 0:088191a465cb 182 zalijevanjeGotovo = 1; //Aktiviraj flag da je zalijevanje gotovo
Filip10 0:088191a465cb 183 }else zalijevanjeGotovo = 0; //Inače zalijevanje nije gotovo
Filip10 0:088191a465cb 184
Filip10 0:088191a465cb 185 if(zalijevanjeGotovo == 1 && punjenjeGotovo == 1){ //Ako je punjenje i zalijevanje gotovo
Filip10 0:088191a465cb 186
Filip10 0:088191a465cb 187 timerPumpeGnojiva.reset(); //Resetiraj timer pumpe gnojiva za novi ciklus punjenja
Filip10 0:088191a465cb 188
Filip10 0:088191a465cb 189 }
Filip10 0:088191a465cb 190
Filip10 0:088191a465cb 191
Filip10 0:088191a465cb 192 }