Klimatizacija prostorije
Dependencies: mbed Veza_sa_racunalom
Shema spoja
main.cpp@1:d2d8fd7c95f1, 2021-05-07 (annotated)
- Committer:
- benqeman
- Date:
- Fri May 07 11:57:26 2021 +0000
- Revision:
- 1:d2d8fd7c95f1
- Parent:
- 0:3707878d8e8d
Klimatizacija prostorije
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
benqeman | 0:3707878d8e8d | 1 | #include "mbed.h" |
benqeman | 0:3707878d8e8d | 2 | #include "Veza_s_racunalom.h" |
benqeman | 0:3707878d8e8d | 3 | |
benqeman | 0:3707878d8e8d | 4 | |
benqeman | 0:3707878d8e8d | 5 | AnalogIn Ain0(A0); //Mjerena temperatura (pot) |
benqeman | 0:3707878d8e8d | 6 | AnalogIn Ain1(A1); //Postavna temperatura (pot) |
benqeman | 0:3707878d8e8d | 7 | InterruptIn Start(D2); //Tipka za start |
benqeman | 0:3707878d8e8d | 8 | InterruptIn Stop(D3); //Tipka za stop |
benqeman | 0:3707878d8e8d | 9 | InterruptIn AlarmOFF(D4); //Tipka za potvrdu alarma |
benqeman | 0:3707878d8e8d | 10 | InterruptIn Pozar(D8); //Signal s detektora pozara (tipkalo) |
benqeman | 0:3707878d8e8d | 11 | DigitalOut ISKLJUCENO(D13); //RGB LED - CRVENO |
benqeman | 0:3707878d8e8d | 12 | DigitalOut UKLJUCENO(D12); //RGB LED - ZELENO |
benqeman | 0:3707878d8e8d | 13 | PwmOut Zvucnik(D9); //Izlaz na buzzer |
benqeman | 0:3707878d8e8d | 14 | PwmOut Motor(D10); //Upravljački signal |
benqeman | 0:3707878d8e8d | 15 | |
benqeman | 0:3707878d8e8d | 16 | |
benqeman | 0:3707878d8e8d | 17 | Timer debounce; //Timer za debounce |
benqeman | 0:3707878d8e8d | 18 | |
benqeman | 0:3707878d8e8d | 19 | Ticker slanje; //Ticker za periodično slanje podataka na PC |
benqeman | 0:3707878d8e8d | 20 | Ticker alarmi; //Ticker za upravljanje alarmiranjem |
benqeman | 0:3707878d8e8d | 21 | |
benqeman | 0:3707878d8e8d | 22 | |
benqeman | 0:3707878d8e8d | 23 | |
benqeman | 0:3707878d8e8d | 24 | float MjTemp,ZelTemp; //Varijable mjerene i zeljene temperature |
benqeman | 0:3707878d8e8d | 25 | int ModRada; //Varijabla moda rada (1=RAD,0=ISK,2=POZAR) |
benqeman | 0:3707878d8e8d | 26 | int zvuk; //Pomocna varijabla za izmjenicni zvuk alarma |
benqeman | 0:3707878d8e8d | 27 | |
benqeman | 0:3707878d8e8d | 28 | void inicijalizacija(){ //inicijalizacija pocetnog stanja |
benqeman | 0:3707878d8e8d | 29 | UKLJUCENO=0; |
benqeman | 0:3707878d8e8d | 30 | ISKLJUCENO=1; |
benqeman | 0:3707878d8e8d | 31 | ModRada=0; |
benqeman | 0:3707878d8e8d | 32 | |
benqeman | 0:3707878d8e8d | 33 | } |
benqeman | 0:3707878d8e8d | 34 | class Zmigaj //Klasa postavljanja alarmnog izlaza |
benqeman | 0:3707878d8e8d | 35 | { //Definiranje izlaza alarma |
benqeman | 0:3707878d8e8d | 36 | public: |
benqeman | 0:3707878d8e8d | 37 | Zmigaj(PinName pin) : _pin(pin) |
benqeman | 0:3707878d8e8d | 38 | { |
benqeman | 0:3707878d8e8d | 39 | |
benqeman | 0:3707878d8e8d | 40 | _pin = 0; |
benqeman | 0:3707878d8e8d | 41 | } |
benqeman | 0:3707878d8e8d | 42 | void zmigni() |
benqeman | 0:3707878d8e8d | 43 | { |
benqeman | 0:3707878d8e8d | 44 | _pin = !_pin; |
benqeman | 0:3707878d8e8d | 45 | } |
benqeman | 0:3707878d8e8d | 46 | |
benqeman | 0:3707878d8e8d | 47 | private: |
benqeman | 0:3707878d8e8d | 48 | DigitalOut _pin; |
benqeman | 0:3707878d8e8d | 49 | }; |
benqeman | 0:3707878d8e8d | 50 | |
benqeman | 0:3707878d8e8d | 51 | Zmigaj ALARM(D11); |
benqeman | 0:3707878d8e8d | 52 | |
benqeman | 0:3707878d8e8d | 53 | void ZvukAlarma (){ //Definiran zvuk alarma |
benqeman | 0:3707878d8e8d | 54 | if (zvuk==0){ |
benqeman | 0:3707878d8e8d | 55 | Zvucnik.period(0.003f); |
benqeman | 0:3707878d8e8d | 56 | Zvucnik.write(0.50f); |
benqeman | 0:3707878d8e8d | 57 | zvuk=1;} |
benqeman | 0:3707878d8e8d | 58 | else if (zvuk==1){ |
benqeman | 0:3707878d8e8d | 59 | Zvucnik.period(0.004f); |
benqeman | 0:3707878d8e8d | 60 | Zvucnik.write(0.50f); |
benqeman | 0:3707878d8e8d | 61 | zvuk=0; |
benqeman | 0:3707878d8e8d | 62 | } |
benqeman | 0:3707878d8e8d | 63 | } |
benqeman | 0:3707878d8e8d | 64 | |
benqeman | 0:3707878d8e8d | 65 | void AlarmON(){ //Funkcija za svjetlo i zvuk alarma |
benqeman | 0:3707878d8e8d | 66 | if (ModRada==2){ |
benqeman | 0:3707878d8e8d | 67 | ALARM.zmigni(); |
benqeman | 0:3707878d8e8d | 68 | ZvukAlarma(); |
benqeman | 0:3707878d8e8d | 69 | } |
benqeman | 0:3707878d8e8d | 70 | |
benqeman | 0:3707878d8e8d | 71 | } |
benqeman | 0:3707878d8e8d | 72 | |
benqeman | 0:3707878d8e8d | 73 | void Ispis (void){ |
benqeman | 0:3707878d8e8d | 74 | if (ModRada==1){ //Slanje info na računalo |
benqeman | 0:3707878d8e8d | 75 | Slanje(MjTemp,ZelTemp); |
benqeman | 0:3707878d8e8d | 76 | } |
benqeman | 0:3707878d8e8d | 77 | } |
benqeman | 0:3707878d8e8d | 78 | |
benqeman | 0:3707878d8e8d | 79 | |
benqeman | 0:3707878d8e8d | 80 | |
benqeman | 0:3707878d8e8d | 81 | void ModAlarm (){ //Funkcija za paljenje alarma |
benqeman | 0:3707878d8e8d | 82 | if (debounce.read_ms()>200){ |
benqeman | 0:3707878d8e8d | 83 | ModRada=2 ; |
benqeman | 0:3707878d8e8d | 84 | UKLJUCENO=0; |
benqeman | 0:3707878d8e8d | 85 | ISKLJUCENO=0; |
benqeman | 0:3707878d8e8d | 86 | pc.printf("DETEKTIRAN POZAR\n\r"); |
benqeman | 0:3707878d8e8d | 87 | pc.printf("ALARM UKLJUCEN!!!\n\r"); |
benqeman | 0:3707878d8e8d | 88 | debounce.reset(); |
benqeman | 0:3707878d8e8d | 89 | } |
benqeman | 0:3707878d8e8d | 90 | } |
benqeman | 0:3707878d8e8d | 91 | |
benqeman | 0:3707878d8e8d | 92 | void GasiAlarm (){ //Funkcija za gašenje alarma |
benqeman | 0:3707878d8e8d | 93 | if ((debounce.read_ms()>200)&(ModRada==2)){ |
benqeman | 0:3707878d8e8d | 94 | ModRada=0 ; |
benqeman | 0:3707878d8e8d | 95 | UKLJUCENO=0; |
benqeman | 0:3707878d8e8d | 96 | ISKLJUCENO=1; |
benqeman | 0:3707878d8e8d | 97 | Zvucnik=0; |
benqeman | 0:3707878d8e8d | 98 | pc.printf("ALARM ISKLJUCEN\n\r"); |
benqeman | 0:3707878d8e8d | 99 | pc.printf("SUSTAV ISKLJUCEN\n\r"); |
benqeman | 0:3707878d8e8d | 100 | debounce.reset(); |
benqeman | 0:3707878d8e8d | 101 | } |
benqeman | 0:3707878d8e8d | 102 | } |
benqeman | 0:3707878d8e8d | 103 | |
benqeman | 0:3707878d8e8d | 104 | void UpaliPogon (){ //Funkcija za pokretanje regulacije |
benqeman | 0:3707878d8e8d | 105 | if ((debounce.read_ms()>200)&(ModRada==0)){ |
benqeman | 0:3707878d8e8d | 106 | ModRada=1 ; |
benqeman | 0:3707878d8e8d | 107 | UKLJUCENO=1; |
benqeman | 0:3707878d8e8d | 108 | ISKLJUCENO=0; |
benqeman | 0:3707878d8e8d | 109 | pc.printf("SUSTAV UKLJUCEN\n\r"); |
benqeman | 0:3707878d8e8d | 110 | debounce.reset(); |
benqeman | 0:3707878d8e8d | 111 | } |
benqeman | 0:3707878d8e8d | 112 | } |
benqeman | 0:3707878d8e8d | 113 | |
benqeman | 0:3707878d8e8d | 114 | void UgasiPogon (){ //Funkcija za iskljucivanje regulacije |
benqeman | 0:3707878d8e8d | 115 | if ((debounce.read_ms()>200)&(ModRada==1)){ |
benqeman | 0:3707878d8e8d | 116 | ModRada=0 ; |
benqeman | 0:3707878d8e8d | 117 | UKLJUCENO=0; |
benqeman | 0:3707878d8e8d | 118 | ISKLJUCENO=1; |
benqeman | 0:3707878d8e8d | 119 | pc.printf("SUSTAV ISKLJUCEN\n\r"); |
benqeman | 0:3707878d8e8d | 120 | debounce.reset(); |
benqeman | 0:3707878d8e8d | 121 | } |
benqeman | 0:3707878d8e8d | 122 | } |
benqeman | 0:3707878d8e8d | 123 | |
benqeman | 0:3707878d8e8d | 124 | int main() { |
benqeman | 0:3707878d8e8d | 125 | Motor.period(0.01); //Postavljen fiksan period pwm-a za motor |
benqeman | 0:3707878d8e8d | 126 | inicijalizacija(); //Postavljanje početnih uvjeta sustava |
benqeman | 0:3707878d8e8d | 127 | debounce.start(); //Debounce timer |
benqeman | 0:3707878d8e8d | 128 | Pozar.rise(&ModAlarm); //Interrupt koji stvara detektor požara |
benqeman | 0:3707878d8e8d | 129 | slanje.attach(&Ispis, 1); //Ispis podataka na računalo pomocu ticker-a |
benqeman | 0:3707878d8e8d | 130 | alarmi.attach(&AlarmON,0.2); //Definicija zvuka i svjetlosnog signala alarma |
benqeman | 0:3707878d8e8d | 131 | AlarmOFF.rise(&GasiAlarm); //Interrupt tipke za isklj. alarma |
benqeman | 0:3707878d8e8d | 132 | Start.rise(&UpaliPogon); //Interrupt tipke za pokretanje regulacije |
benqeman | 0:3707878d8e8d | 133 | Stop.rise(&UgasiPogon); //Interrupt tipke za iskljucivanje regulacije |
benqeman | 0:3707878d8e8d | 134 | float delta; //Varijabla za racunanje razlike izmedu Zelj i Mjereno |
benqeman | 0:3707878d8e8d | 135 | float dutycycle; |
benqeman | 0:3707878d8e8d | 136 | while (1) { |
benqeman | 0:3707878d8e8d | 137 | if (ModRada==1){ //ModRada = 1 znaci da je regulacija ukljucena |
benqeman | 0:3707878d8e8d | 138 | ZelTemp=Ain1*22+18; //Postavna temperatura (pot) od 18 - 40 °C |
benqeman | 0:3707878d8e8d | 139 | MjTemp=Ain0*40; //Mjerena temperatura (pot) od 0 - 40°C |
benqeman | 0:3707878d8e8d | 140 | delta = abs(int(ZelTemp)-int(MjTemp)); //Razlika Mj i Zel |
benqeman | 0:3707878d8e8d | 141 | if (delta <1) { //Mrtva zona |
benqeman | 0:3707878d8e8d | 142 | dutycycle=0;} |
benqeman | 0:3707878d8e8d | 143 | else{ |
benqeman | 0:3707878d8e8d | 144 | dutycycle=(delta*2.5)/100; //Regulacija izlaza s obzirom na razliku |
benqeman | 0:3707878d8e8d | 145 | } |
benqeman | 0:3707878d8e8d | 146 | } |
benqeman | 0:3707878d8e8d | 147 | else dutycycle=0; |
benqeman | 0:3707878d8e8d | 148 | Motor.write(dutycycle); //Upravljacki signal |
benqeman | 0:3707878d8e8d | 149 | } |
benqeman | 0:3707878d8e8d | 150 | } |