Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- .. article:: apps_demo_msp_crossway
- :author: Barbora Bložoňová <xblozo00 AT stud.fit.vutbr.cz>
- :updated: 20141281
- Projekt Řízení provozu na světelné křižovatce
- ==================================================
- Řízení provozu na světelné křižovatce(IMP projekt)
- ==================================================
- .. contents:: Obsah
- Popis aplikace
- ===================
- Křižovatka ve tvaru +, ve které auta přejíždí/přecházejí silnici ve dvou
- směrech provozu: sever-jih, dále "*SJ*" a západ-východ "*ZV*". Každý směr má z
- obou jeho konců vlastní semafor pro auta, semafory pro chodce nebyly z
- časových důvodů implementovány. Křižovatku ovlivňuje doba jejího chodu, zda-li
- je zapnutá/vypnutá a reaktivní režim.
- .. figure:: init.png
- :align: center
- Návrh
- ===================
- Samotný detailní návrh aplikace je popsán více v sekci Implementace a v
- komentářích ve zdrojovém kódu. Simulace času byla navržena reálně bez
- zrychlení, proto jsou časy trvání jednotlivých barev na semaforu úměrně
- zrychleny v sekundovém poměru 3:2:5 (barvy R:Y:G).
- Implementace
- ===================
- Implementace byla vyhotovena v jazyce C za použití FreeRTOS. Pro simulaci
- hodin byly částečně využity některé části z demo aplikace "*Hodiny reálného
- času (RTC)*" a pro čtení znaků z klávesnice byla využita potřebná funkce na
- tuto operaci z dema "*FreeRTOS*".
- Srdcem projektu jsou tedy 4 úlohy, tzv. *tasky*. Každý task reprezentuje
- kontinuální řešení funkcí aplikace např. čtení z klávesnice, výpis i samotný
- konečný automat pro správu křižovatky. Detailní popis implementace všech
- proměnných je přiložen ve formě komentářů ve zdrojovém textu.
- **1.terminalTask**
- Tento task spravuje nekonečnou aktualizaci terminálu a počítá s HW zpožděním.
- To je důležité především proto, aby se na terminál mohl neustále vypisovat
- stav provozu na křižovatce. Dále se zde řeší správa rozhodnutí, zdali je stav
- den, nebo noc.
- **2.crosswayTask**
- Hlavní část projektu tvoří nekonečná smyčka ve formě konečného automatu, dále
- "*FSM*", který nabývá několika fází alias stavů dle následující tabulky. Tento
- *FSM* tedy řeší řízení světel křižovatky.
- +------------+---------------------------------+
- | Stav | Význam |
- +==============+===============================+
- | INIT | počáteční inicializace |
- +--------------+-------------------------------+
- | STUJ | svítí červená (v daném směru) |
- +--------------+-------------------------------+
- | POZOR_VOLNO | svítí červená a žlutá |
- +--------------+-------------------------------+
- | VOLNO | svítí zelená |
- +--------------+-------------------------------+
- | POZOR_STUJ | svítí žlutá |
- +--------------+-------------------------------+
- | NOC | noc |
- +--------------+-------------------------------+
- | OFF | vypnuto |
- +--------------+-------------------------------+
- Automat začíná ve stavu *INIT*, kde inicializuje všechny potřebné proměnné. Další důležitou součástí automatu je počítadlo cyklů pro ošetření různě dlouhého čekání na daném stavu. Počítadlo cyklů pro urgentní režim je tedy co nejnižší, aby reprezentoval "*okamžitou*" odezvu na změnz stavů na křižovatce.
- **3.printTask**
- Tato úloha řeší samotný výpis na terminál. Výpis je řešen ve dvou řádcích dle
- následujícího schématu:
- **smer sem (zap/vyp)(faze)(rtype)**
- - směr aut; nabývá hodnot SJ/ZV
- - semafor pro auta daného směru ve tvaru tří znaků dle aktuálně rozsvícené barvy (*R* pro červenou, *G* pro zelenou, *Y* pro žlutou)
- - zapnutí/vypnutí signalizace na křižovatce; nabývá hodnoty *Z/V*
- - typ reaktivity *RTYPE*; nabývá hodnot *NORMAL/URGENT*
- - doba; nabývá hodnot *DEN/NOC*
- **4.keyboardTask**
- Task pro načítání přijatých znaků z klávesnice FitKitu. Aplikace rozeznává tři
- tlačítka:
- - '*1*' pro změnu stavu Zapnuto<>Vypnuto
- - '*2*' pro změnu stavu RTYPE Normal<>Urgent
- - '*3*' pro změnu stavu doby Den<>Noc.
- Přijatý signál je dále zpracován pomocí své příslušné proměnné, jež ovlivní
- další průběh *FSM*.
- **Main**
- Hlavní program slouží pro inicializaci proměnných potřebných na generování
- přerušení a start celé aplikace mj. i z HW hlediska. Dále se zde spouští
- *plánovač FreeRtos* a inicializují jednotlivé *FreeRTOS tasky*. V neposlední
- řadě se zde také nastavuje počáteční čas celé aplikace (začínáme ve 23:00:30,
- aby byl hned vidět přechod z denního na noční režim.).
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement