Klimatizacija prostorije

Dependencies:   mbed Veza_sa_racunalom

Shema spoja

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?

UserRevisionLine numberNew 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 }