Klimatizacija prostorije
Dependencies: mbed Veza_sa_racunalom
Shema spoja
Diff: main.cpp
- Revision:
- 0:3707878d8e8d
diff -r 000000000000 -r 3707878d8e8d main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Fri May 07 11:42:18 2021 +0000 @@ -0,0 +1,150 @@ +#include "mbed.h" +#include "Veza_s_racunalom.h" + + +AnalogIn Ain0(A0); //Mjerena temperatura (pot) +AnalogIn Ain1(A1); //Postavna temperatura (pot) +InterruptIn Start(D2); //Tipka za start +InterruptIn Stop(D3); //Tipka za stop +InterruptIn AlarmOFF(D4); //Tipka za potvrdu alarma +InterruptIn Pozar(D8); //Signal s detektora pozara (tipkalo) +DigitalOut ISKLJUCENO(D13); //RGB LED - CRVENO +DigitalOut UKLJUCENO(D12); //RGB LED - ZELENO +PwmOut Zvucnik(D9); //Izlaz na buzzer +PwmOut Motor(D10); //Upravljački signal + + +Timer debounce; //Timer za debounce + +Ticker slanje; //Ticker za periodično slanje podataka na PC +Ticker alarmi; //Ticker za upravljanje alarmiranjem + + + +float MjTemp,ZelTemp; //Varijable mjerene i zeljene temperature +int ModRada; //Varijabla moda rada (1=RAD,0=ISK,2=POZAR) +int zvuk; //Pomocna varijabla za izmjenicni zvuk alarma + +void inicijalizacija(){ //inicijalizacija pocetnog stanja + UKLJUCENO=0; + ISKLJUCENO=1; + ModRada=0; + + } +class Zmigaj //Klasa postavljanja alarmnog izlaza +{ //Definiranje izlaza alarma +public: + Zmigaj(PinName pin) : _pin(pin) + { + + _pin = 0; + } + void zmigni() + { + _pin = !_pin; + } + +private: + DigitalOut _pin; + }; + +Zmigaj ALARM(D11); + +void ZvukAlarma (){ //Definiran zvuk alarma + if (zvuk==0){ + Zvucnik.period(0.003f); + Zvucnik.write(0.50f); + zvuk=1;} + else if (zvuk==1){ + Zvucnik.period(0.004f); + Zvucnik.write(0.50f); + zvuk=0; + } + } + +void AlarmON(){ //Funkcija za svjetlo i zvuk alarma + if (ModRada==2){ + ALARM.zmigni(); + ZvukAlarma(); + } + +} + +void Ispis (void){ + if (ModRada==1){ //Slanje info na računalo + Slanje(MjTemp,ZelTemp); + } + } + + + +void ModAlarm (){ //Funkcija za paljenje alarma + if (debounce.read_ms()>200){ + ModRada=2 ; + UKLJUCENO=0; + ISKLJUCENO=0; + pc.printf("DETEKTIRAN POZAR\n\r"); + pc.printf("ALARM UKLJUCEN!!!\n\r"); + debounce.reset(); + } + } + +void GasiAlarm (){ //Funkcija za gašenje alarma + if ((debounce.read_ms()>200)&(ModRada==2)){ + ModRada=0 ; + UKLJUCENO=0; + ISKLJUCENO=1; + Zvucnik=0; + pc.printf("ALARM ISKLJUCEN\n\r"); + pc.printf("SUSTAV ISKLJUCEN\n\r"); + debounce.reset(); + } + } + +void UpaliPogon (){ //Funkcija za pokretanje regulacije + if ((debounce.read_ms()>200)&(ModRada==0)){ + ModRada=1 ; + UKLJUCENO=1; + ISKLJUCENO=0; + pc.printf("SUSTAV UKLJUCEN\n\r"); + debounce.reset(); + } + } + +void UgasiPogon (){ //Funkcija za iskljucivanje regulacije + if ((debounce.read_ms()>200)&(ModRada==1)){ + ModRada=0 ; + UKLJUCENO=0; + ISKLJUCENO=1; + pc.printf("SUSTAV ISKLJUCEN\n\r"); + debounce.reset(); + } + } + +int main() { + Motor.period(0.01); //Postavljen fiksan period pwm-a za motor + inicijalizacija(); //Postavljanje početnih uvjeta sustava + debounce.start(); //Debounce timer + Pozar.rise(&ModAlarm); //Interrupt koji stvara detektor požara + slanje.attach(&Ispis, 1); //Ispis podataka na računalo pomocu ticker-a + alarmi.attach(&AlarmON,0.2); //Definicija zvuka i svjetlosnog signala alarma + AlarmOFF.rise(&GasiAlarm); //Interrupt tipke za isklj. alarma + Start.rise(&UpaliPogon); //Interrupt tipke za pokretanje regulacije + Stop.rise(&UgasiPogon); //Interrupt tipke za iskljucivanje regulacije + float delta; //Varijabla za racunanje razlike izmedu Zelj i Mjereno + float dutycycle; + while (1) { + if (ModRada==1){ //ModRada = 1 znaci da je regulacija ukljucena + ZelTemp=Ain1*22+18; //Postavna temperatura (pot) od 18 - 40 °C + MjTemp=Ain0*40; //Mjerena temperatura (pot) od 0 - 40°C + delta = abs(int(ZelTemp)-int(MjTemp)); //Razlika Mj i Zel + if (delta <1) { //Mrtva zona + dutycycle=0;} + else{ + dutycycle=(delta*2.5)/100; //Regulacija izlaza s obzirom na razliku + } + } + else dutycycle=0; + Motor.write(dutycycle); //Upravljacki signal + } +} \ No newline at end of file