Automatsko upravljanje kliznom ogradom

Dependencies:   mbed

Zadatak

Program ima zadatak upravljati otvaranjem i zatvaranjem klizne ograde. Otvaranje ograde potrebno je moći pokrenuti signalom za otvaranje (npr. pomoću daljinskog upravljaca), dok se zatvaranje ograde izvodi automatski po isteku unaprijed zadanog vremena. Kod zatvaranja ograde potrebno je prepoznati ukoliko neki predmet ili osoba predstavljaju prepreku zatvaranju ograde.


Opis rada

Niže na slici vidljiv je dijagram tijeka programa.

https://os.mbed.com/media/uploads/kerepd/ograda.png


Shema

Ovaj rad se sastoji od:

  • 1 x Nucleo -F302R8 programska plocica
  • 4 x LED dioda 5mm
  • 4 x Otpornik 499Ohm 1/4W
  • 1 x DIP sklopka 4p
  • Male to Male zica za plocicu

Kod stvarne izvedbe upravljanja ogradom bi DIP sklopku zamjenili krajnji prekidaci na pocetnom i krajnjem polozaju ograde, ulazni signal za otvaranje ograde davao bi se pomocu nekog od komunikacijskih protokola kao npr. IR komunikacija, RF komunikacija, internet itd. Umjesto LED dioda spaja se motor s pripadajucom opremom za pokretanje i promjenu smjera, signalizacijsko svjetlo te motorna kočnica.


Fizicka shema spoja

https://os.mbed.com/media/uploads/kerepd/konstrukcijski_bb.png

Elektricna shema spoja

https://os.mbed.com/media/uploads/kerepd/ograda_schema.png

Funkcionalan rad

https://os.mbed.com/media/uploads/kerepd/img_01481.jpg

https://os.mbed.com/media/uploads/kerepd/img_0150-2.jpg

Committer:
kerepd
Date:
Wed Dec 02 14:46:31 2020 +0000
Revision:
1:483853a07e4c
Parent:
0:f89cdb519c2e
Upravljanje kliznom ogradom

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kerepd 0:f89cdb519c2e 1 #include "mbed.h"
kerepd 0:f89cdb519c2e 2 #include "Ograda.h"
kerepd 0:f89cdb519c2e 3
kerepd 0:f89cdb519c2e 4
kerepd 0:f89cdb519c2e 5 Ograda motor(D2,D3,D4,D5);
kerepd 0:f89cdb519c2e 6 InterruptIn sw_start(D6, PullDown);
kerepd 0:f89cdb519c2e 7 InterruptIn sw_end(D7, PullDown);
kerepd 0:f89cdb519c2e 8 InterruptIn sensor(D8, PullDown);
kerepd 0:f89cdb519c2e 9 InterruptIn signal_rx(USER_BUTTON, PullUp);
kerepd 0:f89cdb519c2e 10 int pomocna=0;
kerepd 0:f89cdb519c2e 11 Serial pc(USBTX, USBRX);
kerepd 0:f89cdb519c2e 12 Timer debounce;
kerepd 0:f89cdb519c2e 13
kerepd 0:f89cdb519c2e 14
kerepd 0:f89cdb519c2e 15 void TerraTerm() // ispisivanje podataka u TerraTerm pomoću serijske komunikacije
kerepd 0:f89cdb519c2e 16 {
kerepd 0:f89cdb519c2e 17 pc.printf("Ograda zatvorena =1, nije zatvorena=0: %d \n \r ", sw_start.read());
kerepd 0:f89cdb519c2e 18 pc.printf("Ograda otvorena =1, djelomicno otvorena=0: %d \n \n\r ", sw_end.read());
kerepd 0:f89cdb519c2e 19 pc.printf("Senzor = %d \n \n\r ", sensor.read());
kerepd 0:f89cdb519c2e 20 }
kerepd 0:f89cdb519c2e 21
kerepd 0:f89cdb519c2e 22
kerepd 0:f89cdb519c2e 23 void zaustavi() //funkcija za zaustavljanje motora
kerepd 0:f89cdb519c2e 24 {
kerepd 0:f89cdb519c2e 25 debounce.start();
kerepd 0:f89cdb519c2e 26 if (debounce.read_ms()>200)
kerepd 0:f89cdb519c2e 27 {
kerepd 0:f89cdb519c2e 28 motor.zaustavi();
kerepd 0:f89cdb519c2e 29 pc.printf("Zaustavaljanje motora i gasenje signalizacije \n \r ");
kerepd 0:f89cdb519c2e 30 pomocna=1; //služi za povratak u glavnu funkciju
kerepd 0:f89cdb519c2e 31 TerraTerm(); //ispis ulaza
kerepd 0:f89cdb519c2e 32 debounce.reset();
kerepd 0:f89cdb519c2e 33 }
kerepd 0:f89cdb519c2e 34
kerepd 0:f89cdb519c2e 35 }
kerepd 0:f89cdb519c2e 36
kerepd 0:f89cdb519c2e 37
kerepd 0:f89cdb519c2e 38 void otvori() // procedura otvaranja ograde - senzor pri otvaranju smeta
kerepd 0:f89cdb519c2e 39 {
kerepd 0:f89cdb519c2e 40 sensor.rise(NULL); // sprijecavanje rada senzora tijekom otvaranja ograde
kerepd 0:f89cdb519c2e 41 sensor.fall(NULL);//
kerepd 0:f89cdb519c2e 42 motor.pokreni(2, 0.0);
kerepd 0:f89cdb519c2e 43 pc.printf("Otvaranje ograde \n \n \r ");
kerepd 0:f89cdb519c2e 44 TerraTerm();
kerepd 0:f89cdb519c2e 45 }
kerepd 0:f89cdb519c2e 46
kerepd 0:f89cdb519c2e 47
kerepd 0:f89cdb519c2e 48
kerepd 0:f89cdb519c2e 49 void pocetna() // funkcija koja se izvodi samo prvi puta - npr. ograda ostala djelomično otvorena
kerepd 0:f89cdb519c2e 50 {
kerepd 0:f89cdb519c2e 51 if(sw_start.read()==0&&sw_end.read()==0)
kerepd 0:f89cdb519c2e 52 {
kerepd 0:f89cdb519c2e 53 pc.printf("Zatvaranje ograde za 8s \n \n \r ");
kerepd 0:f89cdb519c2e 54 sensor.rise(&zaustavi);
kerepd 0:f89cdb519c2e 55
kerepd 0:f89cdb519c2e 56 wait(8);
kerepd 0:f89cdb519c2e 57 motor.pokreni(1, 2.0);
kerepd 0:f89cdb519c2e 58 pc.printf("Zatvaranje ograde \n \n \r ");
kerepd 0:f89cdb519c2e 59 TerraTerm();
kerepd 0:f89cdb519c2e 60 }
kerepd 0:f89cdb519c2e 61 }
kerepd 0:f89cdb519c2e 62
kerepd 0:f89cdb519c2e 63
kerepd 0:f89cdb519c2e 64
kerepd 0:f89cdb519c2e 65 void glavna() // funkcija provjere stanja ulaza koja se izvodi kod svakog novog događaja
kerepd 0:f89cdb519c2e 66 {
kerepd 0:f89cdb519c2e 67
kerepd 0:f89cdb519c2e 68 pomocna=0;
kerepd 0:f89cdb519c2e 69 signal_rx.rise(NULL); //blokiranje signala iz daljinskog uptavljača ukoliko ograda nije zatvorena
kerepd 0:f89cdb519c2e 70
kerepd 0:f89cdb519c2e 71 if(sw_start.read()==0&&sw_end.read()==1)
kerepd 0:f89cdb519c2e 72 {
kerepd 0:f89cdb519c2e 73 sensor.rise(&zaustavi);
kerepd 0:f89cdb519c2e 74 sensor.fall(&pocetna);
kerepd 0:f89cdb519c2e 75 pc.printf("Zatvaranje ograde za 8s \n \n \r ");
kerepd 0:f89cdb519c2e 76 wait(8);
kerepd 0:f89cdb519c2e 77 motor.pokreni(1, 2.0);
kerepd 0:f89cdb519c2e 78 pc.printf("Zatvaranje ograde \n \n \r ");
kerepd 0:f89cdb519c2e 79 TerraTerm();
kerepd 0:f89cdb519c2e 80 }
kerepd 0:f89cdb519c2e 81
kerepd 0:f89cdb519c2e 82
kerepd 0:f89cdb519c2e 83 if(sw_start.read()==1)
kerepd 0:f89cdb519c2e 84 {
kerepd 0:f89cdb519c2e 85 signal_rx.rise(&otvori);
kerepd 0:f89cdb519c2e 86 sensor.fall(NULL);
kerepd 0:f89cdb519c2e 87 pc.printf("Ceka se signal za otvaranje \n\n \r ");
kerepd 0:f89cdb519c2e 88 TerraTerm();
kerepd 0:f89cdb519c2e 89 }
kerepd 0:f89cdb519c2e 90 }
kerepd 0:f89cdb519c2e 91
kerepd 0:f89cdb519c2e 92
kerepd 0:f89cdb519c2e 93 int main()
kerepd 0:f89cdb519c2e 94 {
kerepd 0:f89cdb519c2e 95 TerraTerm();
kerepd 0:f89cdb519c2e 96 signal_rx.rise(NULL); // signal za otvaranje ograde nije potreban ukoliko ograda nije zatvorena
kerepd 0:f89cdb519c2e 97 sw_start.rise(&zaustavi);
kerepd 0:f89cdb519c2e 98 sw_end.rise(&zaustavi); //definiranje događaja prilikom rastućih bridova
kerepd 0:f89cdb519c2e 99 sensor.rise(&zaustavi);
kerepd 0:f89cdb519c2e 100
kerepd 0:f89cdb519c2e 101 pocetna();
kerepd 0:f89cdb519c2e 102 glavna();
kerepd 0:f89cdb519c2e 103
kerepd 0:f89cdb519c2e 104 while(1) {
kerepd 0:f89cdb519c2e 105
kerepd 0:f89cdb519c2e 106 if(sw_start.read()==1&&sw_end.read()==1) // provjera jesu li prekidači u kratkom spoju
kerepd 0:f89cdb519c2e 107
kerepd 0:f89cdb519c2e 108 {
kerepd 0:f89cdb519c2e 109 pc.printf("NEISPRAVNI KRAJNJI PREKIDACI \n\n \r ");
kerepd 0:f89cdb519c2e 110 zaustavi();
kerepd 0:f89cdb519c2e 111 break;
kerepd 0:f89cdb519c2e 112 }
kerepd 0:f89cdb519c2e 113
kerepd 0:f89cdb519c2e 114
kerepd 0:f89cdb519c2e 115 if(pomocna==1)
kerepd 0:f89cdb519c2e 116 {
kerepd 0:f89cdb519c2e 117 glavna();
kerepd 0:f89cdb519c2e 118 }
kerepd 0:f89cdb519c2e 119 }
kerepd 0:f89cdb519c2e 120 }