Konstrukcijski rad, simulator rada uređaja za osiguranje željezničko-cestovnog prijelaza

Dependencies:   mbed TextLCD ULN2003_StepperDriver

Simulator rada uređaja za osiguranje željezničko-cestovnog prijelaza

1. Uvod

Uređaji za osiguranje željezničko-cestovnih prijelaza (ŽCP) ugrađuju se na željezničke pruge kako bi se umanjila mogućnost naleta vlaka na cestovna vozila ili pješake. Pri tome takvi uređaji moraju udovoljiti strogim tehničkim uvjetima za siguran rad. Ovaj konstrukcijski rad daje prikaz automatskog uređaja za osiguranje ŽCP-a na otvorenoj pruzi. Automatski uređaj uključuje i isključuje sam vlak prelaskom preko uključno-isključnih elemenata.

2. Opis 2.1. Elementi simulatora

Uređaj koji je simuliran ovim konstrukcijskim radom sastoji se od sljedećih osnovnih funkcionalnih elemenata: • središnja upravljačka i nadzorna jedinica • uključni i isključni elemanti • cestovni svjetlosni i zvučni signali • postavljač polubranika • nadzorno sučelje.

Središnja upravljačko-nadzorna jedinica je MBED mikroupravljač NUCLEO F411RE. Na modul NUCLEO dodani su ulazno-izlazni elementi: • 3 reed releja za uključenje i isključenje uređaja • 4 LED za cestovne signale (dva signala) • piezzo zvučnik • integrirani krug ULN2003 za upravljanje stepper motorom • stepper motor 17PM-M012 • LCD 16x2 s I2C komunikacijom • LED za javljanje stanja uređaja uključenje, isključenje, kvar, smetnja • tipkalo za reset kvara i smetnje.

2.2. Način rada

