![](/media/cache/group/tvz-logo.png.50x50_q85.png)
Projektni zadatak iz Mikroupravljača - Mladenko Jurković
Dependencies: mbed SeeedShieldBot BluetoothSerial
Opis rada sklopa
1. Zadatak Pomoću online mBed compilera te Nuclea STM32F072, napraviti semafor. Semafor mora imati 3 LED svjetla za crveno, žuto i zeleno svjetlo za vozila, te 2 LED svjetla za crveno i zeleno svjetlo pješacima. Pomoću tipkala potrebno je izvesti paljenje zelenog svjetla pješacima, kada ga pješaci pritisnu. Također, potrebno je izvesti zvučni signal tijekom crvenog i zelenog svjetla pješacima.
2. Opis rada sklopa Pomoću online mBed compilera, izrađen je programski kod za semafor u C++ programskom jeziku. Radi lakšeg pojašnjenja, programski kod možemo podijeliti u 4 dijela te svaki dio koda obavlja svoj zadatak prilikom izvođenja samog programskog koda. U prvom dijelu, na početku programskog koda definirani su potrebni parametri za izradu koda. Dakle, definirani su digitalni izlazi za LED svjetla, PWM izlaz za zvučnik, hardverski interupt ulaz za tipkalo, ticker za pozivanje funkcije koja izvodi zvučni signal za pješake te timer debounce koji uklanja neželjeno titranje signala koje može uzrokovati prestanak sinkronizacije sa timerom. Također definirane su void funkcije „pjesaci“ i „zvuk“ čiji je rad detaljnije opisan u nastavku teksta.
Drugi dio koda je main funkcija. U mainu je definiran glavni dio rada semafora, tj. programirane su vremenske izmjene uključivanja i isključivanja LED svjetla za vozila i pješake. Taj dio programa izvodi se u beskonačnoj petlji (while(1)), što znači da će se definirana uključivanja i isključivanja LED svjetla izvoditi konstantno dok god ne dobije vanjski signal za prekid main funkcije. Uključivanje odnosno isključivanje LED svjetla definirano je postavljanjem digitalnih izlaza u stanje logičke „0“ ili „1“ i to prema potrebi kako bi semafor ispravno radio. U nastavku je prikazan dio koda kojim se definira stanje digitalnih izlaza kada na semaforu mora biti uključeno zeleno LED svjetlo za vozila:
LEDcrvena=0; LEDcrvenapjesaci=1; LEDzuta=0; LEDzelena=1; LEDzelenapjesaci=0; wait(15);
Koliko dugo će pojedino LED svjetlo biti uključeno definirano je naredbom wait, te je u gore navedenom programu definirano da će zeleno LED svjetlo vozilima biti uključeno 15 sekundi. Taj dio programskog koda se uvijek može prilagoditi potrebama trajanju zelenog ili crvenog svjetla za vozila odnosno pješake. Također, prilikom izvođenja beskonačne petlje definiran je ponavljajući prekid odnosno uzastopno pozivanje void funkcije zvuk pomoću tickera zv. Pozivanje funkcije izvodi se naredbom zv.attach(&zvuk, 0.5);, te je u njoj definirano da se pomoću tickera zv uzastopno poziva funkcija zvuk u intervalu od 0.5 sekundi. Osim gore navedenog, u main funkciji definirano je pokretanje timera debounce, te pozivanje void funkcije pjesaci. Timer debounce ima funkciju uklanjanja neželjenog titranja signala prilikom pritiska tipkala koje može uzrokovati prestanak sinkronizacije sa timerom. Funkcija pjesaci poziva se pomoću hardverskog prekida, odnosno pritiskom na tipkalo, naredbom tipkalo.rise(&pjesaci);. Opisi rada funkcija zvuk i pjesaci opisani su u nastavku teksta.
Treći dio koda je void funkcija pjesaci. Kao što je gore navedeno, ova funkcija poziva se vanjskim pritiskom na tipkalo. Ova funkcija izvršava sljedeći zadatak, ukoliko je pješacima crveno svjetlo, pritiskom na tipkalo poziva se funkcija pjesaci te ona 2 sekunde nakon pritiska tipkala uključuje zeleno svjetlo za pješake. Stanja LED svjetla definirana su jednako kao u main funkciji, samo su promijenjena vremenska trajanja zelenog svjetla za pješake. U ovoj funkciji, trajanje zelenog svjetla za pješake, definirano ja da bude duplo kraće nego u main funkciji, što znači da će crveno svjetlo za vozila trajati kraće nego u glavnom radu semafora. Stanja digitalnih izlaza (LED-ica) definirana su na isti način kao u main funkciji. Pozivanjem i pokretanjem funkcije pjesaci prestaje se izvršavati main funkcija, čime se prekida i pozivanje funkcije zvuk pomoću tickera. Zbog toga je u funkciji pjesaci za zeleno i crveno svjetlo pješacima definiran i isprogramiran zvučni signal ovisno o tome koje svjetlo je uključena. Ukoliko ovaj dio koda ne bi bio napisan, kada bi se pokrenula funkcija pjesaci nestao bi zvučni signal i pojavio bi se tek kada bi se ponovno pokrenula main funkcija.
Četvrti dio koda je void funkcija zvuk. U programskom kodu, navedena funkcija se poziva pomoću tickera zv i to svakih 0.5 sekundi. U funkciji su definirani zvučni signali za crveno odnosno zeleno svjetlo pješacima. Dakle, funkcija se poziva svakih 0.5 sekundi te onda provjerava stanje zelenog LED svjetla za pješake, te ukoliko je uključeno izvršava definirani zvučni signal sa visinom reproduciranog zvuka za zeleno svjetlo, odnosno obrnuto ukoliko zeleno svjetlo pješacima nije uključeno, tj. uključeno je crveno svjetlo pješacima. Zvučni signal čuje se na buzzeru koji je spojen na PWM izlaz, te je definiran u prvom dijelu programskog koda. U nastavku je dio koda iz funkcije zvuk koji definira visinu reproduciranog zvuka za zeleno svjetlo pješacima:
z.period(0.1); z=0.5;
Naredba z.period definira PWM period za buzzer, odnosno visinu reproduciranog zvuka. Naredbom z=0.5; definiran je aktivni ciklus PWM izlaza na 50%, te se pomoću PWM frekvencije odnosno perioda može definirati visina reproduciranog zvuka.
Kada je završen cijeli programski kod, pokreće se compiler te se sve gore navedeno i definirano pokreće preko mikroupravljača NUCLEO STM32F072. Da bi se programski kod pravilno izveo, potrebno je pravilno spojiti sve komponente na eksperimentalnoj pločici. Kada se završi cijeli spoj, moguće je isprobati funkcionalnost cijelog programskog koda. Shema spajanja sklopa prikazana je u sljedećem poglavlju.