Dovođenjem napona napajanja uređaj ja uključen u osnovnom stanju u kojem su svjetlosni signali i zvučnik isključeni, a motka polubranika u gornjem položaju. Aktiviranjem jednog od releja uključenja (k_uklj1 ili k_uklj2) uključuju se trepćuće svjetlo na cestovnim signali i zvučnik. Nakon proteka vremena predzvonjenja (potrebno da prijelaz napuste vozila i pješaci) pokreće se motor i postavlja motku polubranika u donji položaj kako bi se zaštitio prijelaz. Uređaj ostaje u ovom stanju sve dok se ne aktivira isključni relej ili dok ne protekne programirano vrijeme uključenog stanja. Pojavom jednog od navedenih uvjeta pokreće se motor i postavlja motku polubranika u gornji položaj, a nakon toga se isključuju svjetlosni signali. Po isključenju uređaj ne dolazi odmah u osnovno stanje već ostaje u stanju u kojem se ne može uključiti aktiviranjem uključnih elemenata kako bi se spriječilo ponovno uključenje kad se aktivira (prolaskom vlaka) uključni element u odlaznom smjeru (element koji nije uključio. Osnovno stanje nastaje kada se aktivira uključni element u odlaznom smjeru ili istekom programiranog vremena nakon čega je uređaj spreman za novo uključenje.

Funkcija kvara uključuje stanje „kvar“ u slučaju: • aktiviranja isključnog elementa za vrijeme osnovnog stanja • loma motke polubranika • struje LED izvan zadanog prozora Funkcija smetnje uključuje stanje „smetnja“ u slučaju: • automatskog isključenja uređaja nakon isteka vremena bez aktiviranja isključnog elementa • automatskog osnovnog stanja nakon isteka vremena bez aktiviranja uključnog elementa

Na LCD se prikazuju broj nastalih smetnji, broj nastalih kvarova te aktivno stanje smetnje i kvara. Prijenos informacija na LCD odvija se I2C komunikacijom. Kod uređaja ŽCP-a ugrađenih na pruzi ova javljanja koriste se za regulaciju prometa vlakova i za provjeru postupanja prometnih radnika u slučaju nastanka smetnje ili kvara.

3. Zaključak

U radu stvarnog uređaja pojavljuju se još neke situacije koje nisu obuhvaćene ovim konstrukcijskim radom, ali njihovo rješavanje nadilazi okvire ovog projektnog zadatka.

Committer:
dkrajacic
Date:
Sat Nov 16 11:03:27 2019 +0000
Revision:
1:a49b3c29aeb2
Parent:
0:e1ee9ea8436b
Konstrukcijski rad - zadnja verzija

Who changed what in which revision?

UserRevisionLine numberNew contents of line
dkrajacic 0:e1ee9ea8436b 1 #include "mbed.h"
dkrajacic 0:e1ee9ea8436b 2 #include "TextLCD.h" //ovo je head za LCD
dkrajacic 0:e1ee9ea8436b 3 #include "ULN2003.h" //ovo je head za motor
dkrajacic 0:e1ee9ea8436b 4
dkrajacic 0:e1ee9ea8436b 5 Serial pc(USBTX, USBRX); // tx, rx
dkrajacic 0:e1ee9ea8436b 6 ULN2003 postavljac(PB_10, PB_4, PB_5, PB_3, 4096); //definiranje izlaza za stepper
dkrajacic 0:e1ee9ea8436b 7
dkrajacic 0:e1ee9ea8436b 8 I2C i2c_lcd(I2C_SDA, I2C_SCL); // SDA, SCL, I2C komunikacija za LCD
dkrajacic 0:e1ee9ea8436b 9 TextLCD_I2C lcd(&i2c_lcd, 0x4e, TextLCD::LCD16x2); // I2C bus, PCF8574 Slaveaddress, LCD Type; LCD na I2C komunikaciji:
dkrajacic 0:e1ee9ea8436b 10
dkrajacic 0:e1ee9ea8436b 11 //TextLCD lcd(PA_0, PA_1, PA_4, PB_0, PC_1, PC_0); // RS, E, D4-D7, LCDType=LCD16x2, BL=NC, E2=NC, LCDTCtrl=HD44780; spajanje lcd-a na pinove (ako zatreba)
dkrajacic 0:e1ee9ea8436b 12
dkrajacic 0:e1ee9ea8436b 13 //SPI spi_lcd(P_, P_NC, P_); // MOSI, MISO, SCLK; // SPI komunikacija (ako zatreba):
dkrajacic 0:e1ee9ea8436b 14
dkrajacic 0:e1ee9ea8436b 15 DigitalOut led1(PC_10); //LED c.s. 1-4
dkrajacic 0:e1ee9ea8436b 16 DigitalOut led2(PC_12);
dkrajacic 0:e1ee9ea8436b 17 DigitalOut led3(PA_6);
dkrajacic 0:e1ee9ea8436b 18 DigitalOut led4(PA_7);
dkrajacic 0:e1ee9ea8436b 19 DigitalOut ledi(PC_2); //LED stanja isključenja
dkrajacic 0:e1ee9ea8436b 20 DigitalOut ledu(PC_3); //LED stanja uključeno
dkrajacic 0:e1ee9ea8436b 21 DigitalOut ledk(PA_1); //LED kvara
dkrajacic 1:a49b3c29aeb2 22 DigitalOut leds(PA_0); //LED kvara
dkrajacic 1:a49b3c29aeb2 23 DigitalIn gp(PB_1); //LED k
dkrajacic 0:e1ee9ea8436b 24
dkrajacic 0:e1ee9ea8436b 25 //Analogni ulazi za mjerenje struje:
dkrajacic 0:e1ee9ea8436b 26 AnalogIn strujaCS1(PC_0);
dkrajacic 0:e1ee9ea8436b 27 AnalogIn strujaCS2(PC_1);
dkrajacic 0:e1ee9ea8436b 28 AnalogIn strujaCS3(PB_0);
dkrajacic 0:e1ee9ea8436b 29 AnalogIn strujaCS4(PA_4);
dkrajacic 0:e1ee9ea8436b 30 //Interrupt pinovi:
dkrajacic 0:e1ee9ea8436b 31 InterruptIn k_uklj1(PA_13); //uklj. kontakt 1
dkrajacic 0:e1ee9ea8436b 32 InterruptIn k_uklj2(PA_14); //uklj. kontakt 2
dkrajacic 0:e1ee9ea8436b 33 InterruptIn k_isklj(PA_15); //isklj. kontakt
dkrajacic 0:e1ee9ea8436b 34 InterruptIn kv_isklj(PD_2); //isključenje kvara (tipka)
dkrajacic 1:a49b3c29aeb2 35 InterruptIn lom(PA_8);
dkrajacic 0:e1ee9ea8436b 36
dkrajacic 0:e1ee9ea8436b 37 PwmOut zvono1(PC_6); //pinovi za zvona
dkrajacic 1:a49b3c29aeb2 38 PwmOut zvono2(PC_8);
dkrajacic 1:a49b3c29aeb2 39 PwmOut alarm(PA_9);
dkrajacic 0:e1ee9ea8436b 40
dkrajacic 0:e1ee9ea8436b 41 //Timeri:
dkrajacic 0:e1ee9ea8436b 42 Timer osnovno; //za vraćanje u osnovno nakon isključenja
dkrajacic 0:e1ee9ea8436b 43 Ticker tcs; //ticker za blink signala
dkrajacic 0:e1ee9ea8436b 44 Timeout Tukljucenje; //time out za trajanje uključenja
dkrajacic 0:e1ee9ea8436b 45 Timer debounce; //timer za debounce
dkrajacic 0:e1ee9ea8436b 46 Ticker mjere; //ticker za mjerenje struje LED
dkrajacic 0:e1ee9ea8436b 47 Timer osovine; //timer za blokadu osnovnog stanja za više osovina
dkrajacic 0:e1ee9ea8436b 48 Ticker ispis_LCD;
dkrajacic 0:e1ee9ea8436b 49 //Varijable:
dkrajacic 0:e1ee9ea8436b 50 bool uklj1=0; //uključenje po kontaktu 1
dkrajacic 0:e1ee9ea8436b 51 bool uklj2=0; //uključenje po kontaktu 2
dkrajacic 0:e1ee9ea8436b 52 bool isklj=0; //isključenje po isključnom kontaktu
dkrajacic 0:e1ee9ea8436b 53 bool kvar=0; //kvar: stanje ima-nema
dkrajacic 0:e1ee9ea8436b 54 bool smetnja=0; //smetnja: stanje ima-nema
dkrajacic 0:e1ee9ea8436b 55 int bkvar=0; //brojač kvarova
dkrajacic 0:e1ee9ea8436b 56 int bsmetnja=0; //brojač smetnji
dkrajacic 0:e1ee9ea8436b 57 bool upis_k=0; //pomoćna varijabla za upis kvara na LCD samo kad se poajvi kvar)
dkrajacic 0:e1ee9ea8436b 58 bool upis_s=0; //pomoćna varijabla za upis smetnje na LCD samo kad se poajvi)
dkrajacic 0:e1ee9ea8436b 59 char s_aktiv; //varijabla za ispis aktivnog kvara na LCD
dkrajacic 0:e1ee9ea8436b 60 char k_aktiv; //varijabla za ispis aktivnog kvara na LCD
dkrajacic 0:e1ee9ea8436b 61 bool deaktiv_lcd=0; //varijabla za ispis na LCD nakon poništenja kvara/smetnje
dkrajacic 0:e1ee9ea8436b 62 bool p_gore=0; //pomoćna varijabla za dizanje postavljača kod isključenja
dkrajacic 0:e1ee9ea8436b 63 float struja1; //varijable vrijednosti analognog ulaza za kontrolu LED CS
dkrajacic 0:e1ee9ea8436b 64 float struja2;
dkrajacic 0:e1ee9ea8436b 65 float struja3;
dkrajacic 0:e1ee9ea8436b 66 float struja4;
dkrajacic 0:e1ee9ea8436b 67 bool U=0; //pomoćna varijabla za uključenje
dkrajacic 0:e1ee9ea8436b 68 bool aisk=0; //pomoćna varijabla za automatsko isključenje (vremensko)
dkrajacic 1:a49b3c29aeb2 69 bool kvar_l=0;
dkrajacic 1:a49b3c29aeb2 70 bool alarm_i=0;
dkrajacic 0:e1ee9ea8436b 71
dkrajacic 0:e1ee9ea8436b 72 void ukljucenje1(); //funkcija (potprogram) uključenja sa strane 1
dkrajacic 0:e1ee9ea8436b 73 void ukljucenje2(); //funkcija (potprogram) za uključenje sa strane 2
dkrajacic 0:e1ee9ea8436b 74 void iskljucenje(); //funkcija (potpogram) za isključenje
dkrajacic 0:e1ee9ea8436b 75 void kvar_lcd(void); //funkcija za ispis na lcd
dkrajacic 0:e1ee9ea8436b 76 void kvar_isklj(void); //funkcija za kvar kod aktivacije isklj. kontakta
dkrajacic 0:e1ee9ea8436b 77 void postav_gore(void); //funkcija za dizanje motke
dkrajacic 0:e1ee9ea8436b 78 void postav_dolje(void); //funkcija za spuštanje motke
dkrajacic 0:e1ee9ea8436b 79 void cs(void); //funkcija za cestovni signal
dkrajacic 0:e1ee9ea8436b 80 void upis_kvara(); //funkcija ispisa na LCD
dkrajacic 0:e1ee9ea8436b 81 void zvona(); //funkcija za buzzer
dkrajacic 0:e1ee9ea8436b 82 void pr_zv(); //gašenje zvona
dkrajacic 0:e1ee9ea8436b 83 void mjerenja(); //funkcija za struje LED
dkrajacic 0:e1ee9ea8436b 84 void T_iskljucenje(); //funkcija za automatsko isključenje (vremensko)
dkrajacic 0:e1ee9ea8436b 85 void osnovno_st();
dkrajacic 1:a49b3c29aeb2 86 void lom_m();
dkrajacic 1:a49b3c29aeb2 87 void lom_m_k();
dkrajacic 1:a49b3c29aeb2 88 void alarm_u();
dkrajacic 0:e1ee9ea8436b 89
dkrajacic 0:e1ee9ea8436b 90 int main() {
dkrajacic 0:e1ee9ea8436b 91 lcd.setBacklight(TextLCD::LightOn); //uključenje pozadinskog svjetla na LCD
dkrajacic 0:e1ee9ea8436b 92
dkrajacic 0:e1ee9ea8436b 93 k_uklj1.mode(PullDown); //konfiguracija tastera na PullDown
dkrajacic 0:e1ee9ea8436b 94 k_uklj2.mode(PullDown);
dkrajacic 0:e1ee9ea8436b 95 k_isklj.mode(PullDown);
dkrajacic 0:e1ee9ea8436b 96 kv_isklj.mode(PullDown);
dkrajacic 0:e1ee9ea8436b 97
dkrajacic 0:e1ee9ea8436b 98 led1=0; led2=0;
dkrajacic 0:e1ee9ea8436b 99
dkrajacic 0:e1ee9ea8436b 100 lcd.setCursor(TextLCD::CurOn_BlkOn); // Uključenje i blinkanje kursora na LCD
dkrajacic 0:e1ee9ea8436b 101
dkrajacic 0:e1ee9ea8436b 102 //debounce.start();
dkrajacic 0:e1ee9ea8436b 103 //konfiguracija interrupt kontakata na uzlazni/silazni brid
dkrajacic 0:e1ee9ea8436b 104 k_uklj1.rise(&ukljucenje1);
dkrajacic 0:e1ee9ea8436b 105 k_uklj2.rise(&ukljucenje2);
dkrajacic 0:e1ee9ea8436b 106 k_isklj.fall(&iskljucenje);
dkrajacic 0:e1ee9ea8436b 107 kv_isklj.fall(&kvar_isklj);
dkrajacic 1:a49b3c29aeb2 108 lom.fall(&lom_m);
dkrajacic 1:a49b3c29aeb2 109 lom.rise(&lom_m_k);
dkrajacic 0:e1ee9ea8436b 110
dkrajacic 0:e1ee9ea8436b 111 lcd.cls(); //čišćenje displeja
dkrajacic 0:e1ee9ea8436b 112 lcd.printf("Kvar %i\nSmetnja %i", bkvar, bsmetnja); //prikaz broja kvara i smetnje na lcd
dkrajacic 0:e1ee9ea8436b 113
dkrajacic 1:a49b3c29aeb2 114 if(gp==0){
dkrajacic 1:a49b3c29aeb2 115 postav_gore();
dkrajacic 1:a49b3c29aeb2 116 wait(8);
dkrajacic 1:a49b3c29aeb2 117 }
dkrajacic 1:a49b3c29aeb2 118
dkrajacic 0:e1ee9ea8436b 119 //glavna petlja
dkrajacic 0:e1ee9ea8436b 120 while(1) {
dkrajacic 0:e1ee9ea8436b 121 //uvjeti za LED uključenja, isključenja i kvara
dkrajacic 0:e1ee9ea8436b 122 if(uklj1==1 || uklj2==1) {
dkrajacic 0:e1ee9ea8436b 123 ledu=1;
dkrajacic 0:e1ee9ea8436b 124 }
dkrajacic 0:e1ee9ea8436b 125 else {
dkrajacic 0:e1ee9ea8436b 126 ledu=0;
dkrajacic 0:e1ee9ea8436b 127 }
dkrajacic 0:e1ee9ea8436b 128 if(isklj==1) {
dkrajacic 0:e1ee9ea8436b 129 ledi=1;
dkrajacic 0:e1ee9ea8436b 130 }
dkrajacic 0:e1ee9ea8436b 131 else {
dkrajacic 0:e1ee9ea8436b 132 ledi=0;
dkrajacic 0:e1ee9ea8436b 133 }
dkrajacic 0:e1ee9ea8436b 134 if(kvar==1) {
dkrajacic 0:e1ee9ea8436b 135 ledk=1;}
dkrajacic 0:e1ee9ea8436b 136 else {
dkrajacic 1:a49b3c29aeb2 137 ledk=0;
dkrajacic 1:a49b3c29aeb2 138 alarm_i=0;}
dkrajacic 1:a49b3c29aeb2 139 if(smetnja==1) {
dkrajacic 1:a49b3c29aeb2 140 leds=1;}
dkrajacic 1:a49b3c29aeb2 141 else {
dkrajacic 1:a49b3c29aeb2 142 leds=0;}
dkrajacic 0:e1ee9ea8436b 143
dkrajacic 0:e1ee9ea8436b 144
dkrajacic 0:e1ee9ea8436b 145 //uključenje:
dkrajacic 0:e1ee9ea8436b 146
dkrajacic 0:e1ee9ea8436b 147 if((uklj1==1 || uklj2==1) && isklj==0){
dkrajacic 0:e1ee9ea8436b 148
dkrajacic 0:e1ee9ea8436b 149
dkrajacic 0:e1ee9ea8436b 150 //mjerenja();
dkrajacic 0:e1ee9ea8436b 151 if(U==0){
dkrajacic 0:e1ee9ea8436b 152
dkrajacic 0:e1ee9ea8436b 153 zvona();
dkrajacic 1:a49b3c29aeb2 154 led3=1;
dkrajacic 0:e1ee9ea8436b 155 led1=1;
dkrajacic 0:e1ee9ea8436b 156 tcs.attach(&cs, 0.5);
dkrajacic 0:e1ee9ea8436b 157 //mjere.attach(&mjerenja, 1.5);
dkrajacic 0:e1ee9ea8436b 158 //start tickera za CS, treptanje dioda
dkrajacic 1:a49b3c29aeb2 159 Tukljucenje.attach(&T_iskljucenje, 40.0);
dkrajacic 1:a49b3c29aeb2 160 wait(8); //predzvonjenje
dkrajacic 0:e1ee9ea8436b 161 postav_dolje();
dkrajacic 0:e1ee9ea8436b 162 pr_zv();
dkrajacic 0:e1ee9ea8436b 163 U=1;
dkrajacic 0:e1ee9ea8436b 164 }
dkrajacic 0:e1ee9ea8436b 165 }
dkrajacic 0:e1ee9ea8436b 166 //Automatsko isključenje ako je proteklo vrijeme
dkrajacic 0:e1ee9ea8436b 167 if(aisk==1) {
dkrajacic 0:e1ee9ea8436b 168
dkrajacic 0:e1ee9ea8436b 169 smetnja=1;
dkrajacic 1:a49b3c29aeb2 170 leds=1;
dkrajacic 0:e1ee9ea8436b 171 bsmetnja=bsmetnja+1;
dkrajacic 0:e1ee9ea8436b 172 postav_gore();
dkrajacic 0:e1ee9ea8436b 173 wait(0.2);
dkrajacic 0:e1ee9ea8436b 174 Tukljucenje.detach();
dkrajacic 0:e1ee9ea8436b 175 //mjere.detach();
dkrajacic 0:e1ee9ea8436b 176 tcs.detach(); //isključenje signala
dkrajacic 0:e1ee9ea8436b 177 led1=0;
dkrajacic 1:a49b3c29aeb2 178 led2=0;
dkrajacic 1:a49b3c29aeb2 179 led3=0;
dkrajacic 1:a49b3c29aeb2 180 led4=0;
dkrajacic 0:e1ee9ea8436b 181 uklj1=0;
dkrajacic 0:e1ee9ea8436b 182 uklj2=0;
dkrajacic 0:e1ee9ea8436b 183 U=0;
dkrajacic 0:e1ee9ea8436b 184 aisk=0;
dkrajacic 1:a49b3c29aeb2 185 alarm_u();
dkrajacic 1:a49b3c29aeb2 186 if(gp==0){
dkrajacic 1:a49b3c29aeb2 187 kvar=1;
dkrajacic 1:a49b3c29aeb2 188 }
dkrajacic 0:e1ee9ea8436b 189 }
dkrajacic 0:e1ee9ea8436b 190 //Isključenje na isključnom kontaktu
dkrajacic 0:e1ee9ea8436b 191
dkrajacic 0:e1ee9ea8436b 192 if((uklj1==1 || uklj2==1) && (isklj==1)) { //isključenje za stranu 1
dkrajacic 1:a49b3c29aeb2 193
dkrajacic 1:a49b3c29aeb2 194 wait(2);
dkrajacic 0:e1ee9ea8436b 195 if(p_gore==0) {
dkrajacic 0:e1ee9ea8436b 196 postav_gore();
dkrajacic 0:e1ee9ea8436b 197 wait(0.1);
dkrajacic 0:e1ee9ea8436b 198 p_gore=1;
dkrajacic 1:a49b3c29aeb2 199 if(gp==0){
dkrajacic 1:a49b3c29aeb2 200 kvar=1;
dkrajacic 0:e1ee9ea8436b 201 }
dkrajacic 1:a49b3c29aeb2 202 }
dkrajacic 1:a49b3c29aeb2 203 Tukljucenje.detach();
dkrajacic 0:e1ee9ea8436b 204 tcs.detach(); //isključenje signala
dkrajacic 0:e1ee9ea8436b 205 led1=0;
dkrajacic 1:a49b3c29aeb2 206 led2=0;
dkrajacic 1:a49b3c29aeb2 207 led3=0;
dkrajacic 1:a49b3c29aeb2 208 led4=0;
dkrajacic 0:e1ee9ea8436b 209
dkrajacic 0:e1ee9ea8436b 210 osnovno.start(); //pokretanje timera osnovno
dkrajacic 0:e1ee9ea8436b 211 }
dkrajacic 0:e1ee9ea8436b 212 //Dovođenje u osnovno stanje
dkrajacic 0:e1ee9ea8436b 213
dkrajacic 1:a49b3c29aeb2 214 if(osnovno.read()>=40 || (uklj2==1 && uklj1==1)) {
dkrajacic 1:a49b3c29aeb2 215 if(osnovno.read()>=40) {
dkrajacic 0:e1ee9ea8436b 216 smetnja=1;
dkrajacic 1:a49b3c29aeb2 217 leds=1;
dkrajacic 0:e1ee9ea8436b 218 bsmetnja=bsmetnja+1;
dkrajacic 0:e1ee9ea8436b 219 osnovno_st();
dkrajacic 1:a49b3c29aeb2 220 alarm_u();
dkrajacic 0:e1ee9ea8436b 221 }
dkrajacic 0:e1ee9ea8436b 222 else {
dkrajacic 0:e1ee9ea8436b 223 osovine.start();
dkrajacic 0:e1ee9ea8436b 224 if(osovine.read()>=2) {
dkrajacic 0:e1ee9ea8436b 225 osnovno_st();
dkrajacic 0:e1ee9ea8436b 226 }
dkrajacic 0:e1ee9ea8436b 227 }
dkrajacic 0:e1ee9ea8436b 228 }
dkrajacic 0:e1ee9ea8436b 229
dkrajacic 0:e1ee9ea8436b 230 wait(0.1);
dkrajacic 0:e1ee9ea8436b 231 //Uključenje kvara kod aktivacije isklj. kontakta bez uključenja:
dkrajacic 0:e1ee9ea8436b 232
dkrajacic 1:a49b3c29aeb2 233 if(((uklj1==0 && uklj2==0) && (isklj==1)) || lom==0){ //kvar kod isključnog kontakta bez uključenja
dkrajacic 0:e1ee9ea8436b 234 kvar=1;
dkrajacic 1:a49b3c29aeb2 235 alarm_u();
dkrajacic 1:a49b3c29aeb2 236
dkrajacic 0:e1ee9ea8436b 237 }
dkrajacic 1:a49b3c29aeb2 238
dkrajacic 0:e1ee9ea8436b 239 kvar_lcd();
dkrajacic 0:e1ee9ea8436b 240 } //kraj while(1)
dkrajacic 0:e1ee9ea8436b 241 } //kraj int main()
dkrajacic 0:e1ee9ea8436b 242
dkrajacic 0:e1ee9ea8436b 243
dkrajacic 0:e1ee9ea8436b 244 void ukljucenje1(void){
dkrajacic 0:e1ee9ea8436b 245 uklj1=1;
dkrajacic 0:e1ee9ea8436b 246 osovine.reset();
dkrajacic 0:e1ee9ea8436b 247 if(uklj2==0) {
dkrajacic 0:e1ee9ea8436b 248 isklj=0;
dkrajacic 0:e1ee9ea8436b 249 }
dkrajacic 0:e1ee9ea8436b 250 ledu=1;
dkrajacic 0:e1ee9ea8436b 251 }
dkrajacic 0:e1ee9ea8436b 252
dkrajacic 0:e1ee9ea8436b 253 void ukljucenje2(void){
dkrajacic 0:e1ee9ea8436b 254 uklj2=1;
dkrajacic 0:e1ee9ea8436b 255 osovine.reset();
dkrajacic 0:e1ee9ea8436b 256 if(uklj1==0) {
dkrajacic 0:e1ee9ea8436b 257 isklj=0;
dkrajacic 0:e1ee9ea8436b 258 }
dkrajacic 0:e1ee9ea8436b 259 ledu=1;
dkrajacic 0:e1ee9ea8436b 260 }
dkrajacic 0:e1ee9ea8436b 261
dkrajacic 0:e1ee9ea8436b 262 void iskljucenje(void){
dkrajacic 0:e1ee9ea8436b 263 isklj=1;
dkrajacic 0:e1ee9ea8436b 264 ledi=1;
dkrajacic 0:e1ee9ea8436b 265 }
dkrajacic 0:e1ee9ea8436b 266
dkrajacic 0:e1ee9ea8436b 267 void kvar_lcd(void) {
dkrajacic 0:e1ee9ea8436b 268 if(kvar==1){
dkrajacic 0:e1ee9ea8436b 269 k_aktiv=65;
dkrajacic 0:e1ee9ea8436b 270 }
dkrajacic 0:e1ee9ea8436b 271 else {
dkrajacic 0:e1ee9ea8436b 272 k_aktiv=73;
dkrajacic 0:e1ee9ea8436b 273 }
dkrajacic 0:e1ee9ea8436b 274 if(kvar==1 && upis_k==0) {
dkrajacic 0:e1ee9ea8436b 275 bkvar=bkvar+1;
dkrajacic 0:e1ee9ea8436b 276 lcd.cls();
dkrajacic 0:e1ee9ea8436b 277 lcd.printf("Kvar %i %c\nSmetnja %i %c", bkvar, k_aktiv, bsmetnja, s_aktiv);
dkrajacic 0:e1ee9ea8436b 278 upis_k=1;
dkrajacic 0:e1ee9ea8436b 279 }
dkrajacic 0:e1ee9ea8436b 280 else if(kvar==0) {
dkrajacic 0:e1ee9ea8436b 281 upis_k=0;
dkrajacic 0:e1ee9ea8436b 282 }
dkrajacic 0:e1ee9ea8436b 283
dkrajacic 0:e1ee9ea8436b 284 if(smetnja==1){
dkrajacic 0:e1ee9ea8436b 285 s_aktiv=65;
dkrajacic 0:e1ee9ea8436b 286 }
dkrajacic 0:e1ee9ea8436b 287 else {
dkrajacic 0:e1ee9ea8436b 288 s_aktiv=73;
dkrajacic 0:e1ee9ea8436b 289 }
dkrajacic 0:e1ee9ea8436b 290 if(smetnja==1 && upis_s==0) { //ispis smetnje
dkrajacic 0:e1ee9ea8436b 291 //bsmetnja=bsmetnja+1;
dkrajacic 0:e1ee9ea8436b 292 lcd.cls();
dkrajacic 0:e1ee9ea8436b 293 lcd.printf("Kvar %i %c\nSmetnja %i %c", bkvar, k_aktiv, bsmetnja, s_aktiv);
dkrajacic 0:e1ee9ea8436b 294 upis_s=1;
dkrajacic 0:e1ee9ea8436b 295 }
dkrajacic 0:e1ee9ea8436b 296 else if(smetnja==0) {
dkrajacic 0:e1ee9ea8436b 297 upis_s=0;
dkrajacic 0:e1ee9ea8436b 298 }
dkrajacic 0:e1ee9ea8436b 299 if (deaktiv_lcd==1) {
dkrajacic 0:e1ee9ea8436b 300 lcd.cls();
dkrajacic 0:e1ee9ea8436b 301 lcd.printf("Kvar %i %c\nSmetnja %i %c", bkvar, k_aktiv, bsmetnja, s_aktiv);
dkrajacic 0:e1ee9ea8436b 302 deaktiv_lcd=0;
dkrajacic 0:e1ee9ea8436b 303 }
dkrajacic 0:e1ee9ea8436b 304 }
dkrajacic 0:e1ee9ea8436b 305
dkrajacic 0:e1ee9ea8436b 306
dkrajacic 0:e1ee9ea8436b 307 void kvar_isklj(void) {
dkrajacic 1:a49b3c29aeb2 308
dkrajacic 1:a49b3c29aeb2 309 if(uklj1==0 && uklj2==0) {
dkrajacic 1:a49b3c29aeb2 310 if(kvar_l==0) {
dkrajacic 1:a49b3c29aeb2 311 kvar=0;
dkrajacic 1:a49b3c29aeb2 312 }
dkrajacic 0:e1ee9ea8436b 313 smetnja=0;
dkrajacic 0:e1ee9ea8436b 314 wait(0.2);
dkrajacic 0:e1ee9ea8436b 315 deaktiv_lcd=1;
dkrajacic 1:a49b3c29aeb2 316 //alarm=0;
dkrajacic 1:a49b3c29aeb2 317 alarm_u();
dkrajacic 1:a49b3c29aeb2 318 }
dkrajacic 0:e1ee9ea8436b 319 }
dkrajacic 0:e1ee9ea8436b 320
dkrajacic 0:e1ee9ea8436b 321 void postav_dolje() {
dkrajacic 0:e1ee9ea8436b 322 postavljac.moveForward(100,20);
dkrajacic 0:e1ee9ea8436b 323 pr_zv();
dkrajacic 0:e1ee9ea8436b 324 }
dkrajacic 0:e1ee9ea8436b 325
dkrajacic 0:e1ee9ea8436b 326 void postav_gore() {
dkrajacic 0:e1ee9ea8436b 327 postavljac.moveReverse(100,15);
dkrajacic 0:e1ee9ea8436b 328 }
dkrajacic 0:e1ee9ea8436b 329
dkrajacic 0:e1ee9ea8436b 330 void cs(void) {
dkrajacic 0:e1ee9ea8436b 331 led1=!led1;
dkrajacic 0:e1ee9ea8436b 332 led2=!led2;
dkrajacic 1:a49b3c29aeb2 333 led3=!led3;
dkrajacic 1:a49b3c29aeb2 334 led4=!led4;
dkrajacic 0:e1ee9ea8436b 335 mjerenja();
dkrajacic 0:e1ee9ea8436b 336 }
dkrajacic 0:e1ee9ea8436b 337
dkrajacic 0:e1ee9ea8436b 338 void zvona() {
dkrajacic 0:e1ee9ea8436b 339 zvono1.period(1); // set PWM period to 10 ms
dkrajacic 0:e1ee9ea8436b 340 zvono1=0.5; // set duty cycle to 80%
dkrajacic 0:e1ee9ea8436b 341 zvono2.period(1); // set PWM period to 10 ms
dkrajacic 0:e1ee9ea8436b 342 zvono2=0.5; // set duty cycle to 80%
dkrajacic 0:e1ee9ea8436b 343 }
dkrajacic 0:e1ee9ea8436b 344
dkrajacic 0:e1ee9ea8436b 345 void pr_zv() {
dkrajacic 0:e1ee9ea8436b 346 zvono1=0;
dkrajacic 0:e1ee9ea8436b 347 zvono2=0;
dkrajacic 0:e1ee9ea8436b 348 }
dkrajacic 0:e1ee9ea8436b 349
dkrajacic 0:e1ee9ea8436b 350 void mjerenja() {
dkrajacic 0:e1ee9ea8436b 351
dkrajacic 0:e1ee9ea8436b 352 if(led1==1) {
dkrajacic 0:e1ee9ea8436b 353 struja1=strujaCS1;
dkrajacic 0:e1ee9ea8436b 354 struja3=strujaCS3;
dkrajacic 1:a49b3c29aeb2 355 if(struja1<=0.2f || struja1>=0.55f || struja3<=0.2f || struja3>=0.55f) {
dkrajacic 0:e1ee9ea8436b 356 kvar=1;
dkrajacic 0:e1ee9ea8436b 357 ledk=1;
dkrajacic 1:a49b3c29aeb2 358 alarm_u();
dkrajacic 0:e1ee9ea8436b 359 }
dkrajacic 0:e1ee9ea8436b 360 }
dkrajacic 0:e1ee9ea8436b 361
dkrajacic 0:e1ee9ea8436b 362 if(led2==1) {
dkrajacic 0:e1ee9ea8436b 363 struja2=strujaCS2;
dkrajacic 0:e1ee9ea8436b 364 struja4=strujaCS4;
dkrajacic 1:a49b3c29aeb2 365 if(struja2<=0.2f || struja2>=0.55f || struja4<=0.2f || struja4>=0.55f) {
dkrajacic 0:e1ee9ea8436b 366 kvar=1;
dkrajacic 0:e1ee9ea8436b 367 ledk=1;
dkrajacic 1:a49b3c29aeb2 368 alarm_i=1;
dkrajacic 1:a49b3c29aeb2 369 alarm_u();
dkrajacic 0:e1ee9ea8436b 370 }
dkrajacic 0:e1ee9ea8436b 371 }
dkrajacic 0:e1ee9ea8436b 372 if(uklj1==0 && uklj2==0){
dkrajacic 0:e1ee9ea8436b 373 mjere.detach();}
dkrajacic 0:e1ee9ea8436b 374 }
dkrajacic 0:e1ee9ea8436b 375
dkrajacic 0:e1ee9ea8436b 376 void T_iskljucenje() {
dkrajacic 0:e1ee9ea8436b 377 aisk=1;
dkrajacic 0:e1ee9ea8436b 378 }
dkrajacic 0:e1ee9ea8436b 379
dkrajacic 0:e1ee9ea8436b 380 void osnovno_st() {
dkrajacic 0:e1ee9ea8436b 381
dkrajacic 0:e1ee9ea8436b 382 uklj1=0;
dkrajacic 0:e1ee9ea8436b 383 uklj2=0;
dkrajacic 0:e1ee9ea8436b 384 isklj=0;
dkrajacic 0:e1ee9ea8436b 385 wait(0.05);
dkrajacic 0:e1ee9ea8436b 386 U=0;
dkrajacic 0:e1ee9ea8436b 387 osnovno.stop();
dkrajacic 0:e1ee9ea8436b 388 osnovno.reset();
dkrajacic 0:e1ee9ea8436b 389 p_gore=0;
dkrajacic 0:e1ee9ea8436b 390 osovine.stop();
dkrajacic 1:a49b3c29aeb2 391 }
dkrajacic 1:a49b3c29aeb2 392
dkrajacic 1:a49b3c29aeb2 393 void lom_m() {
dkrajacic 1:a49b3c29aeb2 394 kvar=1;
dkrajacic 1:a49b3c29aeb2 395 kvar_l=1;
dkrajacic 1:a49b3c29aeb2 396 alarm_u();
dkrajacic 1:a49b3c29aeb2 397 }
dkrajacic 1:a49b3c29aeb2 398
dkrajacic 1:a49b3c29aeb2 399 void lom_m_k() {
dkrajacic 1:a49b3c29aeb2 400 kvar_l=0;
dkrajacic 1:a49b3c29aeb2 401 }
dkrajacic 1:a49b3c29aeb2 402
dkrajacic 1:a49b3c29aeb2 403 void alarm_u() {
dkrajacic 0:e1ee9ea8436b 404
dkrajacic 1:a49b3c29aeb2 405 if(kvar==1 && alarm_i==0) {
dkrajacic 1:a49b3c29aeb2 406 alarm.period(2); // set PWM period to 10 ms
dkrajacic 1:a49b3c29aeb2 407 alarm=0.9;
dkrajacic 1:a49b3c29aeb2 408 wait(0.1);
dkrajacic 1:a49b3c29aeb2 409 }
dkrajacic 1:a49b3c29aeb2 410
dkrajacic 1:a49b3c29aeb2 411 else {
dkrajacic 1:a49b3c29aeb2 412 alarm=0;}
dkrajacic 1:a49b3c29aeb2 413
dkrajacic 1:a49b3c29aeb2 414 }
dkrajacic 1:a49b3c29aeb2 415
dkrajacic 1:a49b3c29aeb2 416
dkrajacic 0:e1ee9ea8436b 417